我正在制作一份报告。在我使用的报告条件中,'是'之一。并通过调用客户端可调用脚本传递sys_id数组包括javascript:new GetMoreInfoUpdatedChangeTickets()。getSysIds(); as。我可以看到sys_ids为"数据源条件:60a219744fc73200d6940e428110c72b"中的系统ID。但相应的记录没有显示出来。但是可以使用相应的sys_id记录。
答案 0 :(得分:3)
我想我在这里看到了这个问题。不幸的是,这不是客户端可调用脚本通常包含的工作方式。脚本包括,甚至客户端可调用的脚本,始终在服务器上执行。它们是通过客户端脚本的异步GlideAjax调用来调用的。
有关此问题的更多信息,建议您查看GlideAjax上的this article。
但是,幸运的是,您的实际查询在服务器上执行,而不是在客户端上执行。因此,脚本包含 可能是正确的方法,但您面临的问题(可能)是通过使其成为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行,我已经改变了你的成员函数(又名:“method”)的声明方式。你有这样声明:
getSysIds: function getMyGroupMembers() {}
所以在这里,你基本上给它两个名字并一次用两种方式宣告它。
通常,函数声明如下:
function functionName(args) {}
但是,在一个对象内部(或者在这种情况下,一个Class - 它是一个带有使用“new”关键字返回自身副本的构造函数的对象),我们声明这样的函数:
functionName: function(args) {},
正如您在下面的代码中看到的那样,我已经为您做了调整。
接下来,在下面的第8行中,我从addQuery()
方法调用中删除了冗余的'='运算符,因为未指定时隐含“=”。这不是必需的,但这样看起来更干净。
(我还将你的GlideRecord变量从ga
重命名为grApprovalGroup
,以便更有意义。)
我已将sysIdArray
的声明移到函数的顶部,以便与其执行方式保持一致(并且为了清晰起见)。这也不是必需的,但通常建议使用。
第12行,如下所示:
sysIdArray.push(grApprovalGroup.sys_id);
但是,由于gr.sys_id
是对象(类型:“GlideElement” - documentation here),因此将引用推送到该对象的数组中。由于该对象的字符串值属性(位置gr.sys_id
上的属性发生更改,数组中每个元素的字符串值属性也是如此,因为每个元素都是同一个对象的引用!有关此内容的更多信息,请参阅文章(我写的)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”关键字,所以有必要像这样定义它(没有类),一旦我们完成了,我们可以重新启用“client callable”选项你先前启用了。
完成后,您应该可以转到以下网址,并查看您的查询脚本: