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.

Get multiple answers from Script Include in workflow

babarat1
Tera Contributor

Hi All,

 

I have the following script Include:

 

	getCI: function(getAppname) {

		var grgetCI = new GlideRecord('cmdb_ci_service');
		grgetCI.addEncodedQuery('u_client_solution!=NULL');
		grgetCI.addQuery('u_client_solution',getAppname);			
		grgetCI.query();
		var CIlist = [];
		var SYSIDlist = [];
		while (grgetCI.next()) {
			CIlist.push(grgetCI.used_for + "");
			SYSIDlist.push(grgetCI.getUniqueValue());
		}
		//gs.info('SI answer = ' + +"Sys ID 1 " + SYSIDlist[0] + "Sys ID 2 " + SYSIDlist[1]);
		var answer = CIlist.join(",") + "\n" + SYSIDlist.join(",");
		gs.info("SI answer = "+answer);
		gs.info("SI answer sys id = "+SYSIDlist[0] + "- CIlist"+CIlist[0] +"CIlist -" +CIlist[1] + " " +SYSIDlist[1]);
		return answer;
		//return answer;
	},

 

 

gs.info("SI answer sys id = "+SYSIDlist[0] + "- CIlist"+CIlist[0] +"CIlist -" +CIlist[1] + " " +SYSIDlist[1]);

This info message returns answer like below:

 SI answer sys id = 0ef85272db92fb00de9f1bbf29961968- CIlistProductionCIlist -Development f1df074a0f490700552ec4dce1050e48

 

I have called the script Include in a workflow as below

var si_ci_list = new CRFCheckDevProdCIenv_WF().getCI(current.variables.product.u_client_solution);
var env = si_ci_list;
gs.log("WF Non User CI ENv " + "si_ci_list " +si_ci_list);// this log returns answer as:

WF Non User CI ENv si_ci_list Production,Development
0ef85272db92fb00de9f1bbf29961968,f1df074a0f490700552ec4dce1050e48 

However I want to differentiate the sys id meaning I want to separate the sys ids and values of Dev/ Prod and retrieve to use them for querying.

Can someone help

 

Thanks,

@Dr Atul G- LNG @Maik Skoddow @Anil Lande @Sainath N @Iraj Shaikh 

1 ACCEPTED SOLUTION

Aniket Chavan
Tera Sage
Tera Sage

Hello @babarat1 ,

You can give a try to the script's below and let me know how it works for you.

Script Include:

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

    getCI: function(getAppname) {
        var grgetCI = new GlideRecord('cmdb_ci_service');
        grgetCI.addEncodedQuery('u_client_solution!=NULL');
        grgetCI.addQuery('u_client_solution', getAppname);
        grgetCI.query();

        var CIlist = [];
        var SYSIDlist = [];

        while (grgetCI.next()) {
            CIlist.push(grgetCI.used_for + "");
            SYSIDlist.push(grgetCI.getUniqueValue());
        }

        var result = {
            CIlist: CIlist,
            SYSIDlist: SYSIDlist
        };

        return JSON.stringify(result);
    },

    type: 'CRFCheckDevProdCIenv_WF'
});

 

Workflow Script:

// In your workflow script
var si_ci_list = new CRFCheckDevProdCIenv_WF().getCI(current.variables.product.u_client_solution);
var answer = JSON.parse(si_ci_list);

var SYSIDlist = answer.SYSIDlist;
var CIlist = answer.CIlist;

// Now you can use SYSIDlist and CIlist as separate arrays
gs.log("WF Non Philip User CI ENv SYSIDlist: " + SYSIDlist);
gs.log("WF Non Philip User CI ENv CIlist: " + CIlist);

 

Let me know your views on this and Mark Correct if this solves your query and also mark 👍Helpful if you find my response worthy based on the impact.

 

Thanks,

Aniket

 

 

View solution in original post

6 REPLIES 6

Ankur Bawiskar
Tera Patron
Tera Patron

@babarat1 

the best way to pass multiple values from script include is using JSON structure.

logic is already shared by @Anil Lande 

Please let us know if stuck using that

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

Aniket Chavan
Tera Sage
Tera Sage

Hello @babarat1 ,

You can give a try to the script's below and let me know how it works for you.

Script Include:

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

    getCI: function(getAppname) {
        var grgetCI = new GlideRecord('cmdb_ci_service');
        grgetCI.addEncodedQuery('u_client_solution!=NULL');
        grgetCI.addQuery('u_client_solution', getAppname);
        grgetCI.query();

        var CIlist = [];
        var SYSIDlist = [];

        while (grgetCI.next()) {
            CIlist.push(grgetCI.used_for + "");
            SYSIDlist.push(grgetCI.getUniqueValue());
        }

        var result = {
            CIlist: CIlist,
            SYSIDlist: SYSIDlist
        };

        return JSON.stringify(result);
    },

    type: 'CRFCheckDevProdCIenv_WF'
});

 

Workflow Script:

// In your workflow script
var si_ci_list = new CRFCheckDevProdCIenv_WF().getCI(current.variables.product.u_client_solution);
var answer = JSON.parse(si_ci_list);

var SYSIDlist = answer.SYSIDlist;
var CIlist = answer.CIlist;

// Now you can use SYSIDlist and CIlist as separate arrays
gs.log("WF Non Philip User CI ENv SYSIDlist: " + SYSIDlist);
gs.log("WF Non Philip User CI ENv CIlist: " + CIlist);

 

Let me know your views on this and Mark Correct if this solves your query and also mark 👍Helpful if you find my response worthy based on the impact.

 

Thanks,

Aniket