使用 ServiceNow 引用限定符动态过滤目录项变量

使用 ServiceNow 引用限定符动态过滤目录项变量

本文旨在帮助 ServiceNow 开发者解决目录项中引用类型变量的引用限定符不生效的问题。通过本文,你将学习如何利用脚本包含和 GlideRecord,结合 sys_idIN 操作符,动态过滤引用类型变量的选项,使其仅显示与特定条件匹配的值。

问题描述

在 ServiceNow 的目录项中,我们经常需要使用引用类型变量,并根据用户的选择或其他变量的值来动态过滤引用选项。例如,一个 listId 变量引用 service_offer 表,我们希望根据 account 变量的值,只显示与该账户相关的服务项目。虽然配置了引用限定符,但实际效果却是显示了 service_offer 表中的所有值,未能实现动态过滤。

解决方案

解决此问题的关键在于正确使用 sys_idIN 操作符,并确保脚本包含返回的是一个包含有效 sys_id 的字符串

  1. 修改引用限定符脚本:

    将引用限定符脚本修改为以下格式:

    javascript: "sys_idIN" + new OfferingServices().gettingList(current.variables.account);

    这里,sys_idIN 操作符会接收一个以逗号分隔的 sys_id 字符串,并只显示 sys_id 在该字符串中的记录。

  2. 修改脚本包含:

    使用 ServiceNow 引用限定符动态过滤目录项变量

    笔目鱼英文论文写作器

    写高质量英文论文,就用笔目鱼

    使用 ServiceNow 引用限定符动态过滤目录项变量49

    查看详情 使用 ServiceNow 引用限定符动态过滤目录项变量

    确保脚本包含 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' });

    注意:

    • 将 gr.addQuery(‘account.sys_id’, value) 修改为 gr.addQuery(‘account’, value)。 假设 account 字段本身就是一个引用类型字段,直接比较 sys_id 更简洁。
    • results.push({ name: gr.getValue(‘name’), deviceSolutionID: gr.getValue(‘sol_id’) });修改为results.push(gr.getValue(‘sys_id’)); 只需要返回 sys_id 即可,无需其他字段。
    • 将 return JSON.stringify(results); 修改为 return results.join(‘,’);,返回一个以逗号分隔的 sys_id 字符串。
    • 确保脚本包含是客户端可调用的(Client Callable)。
    • 添加 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”。

注意事项

  • 确保 account 变量的值是有效的 sys_id。
  • 如果脚本包含返回的字符串过长,可能会超出 URL 的长度限制。在这种情况下,可以考虑使用 GlideAjax 和服务器端脚本来处理。
  • 使用 gs.info() 进行调试时,请确保在生产环境中移除或注释掉这些代码。

总结

通过使用 sys_idIN 操作符和正确编写脚本包含,我们可以轻松地实现 ServiceNow 目录项中引用类型变量的动态过滤,从而提高用户体验和数据准确性。记住,关键在于理解 sys_idIN 的工作原理,并确保脚本包含返回的是一个有效的 sys_id 字符串。

javascript java js json ajax idea json 字符串 引用类型

上一篇
下一篇
text=ZqhQzanResources