基于关联表和引用字段筛选引用字段值的教程

基于关联表和引用字段筛选引用字段值的教程

在ServiceNow中,有时我们需要根据已选的引用字段值,动态地限制另一个引用字段的可用选项。例如,在关联用户和商品时,我们可能希望只显示尚未与该用户关联的商品。本文将介绍如何使用高级引用限定符和Script Include来实现这一功能。

实现步骤

配置引用字段的引用限定符

首先,在需要筛选的引用字段(例如 GoodsRef)的字典配置中,将“使用引用限定符”设置为“高级”。这允许我们使用JavaScript代码动态地生成引用限定符。

在Studio中打开表单。选中需要配置的字段。在“参考规范”部分,将“使用参考限定符”设置为“高级”。在“参考限定”字段中,输入以下JavaScript代码:

javascript: (new ScriptIncludeJS()).getNotLinkedGoods(current.user_name);

这段代码调用名为 ScriptIncludeJS 的 Script Include 中的 getNotLinkedGoods 函数,并将当前表单中的 user_name 字段的值作为参数传递给该函数。

创建Script Include

接下来,创建一个Client Callable的Script Include,用于生成动态的引用限定符。

导航到“系统定义”>“脚本包含”。

点击“新建”按钮。

填写以下信息:

名称:ScriptIncludeJS客户端可调用:true可从以下位置访问:所有应用程序作用域脚本:

