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.

Output to an object array

KB15
Giga Guru

I can I output this loop to an object? I think this is my issue with JSON not being able to parse this out in a client script.

The loop is just combining the results from "prop" and "variable" into an array.

 

    getReqFields: function() {
        var item = this.getParameter('sysparm_request');
        var reqTable = new GlideRecord('sc_req_item');
        reqTable.addQuery('sys_id', item);
        reqTable.query();

        if (reqTable.next()) {

            var str = [];

            for (var prop in reqTable.variables) {
                if (reqTable.variables.hasOwnProperty(prop)) {
                    var variable = reqTable.variables[prop];
					
                    str.push('\"' + prop + '\":\"' + variable + '\"');
                }
            }
	
		return JSON.stringify(newStr);

        }
    },

Trying the below doesn't provide the variable data. I thought I could simply combine the results into an array and then try to reparse it. 

str.push(prop);
str.push(variable);

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

I would recommend doing this so that you can easily parse it later

getReqFields: function() {
        var item = this.getParameter('sysparm_request');
        var reqTable = new GlideRecord('sc_req_item');
        reqTable.addQuery('sys_id', item);
        reqTable.query();

        if (reqTable.next()) {

            var str = [];

            for (var prop in reqTable.variables) {
                if (reqTable.variables.hasOwnProperty(prop)) {
                    var variable = reqTable.variables[prop];
		    var obj = {};
                    obj["prop"] = prop.toString();
                    obj["variable"] = variable.toString();
                    str.push(obj);			
                    
                }
            }
	
		return JSON.stringify(str);

        }
    },

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

28 REPLIES 28

Yes, this much closer but without the grouped braces. 

{"requested_for":"Abel Tuter","requested_by":"Sam Jone","model":"Hyundai","quantity":"1","device_model_name":"Car-Petrol"}

For the fields to be parsed on the client side, wouldn't I need to have the braces removed or should the braces not be a factor? There will be at least 20 field values that I would need to fill in.

I think the client script you edited accounts for a single value and not all values in the array.

Hi,

if you want to return 20 values then you can directly return an array of values; no need of json object

you can then use the array to set the values

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

I seem to be getting an undefined error as a return.

I'm not too clear about the loop. The loop seems that it would be finding the first instance of supplier_name and stopping. How would I return all the different field information individually?

I'm looking to pull all unique field names and their variables from a previous RITM to fill in the appropriate field in a new catalog item. There are more fields and variables in the my array instead of just a single one. The "supplier_name:answer" is just one of many. I apologize if that wasn't clear.

Ex: a previous RITM would contain the following. On the form, the user would select a previous RITM and the script would fill in all the values of the past RITM into a new form.

My array would have this kind of data:

name:John
lastname:Smith
city:New York
state:NY
zip: 10001

Hi,

So what I assume is the user will select RITM of same catalog item and variables from previous RITM needs to be set on new RITM?

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Yes, that is correct. A field is already present to provide the option to select an RITM by number.

I think my options are either to loop to return the same name:variable combinations in the array or hard code each answer like the below so I can pick and choose which fields to be filled in.

The goal is to reduce the work for the end user if the RITM is rejected due to a small error.