こんにちは!
SCSK株式会社 小鴨です。
とある日のこと
「更新セット適用できたし、カタログUIの確認でもするか、、、あれ?」

「…画像貼れてなくね?」
「………………」
「………ううう…あんまりだ…….」
「HEEEEYYYY!!! あァァァんまりだァァァァ!!(ノД`)・゜・。」
皆さんはこんな状況に直面したことはありますか?
若かりし頃の私はこの事象に出会った際、あまりの理不尽に世を憎んだ覚えがあります。
調査の時間もない、締め切りも近い、ということで
本番環境へ直接、画像の貼り直しを行い対処したことを覚えてます。
あくまで緊急対応のために行った妥協策です。お客様の同意もあり。
保守性が落ちるので皆さんはやらないように。。。
ということで今回はこの事象に対する
正しいデータ移行の方法 についての解説をさせていただきます!!
多くの皆様にとっては釈迦に説法かもしれませんが
そういった方はぜひ、コメントにてより高次元の使い方をご教示いただけると幸いです!
更新セットに入らないデータ
何が置いて行かれている?
以前もこちらの記事で紹介した通り、更新セットには入らない種類の更新というものが存在します。
結論から言うと今回の事象もこれが原因です。

ではどこのテーブルを参照すべきかというと二つあります。
一つは「sys_attachment」(添付ファイル)テーブル
もう一つは「sys_attachment_doc」(添付ドキュメント)テーブル
これらが今回の確認先となります。
各テーブルについて
まずは「sys_attachment」(添付ファイル)テーブルについて
以下のようにServiceNowに取り込まれたファイルは以下テーブルに格納されています。
もちろんカタログに配置されている画像も同様です。

ファイル名はもちろん、テーブル名や作成日時フィールドもあるので、検索を行えば該当するファイルを見つけることができるはず。
これをXML等でエクスポートし、本番環境に移行します。
さて、これで一件落着と思いきや画像はまだ表示されていないと思います。
なんでじゃ!?と思いますが、ここで出てくるのが「sys_attachment_doc」(添付ドキュメント)テーブルです。
このテーブルは以下のような構成になっていまして、正直得体が知れないですが、以下さえ押さえておけば大丈夫。
ポイントは先ほどのテーブルに入っていた添付ファイルに紐づいているレコードをエクスポートすることです。

例えば「sys_attachment」(添付ファイル)テーブルで移行した添付ファイルの名前が
「sn_crs_config_28.2.1_package_inventory.csv」で合った場合
「システム添付」というフィールドでその名前で検索すれば関連するレコードがすべて表示されます。
↓こんな感じ

あとはこれを本番環境へ移行すれば画像が復元されます!!
次回予告
特に予定はありませんが「ビュー」関連の内容で書いてみようかなと思います。
モジュールからレコードの新規作成を行う場合に、デフォルトビュー以外で出したいなという場合
どうすればよいかご紹介なんてありかな!
