ServiceNowでよく使用するデータの抽出(SELECT)、データの挿入(INSERT)、データの更新・削除(UPDATE,DELETE)の仕方について学んだことの備忘録です。
今回はGlideRecordというAPIを使用します。詳細については、ServiceNow Developer サイトに記載があるのでそちらを参考にしてください。
GlideRecordで使う基本的なスクリプト
GlideRecord()
最初にどのテーブルからデータの抽出、挿入、更新・削除をするか選択する必要があるため下記の1行を基本的には記入します。
var gr = new GlideRecord("sys_user");
GlideRecord(“”)で括弧の中でダブルクォーテーションでServiceNowにあるテーブル名を入力することでテーブルを指定します。
next()
GlideRecord の処理で次のレコードに移動します。
また、返り値として次のレコードがあればTreu、無ければFalseを返します。
if文で1件でもデータがあれば処理をしたいときや、while文複数レコードで繰り返し処理をしたいときなどに使用します。
if(gr.next()) {
// 最初の1件のみ処理する
}
while(gr.next()) {
// 全てのレコードを処理する
}
gs.print()
画面にログを出すときに使用します。
gs.print("test");
getRowCount()
検索結果のレコード件数を取得します。
主にif文などの条件のところで使用したりしています。
データの抽出(SELECT)スクリプト
query()
SQLでいうSELECT文を実行するという処理となります。
下記のように記入し、実行をするとテーブルにある全てのレコードを抽出します。
(SELECT * FROM TABLE と同じです)
var gr = new GlideRecord("sys_user");
gr.query();
addQuery()
SQLでいうWHEREのANDと同じでデータ抽出をする際に条件を追加していくときに使用します。
var gr = new GlideRecord("sys_user");
gr.addQuery("first_name", "Andrew");
gr.query();
while(gr.next()) {
gs.print(gr.user_name);
}
// 実行結果
*** Script: andrew.jackson
*** Script: andrew.och
抽出条件に指定したカラムが数値であれ=,<>,<=,>=の演算子や、文字列であればCONTAINS,STARTSWITH,ENDSWITHなども使用することが出来ます。
addNullQuery(), addNotNullQuery()
抽出条件に指定したカラムがNullのものやNullでないものを条件に追加することが出来ます。
var gr = new GlideRecord("sys_user");
gr.addNotNullQuery("first_name");
gr.query();
gs.print(gr.getRowCount());
// 実行結果
*** Script: 624
addEncodedQuery()
エンコードされたクエリ文を使用して検索条件に設定することが出来ます。
テーブルのリストビューでフィルター設定をした後に左上にあるフィルターのパンくずリストを左クリックしてCopy queryを選択することでクエリ文を取得出来ます。
var gr = new GlideRecord("sys_user");
gr.addEncodedQuery("active=True^first_nameSTARTSWITHAnd");
gr.query();
while(gr.next()) {
gs.print(gr.user_name);
}
// 実行結果
*** Script: andrew.jackson
*** Script: andrew.och
データ挿入(INSERT)のスクリプト
initialize()
挿入するための空のレコード作成をするための処理となります。
var gr = new GlideRecord("sys_user");
gr.initialize();
newRecord()
こちらも上記と同様に挿入するためのレコード作成をする処理ですが、こちらはテーブルのカラムにデフォルト値がある場合には既に設定された状態のレコードを作成します。
var gr = new GlideRecord("sys_user");
gr.newRecord();
setValue()
基本的には挿入するレコードのカラム設定は下記のように gr.columnName = value のように行います。
var gr = new GlideRecord("sys_user");
gr.newRecord();
gr.first_name = "hoge";
gr.last_name = "fuga";
しかし、カラム名に変数を使用したい場合に上記のように記入してしまうと、変数がカラム名となってしまします。
setValue() を使うことによってカラム名に変数を設定できます。
var column = "user_name";
var gr = new GlideRecord("sys_user");
gr.newRecord();
gr.setValue(column, "hoge.huga");
insert()
実際にテーブルに対してレコードを挿入する処理となります。
上記のメソッドなどを使用して挿入したいレコードの値を設定した後に使用をしてレコード作成を行います。
var gr = new GlideRecord("sys_user");
gr.newRecord();
gr.first_name = "hoge";
gr.last_name = "fuga";
gr.user_name = "hoge.fuga";
gr.insert();
データ更新・削除(UPDATE,DELETE)のスクリプト
update()
更新したいレコードを指定する際にはデータ抽出のところで記載したことを行って対象を選択します。
設定したい値についてはデータ挿入のところのsetValue()などで値をセットします。
実際にレコードを更新する際に`update()`を使用して更新します。
var gr = new GlideRecord("sys_user");
gr.addQuery("user_name", "hoge.fuga");
gr.setValue("last_name", "piyo");
gr.update();
updateMultiple()
複数レコードを一括で同じ値で更新したい際にはこちらを使用します。
対象レコードの選択はデータ抽のところで記載したことを行って対象を複数選択します。
var gr = new GlideRecord("incident");
gr.addQuery("priority", 4);
gr.setValue("state", 7);
gr.updateMultiple();
deleteRecord()
update() と同様に削除したい対象のレコードを選択して、実際にレコードを削除する際に
deleteRecord() を使用して削除します。
var gr = new GlideRecord("sys_user");
gr.addQuery("user_name", "hoge.fuga");
gr.deleteRecord();
deleteMultiple()
updateMultiple() と同様に複数レコードを一括で削除したい際にこちらを使用します。
対象レコードの選択はデータ抽のところで記載したことを行って対象を複数選択します。
var gr = new GlideRecord("incident");
gr.addQuery("priority", 4);
gr.deleteMultiple();