taku
ServiceNow Employee
ServiceNow Employee

[Scripting Tipsシリーズ]と題しまして、Scriptingに関する小技を紹介していきます。
本シリーズは、「ある程度のスクリプティングはできるスキルレベル」を前提としておりますので、細かい解説は省略していきますのでご了承ください。

記念すべき第1回のテーマは「GlideRecordのクエリ条件は超簡単に書ける!」です。

 

まず、こちらをご覧下さい。よくあるGlideRecordの記述です。

var gr = new GlideRecord('incident');
gr.addQuery('active','true');
gr.addQuery('priority',1);
gr.query();
while(gr.next()){
   //ここに処理を記載
}

 

インシデントテーブルに対して、優先度が1で、アクティブなレコードを抽出して処理するクエリ条件です。
この書き方でも良いのですが、抽出条件がたくさんあったり、「あれ?NULL判定はどうやって書くの?」となったり、日付など複雑になると、try&errorを繰り返しながらデバッグしたり、結構大変だと思います。
これを一発で書く方法があります!

 

まず、対象となるテーブルのリスト画面を開きます。(ここでは、対象テーブルをインシデントテーブルとします。)
次に、リスト画面でスクリプトで書きたいクエリ条件をリストのフィルタで設定します。
設定後、フィルタ条件の一番右側の条件を右クリックし、"クエリのコピー"を選択します。

find_real_file.png

 

ここでコピーしたクエリを利用して、スクリプトを以下のように記載します。

QueryString = 'priority=1^active=true'; //ここにコピーしたクエリをペースト

var gr = new GlideRecord('incident');
gr.addEncodedQuery(QueryString);
gr.query();
while(gr.next()){
   //ここに処理を記載
}

 

このスクリプトは1つ目のスクリプトと同じ動作となります。
複雑なクエリも簡単にかけますし、しかも、抽出した後の結果をリスト画面で確認しながらクエリを書くことができるので、開発生産性も大いに向上するでしょう!
メンテナンス性も含め、こちらの書き方で覚えましょう。

 

<参考>
Docs「フィルタを使用してエンコードされたクエリ文字列を生成する」
Docs「APIリファレンス」>「GlideRecord - Scoped」