我想我在这里看到了问题。不幸的是,客户端可调用脚本通常不是这样工作的。脚本包括,甚至是客户端可调用的,总是在服务器上执行。它们旨在通过来自客户端脚本的异步 GlideAjax 调用来调用。
有关这方面的更多信息,我鼓励您查看 GlideAjax 上的 this article。
但是,幸运的是,您的实际查询是在服务器上执行的,而不是在客户端上。所以 Script Include is 可能是正确的方法,但您面临的问题是(可能)通过使其成为 GlideAjax 脚本包含,您告诉 ServiceNow 覆盖构造函数(初始化()) 方法,但将其保留为类。
既然你说你得到了一个 sys_id 返回,那么我描述的可能不是问题,这个解决方案也行不通。但是,我没有足够的信息来给出任何其他答案;因此,如果是这种情况,请运行未显示正确结果的查询,然后右键单击列表顶部的最后一个查询面包屑,然后单击“复制查询”,然后粘贴查询 在此线程的回复中(专门回复我的评论,以便我收到通知),以便我看看。
显然也请在您的脚本中提供包含的代码,以便我可以帮助您解决问题。
编辑:
现在,您在回复此评论时添加了代码,我可以看到几个问题。
您的原件:
var GetMoreInfoUpdatedChangeTickets = Class.create();
GetMoreInfoUpdatedChangeTickets.prototype = {
initialize: function() {
}, getSysIds: function getMyGroupMembers() {
var ga = new GlideRecord('sysapproval_group');
ga.addQuery('parent.sys_class_name', '=', 'change_request');
ga.query();
gs.log("TotalRecords1 Before:: " + ga.getRowCount());
var sysIdArray = [];
while (ga.next()) {
sysIdArray.push(ga.sys_id);
}
return sysIdArray;
}, type: 'GetMoreInfoUpdatedChangeTickets'
}
以下是我对您的代码所做的所有更改,以及对每个更改的说明:
首先,在下面代码中的第 5 行,我更改了您的成员函数(又名:“方法”)的声明方式。你有它这样声明:
getSysIds: function getMyGroupMembers() {}
所以在这里,你基本上给了它两个名字,并一次以两种方式声明了它。
通常,函数是这样声明的:
function functionName(args) {}
然而,在一个对象(或者在这种情况下,一个类——它是一个具有使用“new”关键字返回自身副本的构造函数的对象)内部,我们声明如下函数:
functionName: function(args) {},
正如您在下面的代码中看到的那样,我已经为您进行了调整。
接下来,在下面的 第 8 行,我从您的 addQuery() 方法调用中删除了多余的“=”运算符,因为“=”在未指定时是隐含的。这不是必需的,但这样看起来更干净。
(我还将您的 GlideRecord 变量从 ga 重命名为 grApprovalGroup,这样更有意义。)
我已将 sysIdArray 的声明移到函数的顶部,以便与它的执行方式保持一致(并且为了清楚起见)。这也不是必需的,但通常是推荐的。
第 12 行,在您的原始代码中,如下所示:
sysIdArray.push(grApprovalGroup.sys_id);
然而,由于gr.sys_id 是一个对象(类型:“GlideElement” - documentation here),这会将对该对象的引用 推送到数组中。随着该对象的 string value 属性(位置 gr.sys_id 的那个属性发生变化,数组中每个元素的 string value 属性也会发生变化,因为每个element 是对同一对象的引用!有关此的更多信息,请参见文章(我写的)that you can find here。
可以说这不是一个好主意,并且会一遍又一遍地导致相同 sys_id 的列表!为了解决这个问题,我们只需使用最佳实践推荐的“getter”方法(正如我链接的文章所推荐的),如下面代码的第 12 行所示。
var GetMoreInfoUpdatedChangeTickets = Class.create();
GetMoreInfoUpdatedChangeTickets.prototype = {
initialize: function() {
},
getSysIds: function() {
var sysIdArray = [];
var grApprovalGroup = new GlideRecord('sysapproval_group');
grApprovalGroup.addQuery('parent.sys_class_name', 'change_request');
grApprovalGroup.query();
while (grApprovalGroup.next()) {
sysIdArray.push(grApprovalGroup.getValue('sys_id'));
}
return sysIdArray;
},
type: 'GetMoreInfoUpdatedChangeTickets'
};
最后,我们需要从类中实际提取函数并重命名它,以便脚本包含本身就是函数。
function GetMoreInfoUpdatedChangeTickets() {
var sysIdArray = [];
var grApprovalGroup = new GlideRecord('sysapproval_group');
grApprovalGroup.addQuery('parent.sys_class_name', 'change_request');
grApprovalGroup.query();
while (grApprovalGroup.next()) {
sysIdArray.push(grApprovalGroup.getValue('sys_id'));
}
return sysIdArray;
}
由于您不能在查询 javascript 中使用“new”关键字,因此有必要像这样定义它(没有类),一旦我们完成了,我们可以重新启用“客户端可调用”选项之前已经启用。
完成此操作后,您应该能够转到以下 URL,并查看正在运行的查询脚本:
https://YOUR_INSTANCE.service-now.com/sysapproval_group_list.do?sysparm_query=sys_id%3Djavascript%3A%20GetMoreInfoUpdatedChangeTickets()%3B