[ServiceNow] GlideQueryを使ってみる


GlideQueryとは

ITAMに含まれるServer APIですが、独立したPluginとしてインストール可能です。
たまたま見つけたのですが、GlideRecordよりも便利そうな気がしたので調べてみました。

プラットフォーム

Paris

GlideQueryの良い点

コードがシンプルになる

コードをシンプルにして可読性が上がります。
C#のLINQに似ています。

userquery.js
var gq = new GlideQuery('sys_user')
  .where('company.name',  '!=', '')
  .select('name', 'company$DISPLAY')
  .limit(5)
  .forEach(function (user) {
    gs.info(user.name + '@' + user.company$DISPLAY);
  });

/* 実行結果
*** Script: Lucius Bagnoli@ACME Japan
*** Script: Jimmie Barninger@ACME South America
*** Script: Melinda Carleton@ACME UK
*** Script: Jewel Agresta@ACME UK
*** Script: Sean Bonnet@ACME North America
*/

Fail Fast

GlideRecordではクエリが間違っていても実行されますが、GlideQueryはエラーがあったらそこで止まります。

gliderecord.js
var gr = new GlideRecord('sys_user');
gr.addQuery('activate', false); //正しくは'active'
gr.query();
while(gr.next()){
  gs.info(gr.name);
}


GlideRecordもエラーは出るのですが、、
そのまま誤ったクエリを実行してしまいます。

GlideQueryの場合、エラーを返して止まります。
誤った更新や削除が避けられそうです。

glidequery.js
var gq = new GlideQuery('sys_user')
  .where('activate',  false)
  .select('name')
  .forEach(function (user) {
    gs.info(user.name);
  });

使い方

ScriptインクルードにGlideQueryがあるか確認します。
現在はPlatformの機能ではないため、ITAMを使用していない場合はないと思います。

GlideQueryが存在しなければ、プラグインをインストールします。

参考

おまけ

いくつか試して見たサンプル

レコードの存在チェック

checkexist.js
var isExist = new GlideQuery('sys_user')
  .where('first_name', 'Lucius')
  .selectOne()
  .isPresent();
gs.info(isExist);

レコードの挿入

insertuser.js
var hoge = new GlideQuery('sys_user')
  .insert({
    first_name: 'First',
    last_name: 'Last',
    email: '[email protected]'
  })
  .get();
gs.info(JSON.stringify(hoge));

レコードの一括更新

updatemultiple.js
var gq = new GlideQuery('sys_user')
  .where('company.name',  '!=', '')
  .limit(3)
  .updateMultiple({ active: false });