こんにちは
SCSKの庄司です。
今回は、ServiceNowの環境間における画像の移送方法を紹介していきます。
添付ファイルは更新セットに含まれない
ServiceNowでは通常、環境間での変更の移送は更新セットを利用して実施します。
しかし、更新セットにはすべてのレコードを含められるわけではなく、タスク(Task)ベースのレコードやユーザーデータなど、対象外となるものが存在します。
添付ファイルもその一つです。
そのため、画像のアップロードなどを含む更新セットの移送には、別途で画像データも移送してあげる必要があります。
そこで本記事では、画像などの添付ファイルを環境間で移送する手順を解説します。
添付ファイル関連テーブル
ServiceNowでは、添付ファイルに関連するデータは以下の2つのテーブルに格納されています。
- 添付ファイル(sys_attachment)テーブル:ファイル名、サイズ、table_name/table_sys_id(どのレコードに付いているか)などのメタ情報。
- 添付ドキュメント(sys_attachment_doc)テーブル:ファイルの実データ情報。1つの添付に対して複数レコードが紐づく場合があります。
添付ファイルを完全に移送するには、これら両方のテーブルのレコードを移送する必要があります。
移送手順
それでは、更新セットで移送されない添付ファイルをどう移送するか解説します。
今回は視覚的にわかりやすい例として、カタログアイテムの「リッチテキスト」タイプ変数に画像を添付してみます。
画像をアップロードしたことで、裏側では該当の「添付ファイルレコード」と「添付ドキュメントレコード」が作成されています。

更新セットに入らないレコードの移送は、XMLファイルとしてエクスポートし、対象環境でインポートすることで実施できます。
リストのコンテキストメニュー(ヘッダーを右クリック) > エクスポート > XML を選択します。

これでXMLファイルのエクスポートが出来ました。 本来であれば、カタログアイテム自体を含んだ更新セットを移送した後に、このXMLファイルをインポートします。
ただ、今回は検証用のPDI環境しかないため、更新セットのみ適用済みの状態(=添付ファイルレコード、添付ドキュメントレコードがない状態)を再現するために、あえて該当の添付ファイルレコードと添付ドキュメントレコードを削除します。
削除後のカタログアイテムフォームでの表示は以下のようになります。 削除前は左上の赤枠の中にファイル名が表示されていましたが消えており、右の赤枠あたりにあった画像も「画像なし」の表示になっています。
レコードと添付ファイルとの紐づき情報を含む「添付ファイルレコード」と、中身である「添付ドキュメントレコード」が存在しないため、どちらも表示できない状態です。
ポータル画面でも同様に、画像が表示されていません。

では、添付ファイル情報をインポートして復旧させていきます。
まずは「添付ファイルレコード(sys_attachment)」のXMLをインポートし、カタログアイテムフォームを確認してみます。
リストのコンテキストメニュー(ヘッダーを右クリック) > XMLのインポート(Import XML) から、先ほどエクスポートしたXMLファイルをアップロードします。

左上に添付ファイルの表示が復活しました。
しかし、実データである「添付ドキュメントレコード」がまだ取り込まれていないため、肝心の画像プレビューは表示されていません。

引き続き、先ほどと同じ手順で「添付ドキュメントレコード(sys_attachment_doc)」をインポートします。


両方のデータがインポートされたので、カタログアイテムフォームとポータル画面を確認します。
画像がしっかりと表示されていることが確認できました。
まとめ
ServiceNowの環境間での添付ファイルの移送は、該当テーブルのレコードをXML形式でエクスポート/インポートすることで実施できます。
実施の際の重要な注意点として、更新セットを先に適用してから、添付ファイル関連のレコードをインポートするようにしてください。
添付ファイルは「どのレコードに紐づくか」という情報(Sys_ID)を持っています。 そのため、紐づけ先のレコードが存在しない状態で先に添付ファイルをインポートしてしまうと、リンク切れを起こしたり、データが正しく反映されなかったりする事象が発生する可能性があります。
ぜひ、環境間での画像の移送の際には参考にしてみてください。



