修改onChange客户端脚本读取fm_expense_line表数据失败排查
ServiceNow客户端脚本失效问题排查
问题背景
我正在开发一个ServiceNow客户端脚本,原脚本可从alm_hardware表读取u_invoice_date字段值并显示到表单的invoice_date字段,运行正常,但当该字段未填写时输出为空。发现fm_expense_line表的date字段始终有值,于是修改脚本替换表和字段,但新脚本失效,浏览器控制台无相关错误,调整JSON解析部分也未解决问题,现寻求问题原因。
原脚本
function onChange(control, oldValue, newValue, isLoading) { if (isLoading) { return; } if (newValue == '') { g_form.setValue("invoice_date", ""); return; } var reqVarHelper = new GlideAjax('x_swea2_wies_servi.WPCatalogItemClientHelpers'); reqVarHelper.addParam('sysparm_name', 'getRecord'); reqVarHelper.addParam("sysparm_table", "alm_hardware"); reqVarHelper.addParam("sysparm_query", "sys_id=" + g_form.getValue("select_device")); reqVarHelper.addParam("sysparm_fields", "name,u_invoice_date"); reqVarHelper.getXML(function(response) { var result = JSON.parse(response.responseXML.documentElement.getAttribute("answer")); g_form.setValue("invoice_date", result.u_invoice_date); }); }
修改后脚本
function onChange(control, oldValue, newValue, isLoading) { if (isLoading) { return; } if (newValue == '') { g_form.setValue("invoice_date", ""); return; } var reqVarHelper = new GlideAjax('x_swea2_wies_servi.WPCatalogItemClientHelpers'); reqVarHelper.addParam('sysparm_name', 'getRecord'); reqVarHelper.addParam("sysparm_table", "fm_expense_line"); reqVarHelper.addParam("sysparm_query", "sys_id=" + g_form.getValue("select_device")); reqVarHelper.addParam("sysparm_fields", "name,date"); reqVarHelper.getXML(function(response) { var result = JSON.parse(response.responseXML.documentElement.getAttribute("answer")); g_form.setValue("invoice_date", result.date); }); }
可能的问题原因
- 表权限不足:当前用户对
fm_expense_line表没有读取权限,ServiceNow中无权限的GlideAjax请求会静默失败,不会在控制台抛出错误。需检查用户角色的表权限设置。 - 字段为保留字:
date是ServiceNow的系统保留字,后端getRecord方法在处理该字段时可能无法正确返回值。可以尝试在后端脚本中为date字段设置别名,或者确认后端逻辑是否兼容系统字段的读取。 - 查询条件不匹配:
select_device字段存储的sys_id不属于fm_expense_line表的记录,导致查询返回空结果。需验证select_device的值是否确实对应fm_expense_line表中的有效sys_id。 - 后端脚本限制:查看
x_swea2_wies_servi.WPCatalogItemClientHelpers中的getRecord方法,是否存在表白名单限制,或者对自定义字段和系统字段的处理逻辑不一致。 - 日期格式不兼容:
fm_expense_line.date的字段类型(如日期时间型)与invoice_date的字段类型(如日期型)不匹配,导致赋值失败但无报错。需检查两个字段的类型设置。 - 缺失调试日志:在回调函数中添加
console.log(result),查看返回的result是否为空或不存在date属性,直接定位是后端未返回数据还是前端赋值问题。
内容的提问来源于stack exchange,提问作者Andris_S
相关产品推荐
相关产品推荐

