我正在创建一份报告。在报告条件下,我使用的是“是其中之一”,并通过调用客户端可调用的脚本传递sys_id数组,包括javascript:新的sys_id我可以将sys_ids看作“数据源条件:sys_ids in 60a219744fc73200d6940e428110c72b”。但是没有显示相应的记录。但是相应的sys_id记录是可用的。
发布于 2017-07-09 06:37:22
我想我在这里看到了问题。不幸的是,这不是客户端可调用脚本通常包含的工作方式。脚本包括,甚至客户端可调用的脚本,总是在服务器上执行.它们应该通过客户机端脚本中的异步GlideAjax调用来调用。
有关这方面的更多信息,我鼓励您看看这篇文章 on GlideAjax。
但是,幸运的是,您的实际查询在服务器上执行,而不是在客户机上执行。因此,包含的脚本可能是正确的方法,但您所面临的问题是(可能),通过将它变成GlideAjax脚本,您将告诉ServiceNow重写构造函数(initialize())方法,但将其保留为一个类。
既然您说要返回一个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“- 这里的文件),这将把引用推到数组中。由于该对象的字符串值属性(位置gr.sys_id中的字符串值更改),也会对数组中的每个元素进行字符串值属性处理,因为每个元素都是对同一个对象的引用!关于这一点的更多信息,在一篇文章(我写的) 你可以在这里找到中。只要说这不是一个好主意就足够了,它会导致一次又一次相同的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://stackoverflow.com/questions/44990737
复制相似问题