
在企业应用开发中,经常需要处理多表关联的数据,并要求在用户输入数据时提供智能化的选择列表。一个典型的场景是:存在用户(Users)和商品(Goods)两种主数据,以及一个记录用户与商品关联关系的链接表(LinkTbl)。现在,我们需要在一个新的表单(NewLinkTbl)中创建新的用户与商品关联。当用户首先选择一个特定的“用户”后,其对应的“商品”选择列表应只显示那些尚未与该用户建立关联的商品。
具体到数据模型,我们有以下四张表:
我们的目标是:在 NewLinkTbl 表单中,当 UserRef 字段被选中后,GoodsRef 字段的查找列表(Lookup List)应仅显示那些在 LinkTbl 中未与当前选定用户关联的商品。
ServiceNow提供了“引用限定符”(Reference Qualifier)功能来过滤引用字段的查找结果。对于需要根据表单中其他字段动态变化的复杂过滤逻辑,最有效的方法是使用“高级”(Advanced)引用限定符,并结合“脚本包含”(Script Include)来执行服务器端逻辑。
初始尝试使用客户端脚本(Client Script)通过 g_form.setValue() 来修改字段值,但这并不能直接过滤引用字段的查找列表。引用字段的查找列表过滤必须通过引用限定符来实现。
首先,我们需要修改 NewLinkTbl 表中 GoodsRef 字段的配置。
javascript:(new ScriptIncludeJS()).getNotLinkedGoods(current.user_name);
接下来,我们需要创建一个名为 ScriptIncludeJS 的脚本包含,并在其中实现 getNotLinkedGoods 方法。
创建脚本包含:
编写脚本: 在脚本字段中输入以下代码:
var ScriptIncludeJS= Class.create();
ScriptIncludeJS.prototype = Object.extend(global.AbstractAjaxProcessor, {
/**
* 获取未与指定用户关联的商品列表的引用限定符字符串。
*
* @param {string} userID - 当前选定用户的sys_id。
* @returns {string} - 一个GlideRecord查询字符串,用于过滤GoodsTbl。
*/
getNotLinkedGoods: function(userID) {
var linkedGoodsSysIDs = []; // 用于存储已关联商品的sys_id
// 1. 验证传入的userID是否有效
if (!userID) {
return 'sys_idISNOTEMPTY'; // 如果没有选择用户,则显示所有商品
}
// 2. 查询LinkTbl,找到所有已与该用户关联的商品
// 假设 'x_1234_pro_0_linkedtbl' 是 LinkTbl 的表名
// 假设 LinkTbl 中的用户引用字段名为 'user_name' (存储sys_id)
// 假设 LinkTbl 中的商品引用字段名为 'goods_name' (存储sys_id)
var grLink = new GlideRecord('x_1234_pro_0_linkedtbl'); // 替换为您的LinkTbl表名
grLink.addQuery('user_name', userID); // 查询与传入userID关联的记录
grLink.query();
while(grLink.next()) {
// 将已关联商品的sys_id添加到数组中
linkedGoodsSysIDs.push(grLink.getValue('goods_name')); // 替换为LinkTbl中商品引用字段的数据库名
}
// 3. 构建引用限定符字符串
if (linkedGoodsSysIDs.length === 0) {
// 如果没有已关联的商品,则显示所有商品(即不进行过滤)
return 'sys_idISNOTEMPTY';
} else {
// 返回一个 'sys_id NOT IN' 查询字符串,排除已关联的商品
return 'sys_idNOT IN' + linkedGoodsSysIDs.join(',');
}
},
type: 'ScriptIncludeJS'
});完成上述配置后:
通过巧妙地结合ServiceNow的高级引用限定符和脚本包含,我们可以实现复杂且动态的引用字段过滤逻辑。这种方法不仅保证了数据的一致性和准确性,还极大地优化了用户在表单中进行数据选择时的体验,是ServiceNow平台开发中处理关联数据过滤的强大工具。
以上就是动态过滤引用字段:基于关联数据和另一引用字段的选择的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号