
本文旨在帮助 ServiceNow 开发者解决目录项中引用类型变量的引用限定符不生效的问题。通过本文,你将学习如何利用脚本包含和 GlideRecord,结合 sys_idIN 操作符,动态过滤引用类型变量的选项,使其仅显示与特定条件匹配的值。
在 ServiceNow 的目录项中,我们经常需要使用引用类型变量,并根据用户的选择或其他变量的值来动态过滤引用选项。例如,一个 listId 变量引用 service_offer 表,我们希望根据 account 变量的值,只显示与该账户相关的服务项目。虽然配置了引用限定符,但实际效果却是显示了 service_offer 表中的所有值,未能实现动态过滤。
解决此问题的关键在于正确使用 sys_idIN 操作符,并确保脚本包含返回的是一个包含有效 sys_id 的字符串。
修改引用限定符脚本:
将引用限定符脚本修改为以下格式:
javascript: "sys_idIN" + new OfferingServices().gettingList(current.variables.account);
这里,sys_idIN 操作符会接收一个以逗号分隔的 sys_id 字符串,并只显示 sys_id 在该字符串中的记录。
修改脚本包含:
确保脚本包含 OfferingServices 中的 gettingList 函数返回的是一个以逗号分隔的 sys_id 字符串。
var OfferingServices = Class.create();
OfferingServices.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
gettingList: function(value){
var results = [];
if(value){
var gr = new GlideRecord('service_offer');
gr.addQuery('account', value); // 直接使用 account 字段,假设它是一个引用类型
gr.query();
while (gr.next()) {
results.push(gr.getValue('sys_id')); // 只需 sys_id
}
}
//gs.info('sys_ids ==> '+ results.join(',')); //调试用,可以注释掉
return results.join(',');
},
type: 'OfferingServices'
});注意:
假设 service_offer 表中有以下数据:
| sys_id | name | account (sys_id) |
|---|---|---|
| 111111111111111111111111111 | Offer A | 222222222222222222222222222 |
| 333333333333333333333333333 | Offer B | 222222222222222222222222222 |
| 444444444444444444444444444 | Offer C | 555555555555555555555555555 |
当 current.variables.account 的值为 222222222222222222222222222 时,OfferingServices().gettingList(current.variables.account) 将返回字符串 "111111111111111111111111111,333333333333333333333333333"。因此,listId 变量的引用选项将只显示 "Offer A" 和 "Offer B"。
通过使用 sys_idIN 操作符和正确编写脚本包含,我们可以轻松地实现 ServiceNow 目录项中引用类型变量的动态过滤,从而提高用户体验和数据准确性。记住,关键在于理解 sys_idIN 的工作原理,并确保脚本包含返回的是一个有效的 sys_id 字符串。
以上就是使用 ServiceNow 引用限定符动态过滤目录项变量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号