var ScriptIncludeJS = Class.create();ScriptIncludeJS.prototype = Object.extend(global.AbstractAjaxProcessor, {    getNotLinkedGoods: function(userID) {        // 创建用于存储要显示的商品的数组        var goods = [];        // 选择 LinkedTbl 表        var grObj = new GlideRecord('x_1234_pro_0_linkedtbl'); // 替换为你的关联表名        // 从表单中获取用户详细信息,该字段显示为 'userID'        // 对于上面选择的表,使用链接表        grObj.addQuery('user_name', userID); // 替换为你的用户引用字段名        grObj.query();        while (grObj.next()) {            // 准备商品名称数组,作为带有表对象的 PUSH            goods.push(grObj.goods_name.toString()); // 替换为你的商品引用字段名        }        // 构建并返回 sys_id NOT IN 查询        return 'sys_idNOT IN' + goods.toString();    },    type: 'ScriptIncludeJS'});

保存 Script Include。

代码解释:

getNotLinkedGoods 函数接收 userID 作为参数,该参数是从表单传递过来的当前用户ID。函数查询名为 x_1234_pro_0_linkedtbl 的关联表(需要替换为你的实际表名),查找与给定用户ID关联的所有商品。遍历查询结果,将已关联的商品ID添加到 goods 数组中。最后,函数返回一个 sys_idNOT IN 格式的字符串,该字符串将被用作引用限定符,以排除已关联的商品。

示例代码

以下是一个完整的示例,展示了如何在 ServiceNow 中实现基于关联表筛选引用字段值的功能。

表结构:

u_user_table (用户表):sys_idnameu_goods_table (商品表):sys_idnameu_link_table (关联表):sys_iduser (引用 u_user_table)goods (引用 u_goods_table)u_new_link_table (新关联表):sys_iduser (引用 u_user_table)goods (引用 u_goods_table)

Script Include (Client Callable):

var ScriptIncludeJS = Class.create();ScriptIncludeJS.prototype = Object.extend(global.AbstractAjaxProcessor, {    getNotLinkedGoods: function(userID) {        var goods = [];        var grObj = new GlideRecord('u_link_table');        grObj.addQuery('user', userID);        grObj.query();        while (grObj.next()) {            goods.push(grObj.goods.toString());        }        return 'sys_idNOT IN' + goods.toString();    },    type: 'ScriptIncludeJS'});

u_new_link_table 表中 goods 字段的引用限定符:

javascript: (new ScriptIncludeJS()).getNotLinkedGoods(current.user);

注意事项

确保替换示例代码中的表名和字段名为你实际使用的名称。Script Include必须设置为 Client Callable,以便客户端脚本可以调用它。userID 参数必须与表单中用户引用字段的名称匹配。如果关联表中的字段不是 sys_id,则需要相应地修改 Script Include 中的代码。如果性能是一个问题,可以考虑使用缓存来存储引用限定符的结果。

总结

通过使用高级引用限定符和 Script Include,我们可以轻松地在 ServiceNow 中实现基于关联表筛选引用字段值的功能。这可以帮助我们确保数据的完整性,并提高用户的效率。这种方法可以应用于各种场景,例如限制可选的配置项、筛选可用的服务等等。只需要根据实际需求修改表名、字段名和查询条件即可。

以上就是基于关联表和引用字段筛选引用字段值的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/80515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月15日 15:55:02
下一篇 2025年11月15日 16:23:35

相关推荐

  • JavaScript 中的提升

    什么是 javascript 提升? 提升是指 javascript 中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回 undefined。对于函数声明,整个函数被提升,这意味着它可以在代码中定义之前使用。此过程在执行开始之前将声明放入堆栈…

    2025年12月19日
    000
  • JavaScript 中的闭包

    你好, 在这篇文章中,让我们学习闭包。 闭包在 javascript 中至关重要,因为它们允许函数从其父作用域访问变量,即使在父函数关闭之后也是如此。这对于需要随着时间的推移记住数据的函数至关重要,例如回调函数或维护状态。这里要记住的一点是父作用域中未使用的变量将被垃圾收集。 定义:闭包是捆绑在一起…

    2025年12月19日
    000
  • JavaScript 中的五种作用域:开发人员深入探讨

    javascript 对变量的行为是由它的作用域决定的。理解范围是编写健壮、可维护的代码的基础。本文将探讨 javascript 中的五种主要作用域类型——全局、局部、块、函数作用域(和闭包)和作用域链。最后,您将清楚地掌握 javascript 如何跨不同上下文处理变量。 目录 1. 全球范围 解…

    2025年12月19日
    000
  • 电子书

    es6 (ecmascript 2015) 为 javascript 引入了多项新功能和语法改进。以下是最重要的 es6 语法的总结和示例: 1. let 和 const 关键字 es6 为块作用域变量引入了 let 和 const。 let:块范围变量,可以更新,但不能在同一范围内重新声明。con…

    2025年12月19日
    000
  • 揭秘 JS 中的闭包

    需要掌握才能理解语言的复杂细节。不像我们创建数组或函数那样创建。一个 fn 返回另一个存储在 lhs 变量中的 fn。 const securebooking = function(){ let passengercount = 0; return function(){ passengercoun…

    2025年12月19日
    000
  • JavaScript 中的日变量:通过实际示例了解 `const`、`let` 和 `var`

    当您使用 javascript 时,您首先要学习的事情之一就是如何声明变量。变量就像存储信息的容器,例如数字、文本甚至复杂数据。在 javascript 中,声明变量有三种方式:const、let 和 var。其中每一个都有自己的规则和最佳实践,一开始可能会有点令人困惑。在这篇文章中,我们将通过简单…

    2025年12月19日
    000
  • 发布 f `@xmldom/xmldom`

    语境 xmldom 是一个 javascript ponyfill,用于向其他运行时提供现代浏览器中存在的以下 api:将 xml 字符串转换为 dom 树 new domparser().parsefromstring(xml, mimetype) => document创建、访问和修改 d…

    2025年12月19日
    000
  • 什么是 JavaScript 闭包?

    让我们来谈谈一个易于理解但掌握后却非常强大的 javascript 功能:闭包。 它们是可以访问自己的作用域、外部函数的作用域和全局作用域的函数。它们允许函数记住创建它的环境,即使在执行该函数之后也是如此。 考虑这个例子: function createCounter() { let count =…

    2025年12月19日
    000
  • 掌握 JavaScript 函数:普通函数与箭头函数指南

    在 javascript 中,函数是该语言的基本构建块,允许开发人员定义可重用的代码块。 javascript 中两种主要的函数类型是普通函数和箭头函数。虽然它们乍一看似乎很相似,但它们在语法、行为和用例方面有明显的差异。本文将逐步深入探讨这些差异,提供详细的示例并涵盖所有场景,帮助您有效掌握普通函…

    2025年12月19日
    000
  • let、var 或 const 之间有什么区别?

    使用 var 关键字声明的变量的作用域为创建它们的函数,或者如果在任何函数外部创建,则为全局对象。 let 和 const 是块作用域的,这意味着它们只能在最近的一组花括号(函数、if-else 块或 for 循环)内访问。 function foo() { // all variables are…

    2025年12月19日
    000
  • node.js版本更新

    Node.js版本更新可以通过NVM或包管理器实现,为开发人员提供新功能、性能改进和错误修复。新版本引入了ES模块支持、顶级await和BigInt,并持续改善性能和稳定性。更新版本至关重要,因为它提供了新功能、性能提升、错误修复和安全更新,从而提高开发效率、应用程序性能和安全性。 Node.js …

    2025年12月19日
    000
  • JavaScript 中 let、var 和 const 之间的区别是什么:简单解释

    了解 javascript 中 let、var 和 const 之间的区别 在 javascript 中,您可以使用 let、var 和 const 声明变量。这些关键字可能看起来相似,但它们具有关键差异,可以显着影响代码的行为方式。在本文中,我们将解释它们之间的差异,并帮助您了解何时使用它们。 v…

    2025年12月19日
    000
  • React:陈旧的关闭

    在这篇文章中,我将展示如何在 usestate hook react 应用程序中创建闭包。 我不会解释什么是闭包,因为关于这个主题的资源有很多,我不想重复。我建议阅读@imranabdulmalik的这篇文章。 简而言之,一个closure是(来自mozilla): …捆绑在一起(封闭)…

    2025年12月19日
    000
  • 了解 JavaScript 中的闭包:初学者指南

    javascript 是一种强大的语言,具有许多独特的功能,其中之一就是闭包。对于许多初学者来说,闭包一开始似乎令人困惑,但它们是一个基本概念,对于深入理解 javascript 至关重要。本文将通过解释闭包是什么、它们如何工作以及它们为什么有用来揭开闭包的神秘面纱。 什么是闭包? 在 javasc…

    2025年12月19日
    000
  • 揭秘 JavaScript 调用堆栈:代码的实际运行方式

    javascript 调用堆栈 是如何工作的,是每个前端开发人员在其职业生涯中至少问过一次的问题,在我看来,这个问题在大多数地方都没有得到解答,而且答案并不总是清晰或容易的去理解。这就是为什么我决定在这篇文章中讨论这个主题。 让我们从头开始吧。 javascript 引擎 同步逐行运行代码,每次执行…

    2025年12月19日
    000
  • 谷歌浏览器javascript怎么开启 谷歌浏览器调试js代码步骤

    在谷歌浏览器中,调试 JavaScript 代码的步骤包括:打开开发人员工具(F12/Command+Option+I)。导航到“Sources”选项卡。找到脚本文件并设置断点。单步调试、检查变量和堆栈跟踪。暂停(Pause)或继续(Resume)调试。 谷歌浏览器 JavaScript 调试步骤 …

    2025年12月19日
    000
  • JavaScript 中 let、const、var 的区别?

    在 javascript 中,let、const 和 var 用来声明变量,但它们在三个方面有所不同: 1.范围2.重新分配3.吊装 1.范围: var 是一个函数作用域,意味着我们在函数内的任何位置访问 var 变量,如果我们尝试在函数外部访问它,它将显示错误 undefined示例:- func…

    2025年12月19日
    000
  • Let、Const 和 Var 概述:主要差异解释

    曾经有一段时间,我使用并理解了 javascript 中 let、const 和 var 的实际用法,但用语言解释它是具有挑战性的。如果您发现自己处于类似的困境,那么需要关注的关键点是范围、提升、重新初始化和重新分配方面的差异。 范围: 如果在任何函数外部声明,则 var 是函数作用域或全局作用域。…

    2025年12月19日
    000
  • 理解 JavaScript 中的作用域链

    在 javascript 中,作用域链是一种定义变量解析在嵌套函数中如何工作的机制。它决定了引用变量时查找变量的顺序。 作用域链的工作原理是首先在局部作用域中查找变量,然后向上移动到外部(父)作用域,最后在必要时查找全局作用域。这个过程一直持续到找到变量或达到全局范围。 例子 let globalV…

    2025年12月19日
    000
  • c++的PGO(Profile-Guided Optimization)是什么 如何让编译器深度优化【性能调优】

    PGO是通过真实运行时数据指导编译优化的技术,分插桩、采集、重编译三阶段,依赖高质量剖面数据,可提升性能5%~20%,关键在真实输入、合理配置与环境一致性。 PGO(Profile-Guided Optimization,基于性能剖析的优化)是 C++ 编译器利用真实运行时行为数据来指导优化决策的技…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信