ServiceNow场景下能否实现不同表间的字段值自动填充?
ServiceNow跨表字段自动填充关联解决方案
完全可以实现该需求,根据业务操作场景的不同,有3种常用实现方案,优先推荐低代码配置方式,复杂场景再使用自定义脚本。
方案1:引用字段 + 用户参数配置(零代码,优先推荐)
适合无固定操作路径、用户可能随时打开第二张表的场景:
- 先确认第一张表(下文称表A)的
Application ID是唯一值字段,建议给该字段加唯一索引避免重复值 - 打开第二张表(下文称表B)的
Application ID字段配置,将字段类型调整为*引用(Reference)*类型,引用表选择表A - 进入表B的表单设计界面,选中
Application ID字段,在默认值配置项中填入如下脚本:javascript: gs.getUser().getPreference('last_entered_app_id'); - 配置表A的业务规则(Business Rule),触发时机设置为
after insert,触发条件为当前操作者是记录提交人,规则逻辑为给当前用户存储最近提交的Application ID:gs.getUser().savePreference('last_entered_app_id', current.u_application_id.toString());
注意:此处u_application_id需要替换为你实例中该字段的实际API名称,自定义字段默认前缀为u_ - 优势:全程配置无需额外开发客户端逻辑,适配PC端、移动端所有操作场景,稳定性高
方案2:URL参数传递 + 原生字段填充(适合从表A跳转进表B的场景)
如果业务逻辑是用户填完表A后,从表A记录页点击按钮跳转至表B新建页,该方案更简单:
- 配置表A上的「新建表B记录」UI操作按钮(UI Action),跳转URL拼接参数:
/u_table_b.do?sysparm_query=u_application_id=${current.u_application_id}
注意:u_table_b替换为表B的实际API名称,字段名替换为实际值 - 无需额外配置其他规则,ServiceNow原生会自动将URL中
sysparm_query携带的字段值填充到新建表单的对应字段 - 优势:操作路径连贯,不会出现用户间隔多日操作表B时带出错误旧ID的问题
方案3:客户端脚本自动查询(适合无跳转独立打开表B的场景)
如果用户可能直接打开表B新建页,没有从表A的跳转入口,用该方案实现:
- 在表B的表单上新建onLoad类型的客户端脚本(Client Script),适用场景勾选「仅新建记录」
- 客户端脚本示例:
function onLoad() { // 仅新建记录时执行逻辑 if (g_form.isNewRecord()) { // 调用GlideAjax查询当前用户最近提交的表A的Application ID var ga = new GlideAjax('GetLatestAppIdUtils'); ga.addParam('sysparm_name', 'getLatestAppId'); ga.getXMLAnswer(function(answer) { if (answer) { g_form.setValue('u_application_id', answer); } }); } }
- 同步新建脚本包含(Script Include)
GetLatestAppIdUtils,勾选「客户端可调用」选项,脚本逻辑:
var GetLatestAppIdUtils = Class.create(); GetLatestAppIdUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, { getLatestAppId: function() { var gr = new GlideRecord('u_table_a'); gr.addQuery('sys_created_by', gs.getUserID()); gr.orderByDesc('sys_created_on'); gr.setLimit(1); if (gr.next()) { return gr.u_application_id.toString(); } return ''; }, type: 'GetLatestAppIdUtils' });
- 注意:脚本中的表名、字段名均需要替换为你实例中的实际API名称
通用注意事项
- 如果业务要求表B的
Application ID必须和表A的有效值对应,可以额外给表B的该字段加数据校验规则,提交时校验该值在表A中存在 - 如果
Application ID是字符串类型而非引用类型,只需要把对应赋值逻辑调整为返回字符串值即可,不需要修改字段类型
内容的提问来源于stack exchange,提问作者Jayanta Pradhan
相关产品推荐
相关产品推荐

