見出し画像

[ServiceNow]Preview problemの対応方法

Update setを移送するに発生するproblemの対応方法について、下記のUpdate setに関する理解を前提として、シェアします。

Preview problemとは?

前回の記事で、Update setがUpdate = 開発環境で行われた一つ一つの変更を詰め込んだ箱のようなものだと説明しました。

画像1

そして、検証/本番環境に持っていく際は、次の3つの手順を踏みます。

画像2

②の移送先環境にUpdateを適用してよいかチェックした際に、そのまま適用すると移送先環境で不整合が発生する場合を、Preview Problemと言います。

Preview problemレコードの見方

Preview Problemは、Retrieved Update Setレコードの関連リストに表示されます。

画像3

中身を見ていきます。

画像4

① Update Set … Preview Problemが発生したUpdate Set。つまり、今まさに移送しようとしているUpdate Setが記載されています。
② Remote Update … Preview Problemを引き起こしたUpdate。ここでいうRemoteは、"移送元"という意味です。
③ Description … 何が問題になっているかが記載されます。

これらを踏まえ、Preview Problemの原因を特定した上で、④に記載されている、下記の2つのいずれかのアクションを選択する必要があります。
Accept remote update … 移送元のUpdateを受け入れる、つまり不整合が起ころう適用するということです。
Skip remote update … 移送元のUpdateをスキップする、つまりそのUpdateは適用しないということです。

そして、私の経験上、Update Problemの8割以上が、これから紹介する2つのパターンです。この記事では、その2つのパターンについて、どのように調査し、解消すればよいのかを紹介します。

Missing Object 参照先のレコードが存在しない

上記の例も実はこのパターンです。Descriptionは下記のようになります。

Could not find a record in sc_cat_item for column cat_item referenced in this update

このエラーは、「このUpdateにおいて、sc_cat_item上のあるレコードを参照するcat_itemカラムがあるが、その参照先レコードが見つからない」ということを意味しています。下図のイメージです。

画像5

つまり、他のレコードを参照するフィールドに関するUpdateを移送しようとした際に、そのレコードの参照先レコードが、移送先環境において存在しない場合にこのエラーが出ます

調査・対応方法
このPreview Problemが発生した場合は、Preview Problemにおける"Missing Item Table"と"Missing Item"を参照しながら、そのレコードがなぜ移送元環境には存在するが移送先環境には存在しないのか、を突き止めることで、原因がわかります。具体的には、下図に示したように、移送元環境において、Filter navigatorより"<Missing Item Table>.list"で当該テーブルのリストを開き、"Sys ID is <Missing Item>"のフィルタを適用し、当該レコードを見つけます。

画像6

主な原因
このエラーの主な原因は下記の2つです。
① 参照先レコードの移送漏れ … 本来移送すべき参照先のレコードが移送先環境に移送されていない場合です。特に多いのが、こちらの記事でも記載したように、ナレッジなどのUpdate setには含まれないオブジェクトが参照先となっている場合に、当該オブジェクトをXML移送する前にPreviewを行ってしまうことです。
② 参照先レコードを手動で作った … 参照先のレコードが存在するはずなのにこのエラーが出る、という場合は、移送元環境と移送先環境でそれぞれ手動で参照先レコードを作っている可能性が高いです。参照型のフィールドは、参照先をSys IDで識別しているため、仮に同じ名前であっても、移送元環境と移送先環境でそれぞれ手動で参照先レコードを作るとSys IDが異なり、うまく参照されない場合があります。(なお、実際にはDisplay valueによって識別可能であれば、Sys IDが異なっていても、エラーになることなく正しく参照できる場合もあります)

Collision 変更が競合した

Descriptionは下記のようになります。

Found a local update that is newer than this one

このエラーは、移送先環境に既にそのUpdateと同じオブジェクトに対する更新が存在し、どちらを優先していいかわからない場合に発生します。

画像7

調査・対応方法
Preview Problemレコードの"Compare with local"をクリックすると、移送先環境のUpdateと移送元環境のUpdateを比較することができます。この画面で何に対する変更が競合しているのかを知ることができます。そして、実際に競合したUpdateがいつ、誰によって作られたのかなどを知りたければ、"Remote update", "Missing Item Update Record"から調査できます。

画像8

主な原因
このエラーの主な原因は、本来直接変更を行わない検証/開発(移送先)環境に、何らかの理由で手動で変更を行うことです。具体的には、外部システム連携に関する設定など、開発環境と本番環境で設定値が異なる場合に、本番環境に手動で設定を行った場合などです。

まとめ

上記2つの処理方法をマスターしておくと、たまに出てくる他のパターンについても、ドキュメントを見つつ調査、対応できるようになると思います。

以上です。

この記事が気に入ったらサポートをしてみませんか?