Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Trying to get multiple values from GlideAjax Script Include

Wayne Richmond
Tera Guru

Hi devs. I have a catalog item on the service portal that has a number of fields:

Site name [site_name] (references sys_user)

Site number [site_bun] (single line text)

RBM [rbm] (single line text)

If the current user is a site, I want it to poplate all of those fields.

I have followed best practice and tried to achieve this by calling a script include and using GlideAjax to get the data and pass it back to a catalog client script. I can do this to get a single field, however, I don't want to do multiple calls, so I've found advice on how to acheive this by passing the response as a JSON string and converting it back to a JS object where I can get the values I need. However, I've tried different variations of my code and can't get it to work. This is where I'm at:

Script include:

var MABUserUtils = Class.create(); 
MABUserUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

     checkSite: function() {
        var checkSiteGr = new GlideRecord('sys_user');
        checkSiteGr.addQuery('sys_id', this.getParameter('sysparm_user'));
        checkSiteGr.query();
        if (checkSiteGr.next()) {
            var json = new JSON();
            var data = json.encode(checkSiteGr); //JSON formatted string  
            return data;
        }
    },
    type: 'MABUserUtils'
});

Catalog client script:

function onLoad() {

    var usr = g_user.userID;

    var ga = new GlideAjax('MABUserUtils');
    ga.addParam('sysparm_name', 'checkSite');
    ga.addParam('sysparm_user', usr);
    ga.getXMLAnswer(showMessage);
}

function showMessage(response) {
    var answer = response;
    answer = JSON.parse(answer);
    alert(answer.name);
}

The alert I get on the form:

find_real_file.png

What's wrong with my code?

10 REPLIES 10

John Dewhurst
Kilo Guru

When you want to get a record in JSON format this is pretty much the ideal use case for GlideQuery.

The following ajax script include would work with the provided client side script...

var MABUserUtils = Class.create(); 
MABUserUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
     checkSite: function() {
        return JSON.stringify(
			new global.GlideQuery('sys_user')
			.get(this.getParameter('sysparm_user'), ["name", "email"])
			.orElse({})
		);
    },
    type: 'MABUserUtils'
});