在ServiceNow服务器脚本中获取所有记录值

时间:2018-09-20 13:27:34

标签: servicenow

我对ServiceNow还是很陌生,如果这是一个明显的问题,对不起。但是我已经检查了文档,还没有找到一种方法。

在ServerScript中,我查询从表中获取一条记录,然后将其发送到ClientScript,以获取记录值(这是问题所在),然后将该obj添加到data obj中。

有没有一种方法可以获取所有记录字段而不列出所有记录?与sql Select * ...类似吗?

    ...
    var userGR = new GlideRecord('sys_user');
    gs.info(gs.getUser());
    userGR.addQuery('user_name', gs.getUser().getName());
    userGR.query();
    while(userGR.next()){
        var userObj = {};
        $sp.getRecordValues(userObj, userGR, 'user_name');
        data.users.push(userObj);
    }
    ...

我想要执行$sp.getRecordValues(userObj, userGR, '*');之类的操作,以获取该表中的所有列。

我认为尝试并防止不必要的数据发送是不可能的。但是只是好奇是否有办法吗?

3 个答案:

答案 0 :(得分:0)

好吧,通常这并没有按照您的意愿进行。 从客户端获取数据时,这是使用GlideAjax完成的,因此从服务器接收数据结构(例如JSON)。 GlideAjax调用客户端可调用脚本包括。 然后,您可以从此数据结构推断数据的结构。

客户端上的代码大致如下所示:

var ga = new GlideAjax('YourScriptIncludeName'); 
ga.addParam('sysparm_name','yourFunctionName'); // Get the Account Mgr 
ga.addParam('sysparm_yourparameter',yourValue); // Set parameter sysidAccount 
ga.getXML(ParseStuff);  

function ParseStuff(response) 
{  
    "use strict";

    var answer = response.responseXML.documentElement.getAttribute("answer");

    // Decode answer
    var objAnswer = answer.evalJSON(true);

    // objAnswer is a JS Object, you may for example loop thorugh the properties        

}

答案 1 :(得分:0)

到目前为止,此API不支持此类选择。 该方法仅接受 “字段名的逗号分隔列表。”

https://developer.servicenow.com/app.do#!/api_doc?v=madrid&id=r_GSPS-getRecordValues_O_GR_S

答案 2 :(得分:0)

GlideRecord始终会检索表中的所有列,您只需要知道它们的名称即可从GlideRecord实例中检索它们。幸运的是,它提供了一个API来完成该操作:userGR.getElements。它返回GlideElement实例的列表,这些实例为您提供了一堆有关模式(名称,类型等)的有用元数据。 另外,该$sp.getRecordValues方法实际上只是一种便捷的方法,实际上就是这样做的:

function getRecordValues(data, gr, names) {
    for (name in split(names))
        data.put(n, data, gr.getValue(name));
}

因此,您可以执行此操作以获取所需的内容:

var userGR = new GlideRecord('sys_user');
if (userGR.get(gs.getUserID())) {
    var userObj = {};
    for (element in userGR.getElements()) {
        userObj[element.getName()] = userGR.getValue(element.getName());
    }
    data.users.push(userObj);
}