- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2022 10:26 PM
コミュニティの皆様
いつもお世話になっております。
私は、Scripted API・QueryParameterについて学習しております。
理由はMIDサーバーから渡された絞り込み条件設定ファイルをServiceNowのScripted APIにて
QueryParameterとして格納すると要件があるためです。
絞り込み条件はカンマ区切りのリスト形式で渡されます。
(例:TEST=SAP,ATF,・・・)//TESTはQueryParameter名です。
本来であれば、以下のようにエンコードされたクエリをQueryParameterに設定する必要があることも承知しております。
short_descriptionLIKESAP^ORshort_descriptionLIKEATF
今作成しているScripted APIは以下になりますが、
ここからどのようにすれば、上記の要件を達成できるでしょうか。
皆様のご協力お待ちしております。
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
// implement resource here
var bodyArray = [];
var query = request.queryParams.TEST;
gs.info("query=" + query);
QueryString ="active=true^stateIN1,2";
var testData = new GlideRecord("incident");
testData.addEncodedQuery(QueryString);
testData.addEncodedQuery(query);
testData.query();
while(testData.next()){
var body = {};
body.number = testData.getValue("number");
body.state = testData.getDisplayValue("state");
body.priority = testData.getDisplayValue("priority");
body.sysID = testData.getDisplayValue("sys_id");
body.short_description = testData.getValue("short_description");
bodyArray.push(body);
}
response.setBody(bodyArray);
})(request, response);
絞り込み条件としては
- インシデントがアクティブかつステータスが"新規"または"進行中"
- Short_descriptionにSAPまたはATFが含まれていること
になります。
下の条件は可変にしたいとのことですので、QueryParameterを使用するようにしています。
よろしくお願いいたします。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-05-2022 12:46 AM
'IN'でまとめられないのであれば、ひとつひとつ’OR’を繋げることになると思います。
スクリプトなら、
var osList = '' + request.queryParams.TEST;
var query = 'short_descriptionLIKE';
// 正規表現置換、終端の空白削除、先頭にQuery追加、カンマ区切りにQuery追加
query = osList.replace(/\s*$/,'').replace(/^\s*/,query).replace(/[, ]+/g,'^'+query);
// 例
// osList = ' SAP , ATF , TF,F '
// Output: 'short_descriptionLIKESAP^short_descriptionLIKEATF^short_descriptionLIKETF^short_descriptionLIKEF'
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-08-2022 02:20 AM
ご回答ありがとうございます。
追加で大変恐縮ですが、こちらの処理についても確認させてください。
var osList = '' + request.queryParams.TEST;
request.queryParmsの前に''とありますが、
こちらの処理について、ご教示頂けないでしょうか。
よろしくお願いいたします。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-08-2022 03:51 AM
TESTがどんな値になるのか不確定のため、先頭に文字を足すことで、明示的に文字列型に強制できます。ServiceNowは特に変数がJava Objectの場合があり文字列として処理できない場合があるため、この方法で文字列にします。これは私の個人的な癖です。おまじないに近い事もあります。こうしなければならない絶対的な理由もないです。ほかの良い方法もあります。
例:
var gr = new GlideRecord("incident");
gr.setLimit(1);
gr.query();
gr.next();
var osList = gr.short_description;
gs.info("typeof 1:"+typeof osList); // object (厳密には Java object の GlideElement)
gs.info("typeof 2:"+typeof (''+osList)); // string
この文字列化の処理方法について興味深い記事があるので読んでみてください。この記事は、ServiceNowのGlideRecordから値を取得する場合の戻り値の型が不確定のため、どの方法で処理するのが一番良いか検証した記事です。
GlideRecord getValue は文字列の王様|コードクリエイティブ|サービスナウブログ (codecreative.io)