LoginSignup
1
2

More than 3 years have passed since last update.

ServiceNow - テーブルの情報を取得するスクリプト

Posted at

概要

ServiceNowの一つのテーブルのみにデータをインポートする場合はEasy Importを利用することができる。しかし、ServiceNowテーブルは複数の他テーブルと関連している場合が多いため、データを挿入する場合に複数の関連テーブルにも同時に挿入した方が便利である。
そのような場合は事前に利用するテーブルのフィールドとその属性情報を取得する場合が多い。
本記事ではServiceNowテーブルから利用するフィールド情報を取得するスクリプトを作成します。

スクリプト

var target_table = "cmdb_ci_ip_firewall";     // フィールド情報を取得するテービル名
var field_list = ["Name", "Serial number", "Vendor", "Manufacturer", "Firmware manufacturer", "Firmware version", "Ports", "IP Address", "Location", "Status", "Category", "Owned by", "Managed by", "Managed By Group", "Support group", "Comments", "Model ID", "Model number", "Default Gateway"];
var column_list = ["column_label", "element", "internal_type", "reference", "default_value"];    // 情報を取得するフィールドラベル (フィールド名ではなくフォームなどに表示されているフィールドの「ラベル」です)

column_info_list = [];
for (var i=0; i<field_list.length;i++) {              // 取得するフィールド毎に処理する
  var gr_fields = new GlideRecord("sys_dictionary");  // ServiceNowのシステム辞書を検索する
  gr_fields.addQuery("name", target_table);           // 上で指定したテーブルをクエリーする
  gr_fields.addQuery("column_label", field_list[i]);  // 取得するフィールドをクエリーする
  gr_fields.addEncodedQuery('internal_type!=collection^ORinternal_type=NULL');//To ignore all the table dictionaries(optional)
  gr_fields.query();                                  // クエリーを実行

  while(gr_fields.next()) {                           // クエリーの結果を処理する。クエリー結果をDictionaryに変換する
    column_value_dict = {};
    for (var j=0; j<column_list.length; j++) {         // 取得したフィールド情報を処理する
      column_value_dict[column_list[j]] = gr_fields.getValue(column_list[j]);
    }
    column_info_list.push(column_value_dict);          // Dictionaryを結果リストに追加する
  }
}

csv_str = "\n";
for (var k=0; k<field_list.length; k++) {             // 結果を表示する
  csv_str += Object.keys(column_info_list[k]).map(function(m){  // csvに変換する
    return column_info_list[k][m];
  }).join(',') + "\n";
}
gs.info(csv_str);

テーブル情報の取得手順

スクリプトを利用してLibreOfficeにテーブルデータ情報表を作成する手順を示します。

情報を取得するテーブル名を取得

情報を取得するテーブル名を取得します。
1. ServiceNowのアプリケーションナビゲータから情報を取得するフォームを検索して開きます。
例では「firewall」テーブルの情報を取得するため「firewall」を検索します。
table_info_1.png
2. リストのヘッダを右クリックして「Configure」ー「Dictionary」を選択します。
table_info_2.png
3. テーブル情報リストが表示されます。列「Table」の値がデータベーステーブル名です。
table_info_3.png
4. テーブル名をスクリプト内の変数「target_table」に設定します。

var target_table = "cmdb_ci_ip_firewall";

情報を取得するフィールドラベルを所得

次ぎの情報を取得するフィールドラベルを取得します。
1. テーブルに関するフォームを開き、新規レコード用フォームを開きます。
「New」ボタンを押下。
table_info_10.png
2. フィールドラベルはフォームに表示している文字列です。
table_info_11.png
3. フォームに表示されていないフィールドラベルを取得するにはフォームデザイナを開くいます。
リストコントロールアイコンを右クリックして「Configure」ー「Form Design」を選択する。
table_info_12.png
4. 右側にフォームで利用可能なフィールドラベル一覧が表示されます。フォームに追加する場合はドラッグ&ドロップします。
フォームに追加しなくてもフィールドの情報を取得することは可能です。その場合はフィールドラベルをメモしてスクリプトの所得するフィールド情報リストに指定します。
table_info_13.png
5. フィールドをフォームに追加する場合はフィールドラベルをドラッグ&ドロップした後に「Save」ボタンを押下します。
table_info_14.png
6. フィールドを追加した場合は追加したフィールドがフォームに追加されます。
table_info_15.png
7. 取得するフィールドのフィールドラベル名をスクリプト内の変数「field_list」に設定します。

var field_list = ["Name", "Serial number", "Vendor", "Manufacturer", "Firmware manufacturer", "Firmware version", "Ports", "IP Address", "Location", "Status", "Category", "Owned by", "Managed by", "Managed By Group", "Support group", "Comments", "Model ID", "Model number", "Default Gateway"];

スクリプトの実行

スクリプトを実行してフィールド情報をcsv形式で取得します。取得した情報をLibreCalcに貼り付けます。
1. ServiceNowから直接スクリプトを実行します。直接実行する場合は「Scripts - Background」を使います。
アプリケーションナビゲータから「background」を検索して「System Definition」下の「Scripts - Background」を選択します。
table_info_20.png
2. スクリプトをコピーペーします。
「Run script」ボタンを押下するとスクリプトは実行されます。
table_info_21.png
3. スクリプトの実行結果が表示されます。
table_info_22.png
4. 結果を選択してコピーします。
table_info_23.png
5.LibreCalcを開き、シートに内容を貼り付けます。
table_info_24.png
6.1レコードが1セルに貼り付けられますのでデータを分離します。
列を選択してメニューから「データ」ー「テキストから列へ」を選択します。
table_info_25.png
7.結果はコンマ区切りなので「コンマ」をチェックして、「OK」ボタンを押下します。
table_info_26.png
8. 行の高さが大きいので調整します。
左上を選択してすべてのセルを選択してコピーします。
table_info_27.png
9.新しいシートに貼り付けます。
table_info_28.png
10.ヘッダ、列幅などを調整します。
table_info_29.png

以上

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2