ServiceNow应用:脚本包含函数的导入导出及跨文件调用求助
在ServiceNow中调用Script Includes里的doMultiply函数
1. 先确认Script Include的配置与写法
要让doMultiply能被外部调用,首先要保证Script Include的定义符合ServiceNow的规则:
- 如果是跨应用调用,需将Script Include设置为全局(Global);同一应用内调用可不用全局,但要确保作用域一致。
- 函数定义分两种方式:
方式A:原型方法(需实例化调用)
假设你的Script Include名称为MathUtils,代码如下:var MathUtils = Class.create(); MathUtils.prototype = { initialize: function() {}, // 定义doMultiply原型方法 doMultiply: function(a, b) { return a * b; }, type: 'MathUtils' };方式B:静态方法(无需实例化)
直接把函数挂载到类上,或者用ES6静态类写法:var MathUtils = Class.create(); MathUtils.prototype = { initialize: function() {}, type: 'MathUtils' }; // 添加静态方法 MathUtils.doMultiply = function(a, b) { return a * b; }; // 或者ES6风格(ServiceNow支持) class MathUtils { static doMultiply(a, b) { return a * b; } }
2. 在其他JavaScript文件中调用的方式
情况1:调用原型方法
先实例化Script Include,再调用函数:
// 创建实例 var mathTool = new MathUtils(); // 调用doMultiply var calculationResult = mathTool.doMultiply(4, 5); gs.info(calculationResult); // 输出20
情况2:调用静态方法
无需实例化,直接通过类名调用:
var calculationResult = MathUtils.doMultiply(4, 5); gs.info(calculationResult); // 输出20
3. 客户端脚本调用注意事项
如果要在UI脚本、客户端脚本等前端代码中调用,不能直接实例化服务器端的Script Include,必须用GlideAjax做AJAX请求:
客户端代码:
var ajaxCall = new GlideAjax('MathUtils'); // 指定要调用的函数名 ajaxCall.addParam('sysparm_name', 'doMultiply'); // 传递参数 ajaxCall.addParam('sysparm_num1', 4); ajaxCall.addParam('sysparm_num2', 5); // 获取返回结果 ajaxCall.getXMLAnswer(function(response) { alert('计算结果:' + response); });
对应的Script Include需继承AbstractAjaxProcessor:
var MathUtils = Class.create(); MathUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, { doMultiply: function() { // 获取客户端传递的参数 var num1 = this.getParameter('sysparm_num1'); var num2 = this.getParameter('sysparm_num2'); return parseInt(num1) * parseInt(num2); }, type: 'MathUtils' });
内容的提问来源于stack exchange,提问作者Vetrivelan T
相关产品推荐
相关产品推荐

