Получить все значения записей в скрипте сервера ServiceNow - PullRequest
0 голосов
/ 20 сентября 2018

Я очень новичок в ServiceNow, так что извините, если это очевидный вопрос.Но я проверил документы и не нашел способа сделать это.

В моем ServerScript я запрашиваю, чтобы получить запись из таблицы, а затем отправить ее на ClientScript. Я получаю значения записи.(это проблема), а затем добавьте этот объект к data объекту.

Есть ли способ получить все поля записей, не перечисляя их все?Похоже на 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 голосов
/ 25 июня 2019

На данный момент этот API не поддерживает такой выбор.Метод принимает только «Список имен полей через запятую».

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

0 голосов
/ 25 июня 2019

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);
}
0 голосов
/ 08 января 2019

Ну, как правило, это не так, как вы это делаете.При получении данных со стороны клиента это делается с помощью GlideAjax, который по существу получает структуру данных (например, JSON) с сервера.GlideAjax вызывает вызываемый клиентом сценарий include.Затем вы можете вывести структуру данных из этой структуры данных.

Код на стороне клиента выглядит примерно так:

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        

}
...