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

ServiceNow中如何实现Client Script调用Script Include?

Client Script通过GlideAjax调用Script Include的实现规范与问题排查

标准实现的两端配置要求

1. Script Include端配置

  • 基础配置校验:Name字段填写为scriptIncludeNameUtils,勾选Client callable,确认应用范围归属为sn_hr_core命名空间
  • 代码结构必须符合GlideAjax的识别规范,示例结构:
var scriptIncludeNameUtils = Class.create();
scriptIncludeNameUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    MethodName: function() {
        // 从前端请求中取出传入的分配组sys_id
        var groupSysId = this.getParameter('sysparm_assignment_group');
        // 原有COE配置匹配逻辑,查询对应配置值
        var matchedCoe = '';
        var grCoeConfig = new GlideRecord('u_hr_coe_config');
        grCoeConfig.addQuery('u_assignment_group', groupSysId);
        grCoeConfig.query();
        if (grCoeConfig.next()) {
            matchedCoe = grCoeConfig.u_coe_value.toString();
        }
        // 以字符串形式返回结果供前端读取
        return matchedCoe;
    },
    type: 'scriptIncludeNameUtils'
});

2. Client Script端配置

  • 基础配置校验:类型设为onChange,触发字段为分配组(assignment_group),应用范围与Script Include保持可跨访问的层级
  • 代码示例:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    // 页面加载、清空字段时不执行请求,清理目标字段值即可
    if (isLoading || newValue === '') {
        g_form.clearValue('u_hr_coe');
        return;
    }
    // 初始化GlideAjax实例,类名与Script Include名称完全一致
    var coeAjax = new GlideAjax('scriptIncludeNameUtils');
    // 指定要调用的后端方法名
    coeAjax.addParam('sysparm_name', 'MethodName');
    // 把当前变更的分配组sys_id传给后端
    coeAjax.addParam('sysparm_assignment_group', newValue);
    // 异步回调处理返回结果
    coeAjax.getXMLAnswer(function(coeResult) {
        // 拿到匹配的COE值后赋值给目标字段
        g_form.setValue('u_hr_coe', coeResult);
    });
}

常见问题排查清单

  • 类名大小写不匹配:前端GlideAjax传入的类名必须和Script Include的Name字段值完全一致,ServiceNow对类名、方法名严格大小写校验,哪怕一个字母大小写错都会触发类不存在的报错
  • 未开启客户端可访问权限:Script Include的Client callable配置项必须勾选,未勾选时前端请求会被系统权限层直接拦截,不会执行业务逻辑,且通常无明确前端报错,仅返回空响应
  • 跨应用范围隔离:当前场景下Script Include属于sn_hr_core命名空间,需确认其可访问范围已开放给Client Script所属的应用层级,若Script Include被限制为仅sn_hr_core内部可访问、而Client Script是全局范围的,会因权限不足无法加载类实例
  • 漏传方法名参数:GlideAjax请求必须通过addParam('sysparm_name', 'MethodName')指定要调用的后端方法名,漏传该参数时后端无法匹配要执行的逻辑
  • 后端参数获取错误:Script Include内的方法获取前端传值时,必须使用this.getParameter('自定义参数键名')的方式,不能直接硬编码变量,否则会拿不到前端传的分配组字段值
  • 同步调用阻塞:禁止使用getXMLWait()方法,该方法会阻塞页面所有交互直到请求返回,在现代浏览器环境下可能被拦截,需使用getXMLAnswer的异步回调模式处理返回结果
  • 回调位置错误:GlideAjax是异步执行机制,不能在getXMLAnswer调用代码块外部直接引用返回值做赋值,所有依赖返回值的逻辑(比如给u_hr_coe字段赋值)必须写在回调函数内部
  • 返回值格式异常:Script Include的方法不能直接返回GlideRecord对象或自定义复杂结构,必须将取值转为字符串格式返回,否则前端会解析得到[object Object]无法正常赋值

内容的提问来源于stack exchange,提问作者Mr world wide

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 10:54:00