根据账户筛选服务项:ServiceNow 目录项中引用限定符的正确使用

根据账户筛选服务项:ServiceNow 目录项中引用限定符的正确使用

本文旨在帮助ServiceNow开发者解决在目录项中使用引用限定符时遇到的问题,特别是当需要根据账户动态筛选服务项时。我们将深入探讨如何正确配置引用限定符,并通过示例代码演示如何利用脚本包含来实现动态筛选,确保只显示与当前账户相关的服务项,从而提升用户体验和数据准确性。

在ServiceNow中,目录项的变量类型为“引用”时,经常需要根据特定的条件来筛选可供选择的记录。例如,一个“服务项”的引用变量可能需要根据选择的“账户”来动态过滤,只显示属于该账户的服务项。如果配置不当,可能会出现引用限定符失效,导致显示所有服务项的问题。本文将详细介绍如何正确配置引用限定符,并提供示例代码,帮助开发者解决此类问题。

引用限定符的正确配置

当引用限定符无法按预期工作时,通常是因为限定符的语法或脚本逻辑存在问题。在ServiceNow中,引用限定符可以通过以下几种方式配置:

  1. 简单引用限定符: 直接使用字段值进行比较,例如account=javascript:current.variables.account。

  2. 高级引用限定符: 使用JavaScript代码来构建更复杂的查询条件。

对于需要动态生成查询条件的场景,通常需要使用高级引用限定符,并结合脚本包含来实现。

使用脚本包含实现动态筛选

脚本包含(Script Include)允许你编写可重用的服务器端脚本。我们可以创建一个脚本包含,根据账户的sys_id返回满足条件的服务项sys_id列表。

根据账户筛选服务项:ServiceNow 目录项中引用限定符的正确使用

AppMall应用商店

ai应用商店,提供即时交付、按需付费的人工智能应用服务

根据账户筛选服务项:ServiceNow 目录项中引用限定符的正确使用56

查看详情 根据账户筛选服务项:ServiceNow 目录项中引用限定符的正确使用

示例代码:

首先,创建一个名为OfferingServices的脚本包含,并确保其客户端可调用(Client Callable)。

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.sys_id', value);             gr.query();             while (gr.next()) {                 results.push(gr.getValue('sys_id')); // 只返回sys_id             }         }         //gs.info('JSON.stringify(results) ==> '+JSON.stringify(results)); // 调试信息,生产环境建议移除         return results.join(','); // 返回逗号分隔的sys_id字符串     },      type: 'OfferingServices' });

关键点:

  • global.AbstractAjaxProcessor 确保脚本包含可以被客户端调用。
  • gr.addQuery(‘account.sys_id’, value); 这行代码根据传入的账户sys_id筛选服务项。
  • results.push(gr.getValue(‘sys_id’)); 只将服务项的sys_id添加到结果列表中。 这是关键,因为引用限定符需要sys_id。
  • return results.join(‘,’); 将sys_id列表转换为逗号分隔的字符串。这是因为sys_idIN操作符需要一个逗号分隔的sys_id列表。

然后,在目录项的“服务项”引用变量的“引用限定符”字段中,使用以下JavaScript表达式:

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

解释:

  • sys_idIN 是ServiceNow的查询操作符,表示sys_id在给定的列表中。
  • new OfferingServices().gettingList(current.variables.account) 调用脚本包含的gettingList函数,并传入当前目录项中“账户”变量的值。
  • 整个表达式构建了一个动态的查询条件,例如sys_idINa1b2c3d4e5f6,g7h8i9j0k1l2。

注意事项:

  • 确保脚本包含的客户端可调用属性设置为 true。
  • current.variables.account 假定“账户”变量的名称为 account,你需要根据实际情况进行调整。
  • 脚本包含中的 gs.info() 语句用于调试,在生产环境中应该移除。
  • 确保 “账户” 变量存储的是账户的 sys_id。
  • 如果返回的 sys_id 列表过长,可能会超过URL长度限制,导致查询失败。 考虑分页或其他优化方法。

总结

通过结合脚本包含和高级引用限定符,可以实现ServiceNow目录项中引用变量的动态筛选。 关键在于正确构建查询条件,并确保脚本包含返回的是符合要求的sys_id列表。 按照本文提供的步骤和示例代码,可以有效解决引用限定符失效的问题,提升用户体验和数据准确性。

javascript java js json ajax JavaScript include 字符串 变量类型

上一篇
下一篇
text=ZqhQzanResources