ServiceNowのフォームを開くと、画面下部に「インシデント」「承認」「タスク」など、現在開いているレコードに関連するレコードの一覧が表示されることがあります。
これが「関連リスト(Related List)」です。
普段ServiceNowを利用していると当たり前のように目にする機能ですが、
「そもそも、なぜこのレコードが関連リストに表示されるのか」
「関連リストとして表示できるテーブルはどうやって決まっているのか」
「表示する列はどこで設定しているのか」
など、いざ設定しようとすると少し分かりづらい部分があります。
今回は、ServiceNowの関連リストがどのような仕組みで表示されているのかを、できるだけシンプルに整理してみます。
関連リストとは
関連リストは、現在開いているレコードと何らかの関係を持つ別テーブルのレコードを、フォーム上に一覧表示する機能です。
例えばRequestレコードを開いたとき、そのRequestに紐づいているRequest Itemをフォーム下部に一覧表示できます。
ServiceNow公式ドキュメントでも、関連リストは「現在のレコードと関係を持つテーブルのレコードをフォーム上に表示するもの」とされています。
関連リスト上でも通常のリストと同じように、関連リスト上でもレコードを開いたり、検索や並び替えを行ったりできます。
関連リストを理解するうえで、まず押さえておきたいのが参照フィールドです。
例えばRequest Itemテーブルには、Requestテーブルを参照する「Request(request)」フィールドがあります。
イメージとしては以下のような関係です。
Request
↑
│ request
│
Request Item
Request Item側のrequestフィールドにRequestレコードのsys_idが格納されることで、「このRequest ItemはこのRequestに紐づいている」という関係が成立します。
1つのRequestレコードが複数のRequest ItemレコードでRequestフィールドの値として指定されることがあるので、以下のような1対多の関係が成り立つことになります。
親レコード 1件
↓
子レコード 複数件
ServiceNowでは、参照フィールドによる1対多の関係を利用して、一方のテーブルをもう一方のテーブルの関連リストとして表示できます。
参照フィールドがなくても関連リストは作れる
しかし、関連リストを作る方法は参照フィールドのみに限りません。
代表的なものとして、以下の3パターンがあります。
1. 参照フィールドによる関連リスト
先ほど紹介した方法です。
子テーブル側に親テーブルへの参照フィールドがあるケースで、ServiceNowで最もよく見る関連リストだと思います。
2. Many-to-Manyによる関連リスト
1つのレコードに複数のレコードを紐づけ、さらに紐づけられる側も複数のレコードと関係を持つ場合には、Many-to-Many(多対多)の関係を利用できます。
ServiceNowではMany-to-Many Definitions[sys_m2m]を利用して多対多の関係を作成できます。
例えば、
Aレコード ← 中間テーブル → Bレコード
という中間テーブルを用意し、両方のテーブルから関連するレコードを表示するような構成です。
3. Relationshipを使った関連リスト
もう一つ便利なのがRelationshipです。
ナビゲーターから、
System Definition > Relationships
を開くと、テーブル同士の関係を独自に定義できます。
例えば、「ユーザーを開いたとき、そのユーザーが起票者になっているTaskを表示する」という関連リストを作りたいとします。
この場合、UserテーブルからTaskテーブルへの直接の参照関係を新しく作らなくても、Relationshipで条件を定義できます。
参照フィールドだけでは表現できない条件で関連レコードを表示したい場合に便利です。
フォームに表示する関連リストを設定する
テーブル同士に関係があるからといって、利用可能な関連リストがすべてフォーム上に表示されるわけではありません。
Classic UIの場合、対象レコードのフォームを開き、フォームメニューから、
Configure
→ Related Lists
を選択します。
すると、フォームで利用できる関連リストの一覧が表示されます。
左側に利用可能な関連リスト、右側に現在フォームへ表示している関連リストが表示されるため、必要なものを追加して保存します。
つまり、
テーブル同士に関係がある
↓
関連リストとして利用できる
↓
フォームに表示する関連リストを選択する
という流れになります。
関連リストに表示する列はどこで決める?
関連リスト自体は表示できたものの、「表示したい項目がない」、「不要な列が表示されている」というケースもあると思います。
関連リストの列については、対象の関連リストを開き、列名を右クリックして、
Configure
→ List Layout
から変更できます。
通常のリストと同じように、表示するフィールドや列順を設定できます。ServiceNowではリストビューの定義としてsys_ui_listが使用されており、ビューごとに表示項目を持つ仕組みになっています。
なお、ユーザーが個別にリストをパーソナライズしている場合、管理者側でList Layoutを変更しても、そのユーザーには変更内容がすぐ反映されない場合があります。
その場合は個人設定されたリストレイアウトをリセットする必要があります。
まとめ
今回はServiceNowの関連リストについて、その仕組みを簡単に整理しました。
関連リストは単純に「フォームの下に別テーブルの一覧を表示している」のではなく、テーブル同士の関係をもとに表示されています。
基本となるのは参照フィールドによる1対多の関係ですが、Many-to-ManyやRelationshipを使うことで、より柔軟な関連リストを作ることもできます。
関連リストを設定するときは、「どのテーブルのレコードを表示したいか」だけでなく、「現在のレコードと、そのレコードがどのような関係にあるのか」を考えると仕組みが分かりやすくなると思います。
関連リストの設定場所や表示列が分からなくなった際は、ぜひ参考にしてみてください。

