0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Servicenow】数字をソートしたい!【GlideRecord】

Last updated at Posted at 2024-12-22

ServiceNowで「数字」をGlideRecordでソート取得したいときのメモ

Servicenowで数値型(Integer)で定義すべきカラムを文字列型(String)で作成すると
GlideRecordでは文字列型カラムの数字は期待通りにソートして取得することができません。

例えばこのようなテーブル定義をして、両カラムに1,5,10,20を登録します。
image.png
image.png

両カラムをそれぞれ昇順ソートでGlideRecordしてみても
Numberは期待通りに取得できていますが、StrNumberはできていません。
image.png

サンプルコード①
sample.js
/*
 * 検証用のScript①
 */
var grSortMst = new GlideRecord('sample_strnumsort');

gs.info('数値型カラムのソート');
grSortMst.orderBy('number');
grSortMst.query();
while(grSortMst.next()){
	gs.info(grSortMst.number);
}

gs.info('-------------------------------');
gs.info('文字列型カラムのソート');
grSortMst.initialize();
grSortMst.orderBy('strnumber');
grSortMst.query();
while(grSortMst.next()){
	gs.info(grSortMst.strnumber);
}

この問題を解決するためには普通はカラムを再定義すればよいと思いますが
そういうことができないときのためにGlideDBFunctionBuilder.lengthを使用してみます。

使用した結果は以下の通りとなります。
image.png

サンプルコード②
sample2.js
/*
 * 検証用のScript②
 */

// GlideDBFunctionBuilderをインスタンス化
var fbSort = new GlideDBFunctionBuilder();
var fbLen = fbSort.length();
fbLen = fbSort.field('strnumber'); // 文字列カラムの文字数を取得する定義
fbLen = fbSort.build();

var grSortMst = new GlideRecord('sample_strnumsort');

gs.info('数値型カラムのソート');
grSortMst.orderBy('number');
grSortMst.query();
while(grSortMst.next()){
	gs.info(grSortMst.number);
}

gs.info('-------------------------------');
gs.info('文字列型カラムのソート');
grSortMst.initialize();
grSortMst.addFunction(fbLen);
grSortMst.orderBy(fbLen); // 第1ソートキーに文字列カラムの文字数を定義
grSortMst.orderBy('strnumber');
grSortMst.query();
while(grSortMst.next()){
	gs.info(grSortMst.strnumber);
}

GlideDBFunctionBuilder.lengthを使用することで、対象カラムの文字数を取得できます。
GlideRecord.orderByに上記インスタンスを渡すことで
文字数の範囲で昇順ソートができるため数値と同じようなソートが可能になりました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?