onChange客户端脚本的资产字段问题



我正在编写客户端脚本,该脚本从alm_hardware表读取数据,并从字段u_invoice_date读取值,该值显示在称为invoice_date的表单字段中。

此脚本工作正常,但我发现一个问题:当资产管理器在特定设备的表单中未填写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", "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);
});
}

然后我发现表fm_expense_line和字段日期总是字段,因此有机会的形式将有一些值总是在那里。

我开始用替换脚本中的表和字段来修改遗留脚本,但它不起作用,你在下面的脚本中看到任何问题吗?

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);
});
}

在浏览器控制台中检查,没有与此主题相关的错误。任何想法,为什么它不工作在新的脚本?

我试图从脚本中删除JSON部分,并将其替换为console.log,但可能是我在那里也犯了错误,因此返回到post中添加的版本。

这是GlideRecord的一个特点——当值为null时,它不能很好地处理任何硬类型字段(期望非空值,如字符串或数字)。当你给一个nullGlideForm.setValue(),该函数看到null说"我猜没有变化,所以不会做任何事情!">

有几种方法可以通过处理result.datenull结果来处理这个问题(我将按我的偏好顺序列出它们)。

  1. 使用逻辑OR运算符替换任何非真值(注意,这替换了null,undefined,false0
  2. )
result.date || ''
  1. 使用隐式强制转换来强制一个字符串(在JS中,强制转换是根据初始对象的类型完成的)
'' + result.date
  1. 如果这些不工作(我已经看到,但无法提供可靠的原因),尝试使用.getValue()函数与前面的一个相结合:
result..getValue('date') || ''
'' + result.getValue('date')
  1. 我只提到最后一个方法,因为一个同事每次在任何地方对每个值都使用它。我认为这是野蛮和丑陋的,但他们发誓。为什么它工作,我不知道-它打破了JS中的合并规则,所以它必须更多的"现在魔术";这让我很抓狂
result.date + ''

还有我最喜欢的nulish -coalesce,但是我不相信它在ES6中被UI/Next所支持,所以它不是ServiceNow讨论的一部分。

相关内容

  • 没有找到相关文章

最新更新