首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sys_id数组是一个不显示记录的数组

sys_id数组是一个不显示记录的数组
EN

Stack Overflow用户
提问于 2017-07-08 21:03:46
回答 1查看 1.2K关注 0票数 2

我正在创建一份报告。在报告条件下,我使用的是“是其中之一”,并通过调用客户端可调用的脚本传递sys_id数组,包括javascript:新的sys_id我可以将sys_ids看作“数据源条件:sys_ids in 60a219744fc73200d6940e428110c72b”。但是没有显示相应的记录。但是相应的sys_id记录是可用的。

EN

回答 1

Stack Overflow用户

发布于 2017-07-09 06:37:22

我想我在这里看到了问题。不幸的是,这不是客户端可调用脚本通常包含的工作方式。脚本包括,甚至客户端可调用的脚本,总是在服务器上执行.它们应该通过客户机端脚本中的异步GlideAjax调用来调用。

有关这方面的更多信息,我鼓励您看看这篇文章 on GlideAjax。

但是,幸运的是,您的实际查询在服务器上执行,而不是在客户机上执行。因此,包含的脚本可能是正确的方法,但您所面临的问题是(可能),通过将它变成GlideAjax脚本,您将告诉ServiceNow重写构造函数(initialize())方法,但将其保留为一个类。

既然您说要返回一个sys_id,那么我所描述的可能不是问题,而且这个解决方案将无法工作。但是,我没有足够的信息来给出任何其他答案;因此,如果是这样的话,请运行没有显示正确结果的查询,然后右键单击列表顶部的最后一个查询面包屑,然后单击“复制查询”,然后将查询粘贴到这个线程上的一个回复中(专门回复我的评论,以便通知我),这样我就可以看一看。

当然,也请在您的脚本中提供代码,包括,这样我就可以帮助您排除故障。

编辑:现在,您在回复这个评论中添加了代码,我可以看到几个问题。

你的原作:

代码语言:javascript
复制
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行所示。

代码语言:javascript
复制
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'
};

最后,我们需要从类中实际提取函数并重命名它,以便脚本包含本身就是函数。

代码语言:javascript
复制
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,并看到您的查询脚本的实际操作:

id%3Djavascript%3A%20GetMoreInfoUpdatedChangeTickets()%3B

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44990737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档