我对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, '*');
之类的操作,以获取该表中的所有列。
我认为尝试并防止不必要的数据发送是不可能的。但是只是好奇是否有办法吗?
答案 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);
}