はじめに
- バージョン
- ServiceNow: Rome
前回の記事【ServiceNow】特定の列の要素一覧を取得したい~基礎編~では、
欲しいデータが1つのテーブルで完結している場合で使えます。今回は欲しいデータが1つのテーブルで
完結していない場合、列の要素一覧をどのように取得するかを紹介します。
例としては、以下テーブルRequested Items[sc_req_item]
の列Additional commentsの要素を
取得する場合です。Requested Item(RITM0010057)の列Additional commentsを見ると、
Requested Itemに紐づくAdditional commentsが全て(3つ)記載されています。また、Requested Item内の
Activities
を見ると、Additional commentsの内容が確認可能です。
前回の記事との違いは何でしょうか?
- テーブル
Requested Items[sc_req_item]
- Activities
1. テーブル連携の確認
前回の記事の通りに、テーブルRequested Items[sc_req_item]
の列Additional commentsの要素一覧を
取得しようとしても失敗してしまいます。なぜならば、列Additional commentsの内容は他のテーブルを
参照しているからです。ServiceNowは複数のテーブルが複雑に連携しているので、同じテーブルや
画面上で見えるからといって、1つのテーブルで全ての情報が得られるとは限らないということを
念頭に置く必要があります。
今回では、以下のようにテーブルRequested Items[sc_req_item]
の列Additional commentsが、
他のテーブルJournal Entries[sys_journal_field]
と連携しています。
2. コード紹介
連携しているテーブルさえわかってしまえば、GlideRecord
でテーブルの内容が取得できます。
今回はテーブルJournal Entries[sys_journal_field]
から以下の条件で列Valueの内容を取得します。
- Name: sc_req_item
- Element: comments
- Element ID: Requested Item(RITM0010057)のSys ID
var column_array = [];
var table_data = new GlideRecord('sys_journal_field');
table_data.orderBy('sys_created_on');
table_data.addQuery('name', '=', 'sc_req_item');
table_data.addQuery('element', '=', 'comments');
table_data.addQuery('element_id', '=', 'Requested Item(RITM0010057)のSys ID');
table_data.query();
while(table_data.next()) {
column_array.push(table_data.getValue('value'));
}
gs.info(column_array);
3. ログの確認
想定通り、Additional commentsの内容を取得できていることが確認されました。
参考記事
GlideRecord - ServiceNow Developers
GlideRecord(API Reference) - ServiceNow Developers