首页 > web前端 > js教程 > 正文

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

霞舞
发布: 2025-09-28 20:27:17
原创
306人浏览过

使用 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. 修改脚本包含:

    Robovision AI
    Robovision AI

    一个强大的视觉AI管理平台

    Robovision AI 65
    查看详情 Robovision AI

    确保脚本包含 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 字符串。

以上就是使用 ServiceNow 引用限定符动态过滤目录项变量的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号