You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ServiceNow客户端脚本中使用getReference获取服务器位置名称的问题

ServiceNow客户端脚本中使用getReference获取服务器位置名称的问题

嘿,我刚好碰到过一模一样的情况,给你说个不用脚本包含就能解决的办法!

你看到的那个hex值其实是位置字段的SysID(ServiceNow里每条记录的唯一内部ID),之所以只拿到这个值,是因为你可能没正确处理g_form.getReference的异步特性,而且直接访问location字段时,默认返回的就是它的SysID,而不是显示名称。

g_form.getReference是异步调用——它需要去服务器端拉取完整的服务器记录,不能像同步代码那样直接赋值后立即用。正确的做法是用它的回调函数,等服务器返回完整的cmdb_ci_server记录后,再从中提取位置名称:

// 调用getReference,第二个参数是回调函数,拿到完整的服务器记录后执行
g_form.getReference('server', function(serverRecord) {
  // 先判断是否成功拿到了服务器记录,以及记录是否有位置信息
  if (serverRecord && serverRecord.location) {
    // 直接访问location的name属性就能拿到位置名称
    var serverLocationName = serverRecord.location.name;
    
    // 接下来你可以把这个名称用到你需要的地方,比如显示到表单的某个字段
    g_form.setValue('server_location_display', serverLocationName);
    // 或者弹出提示告诉用户
    alert('你选择的服务器位置是:' + serverLocationName);
    
    // 要是还需要其他服务器信息,比如操作系统、型号,也可以直接拿
    // var serverOS = serverRecord.os;
    // var serverModel = serverRecord.model;
  } else {
    // 处理没有选中服务器,或者服务器没有设置位置的情况
    g_form.setValue('server_location_display', '无位置信息');
  }
});

这个方法完全不需要写脚本包含,因为getReference的回调里会拿到完整的服务器记录对象,所有关联字段(比如location)的详细属性(包括name)都能直接访问。

需要注意的是,因为是异步调用,你不能在回调外面直接使用serverLocationName,所有需要用到这个值的逻辑都要放在回调函数里面哦。

备注:内容来源于stack exchange,提问作者HSchmale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:53:14