Virtual AgentのDynamic choice inputでRecordをScriptでフィルタリングする[ServiceNow]

2023/03/22に公開

TL;DR

自動入力されるサンプルコードでは動作しませんでした。下記公式記事のScripting Choice Value Expressionsをご覧ください。

https://developer.servicenow.com/dev.do#!/learn/learning-plans/tokyo/servicenow_application_developer/app_store_learnv2_virtualagent_tokyo_scripting_virtual_agent

Situation

StudioでVirtual AgentのDynamic choice inputを作成し、RecordをScriptでフィルタリングしようとするも動作しない。サンプルコードをコメントアウトしただけなのに動作しない。

Dynamic choice inputでPopulate choices byでRecordを選択。Filter choicesにはScriptを選択。すると、下記スクリプトが自動入力されていると思う。

(function execute(table) {
    /* Write a glide record query, and return the glide record.
       For example:

       var gr = new GlideRecordSecure(table);
       gr.addEncodedQuery('active=true^number=INC0010099');
       gr.query();
       if(gr.next()) {
          return gr;
    }
    */
})(table)

上記スクリプトを下記スクリプトに書き換えて実行してみるも、No records response messageで指定した内容が表示されるのみ。

(function execute(table) {
       var gr = new GlideRecordSecure(table);
       gr.addEncodedQuery('active=true');
       gr.query();
       if(gr.next()) {
          return gr;
    }
})(table)

Solution

スクリプトでGlideRecordオブジェクトではなく、1つの選択肢表すDictionaryの、Arrayを返す必要がある。

サンプルコード

(function execute(table) {
	var options = [];
	var gr = new GlideRecordSecure(table);
	gr.addEncodedQuery('active=true');
	gr.query();
	while(gr.next()) {
		options.push({ 'value': gr.getUniqueValue(),
		'label': grUser.getValue('number')});
	}
	return options;
})(table)

Summary

もし、サンプルコードの方法で動作している方がいればお教えください。
また、間違いなどがあればご指摘ください。

↓偉大なる参考記事
https://developer.servicenow.com/dev.do#!/learn/learning-plans/tokyo/servicenow_application_developer/app_store_learnv2_virtualagent_tokyo_scripting_virtual_agent

フォロー、Twitterフォローもよろしくお願いいたします。
https://twitter.com/kouki__ito

Discussion