3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ServiceNow] GlideQueryを使ってみる

Posted at

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);
}

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

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

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

QlideQueryError.jpg

使い方

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

ScriptIncludes.jpg

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

GlideQueryPlugin.jpg

参考

おまけ

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

レコードの存在チェック

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: 'hoge@example.com'
  })
  .get();
gs.info(JSON.stringify(hoge));

InsertLog.jpg

InsertedUser.jpg

レコードの一括更新

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

DeactivateLog.jpg

DeactivatedUsers.jpg

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?