How to dot walk with script include returned value on GlideAJAX client script

Johny1
Tera Expert

Hello folks,

I want to dot walk with the answer on client script.

Eg: answer.support_group

Script Include:

_getCIRelationship: function(ciSysId) {
		var cmdbRelCi = new GlideRecord('cmdb_rel_ci');
	        cmdbRelCi.addQuery('child',ciSysId);
		cmdbRelCi.addEncodedQuery('parent.ref_service_offering.service_classification=Supplier Offering');
		cmdbRelCi.query();
		if(cmdbRelCi.next()){
			if(cmdbRelCi.parent.sys_class_name == 'service_offering') {
				return cmdbRelCi.getValue('parent');

Client Script:

var cI = g_form.getValue('cmdb_ci'); 
	var ga = new GlideAjax('SupplierOfferingFinder');
	ga.addParam('sysparm_name', 'getSupplierOfferingForCI');
	ga.addParam('sysparm_ci_sys_id', cI);  
	ga.getXML(setSupplierOffering);
	
	function setSupplierOffering(response) {
		var answer = response.responseXML.documentElement.getAttribute('answer');
		
	 g_form.setValue('u_supplier_offering',answer);
g_form.setValue('assignment_group',answer.support_group); // this statement not working
		
	}

 

Thank you

1 ACCEPTED SOLUTION

LOL that is certainly understandable as there is lots of back and forth in this posting. To summarize here are the working scripts.

Script Include:

_getCIRelationship: function(ciSysId) {
    var answer = {};
    var cmdbRelCi = new GlideRecord('cmdb_rel_ci');
    cmdbRelCi.addQuery('child', ciSysId);
    cmdbRelCi.addEncodedQuery('parent.ref_service_offering.service_classification=Supplier Offering');
    cmdbRelCi.query();
    if (cmdbRelCi.next()) {
        if (cmdbRelCi.parent.sys_class_name == 'service_offering') {
            answer.parent = cmdbRelCi.getValue('parent');
            answer.support_group = cmdbRelCi.parent.support_group.toString();
        }

        return JSON.stringify(answer);
    }
}

 

Client Script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {

    if (!newValue) {
        g_form.clearValue('u_supplier_offering');
        g_form.clearValue('assignment_group');
        return;
    }

    var cI = newValue;
    var ga = new GlideAjax('SupplierOfferingFinder');
    ga.addParam('sysparm_name', 'getSupplierOfferingForCI');
    ga.addParam('sysparm_ci_sys_id', cI);
    ga.getXMLAnswer(setSupplierOffering);

    function setSupplierOffering(response) {
        var answer = JSON.parse(response);
        var populated = false;
        for (var prop in answer) {
            if (response.hasOwnProperty(prop)) {
                populated = true;
            }
        }

        if (populated) {
            g_form.setValue('u_supplier_offering', answer.parent);
            g_form.setValue('assignment_group', answer.support_group);
        }

    }
}

 

Cheers,

David

View solution in original post

11 REPLIES 11

Pratiksha Kalam
Kilo Sage

Hello,

You can use g_form.getReference(' ',setSupplierOffering);

Else check below thread will help you,

https://community.servicenow.com/community?id=community_article&sys_id=80e1b34cdbcb934454250b55ca961...

https://community.servicenow.com/community?id=community_question&sys_id=daf8be68dbc4e3c067a72926ca96...

 

If my answer is helpful mark correct!

Thanks,

Pratiksha

 

DScroggins
Kilo Sage
Hello. You are not able to do that with value returned from GlideAjax. You have two options here. If you only need a single value returned then you can define that value in the script include like 'return cmdbRelCi.parent.support_group.toString();'. If you need to return multiple values then you can create an object which will be stringified on the return then parsed and utilized in the client script.

The SN Nerd
Giga Sage
Giga Sage

You could use getReference(), but you may as well continue with your Script Include because GlideAjax isn't good practice for populating reference fields as it creates synchronous calls.

Script Include

_getCIRelationship: function(ciSysId) {
        var answer = {};
        var cmdbRelCi = new GlideRecord('cmdb_rel_ci');
            cmdbRelCi.addQuery('child',ciSysId);
        cmdbRelCi.addEncodedQuery('parent.ref_service_offering.service_classification=Supplier Offering');
        cmdbRelCi.query();
        if(cmdbRelCi.next()){
            if(cmdbRelCi.parent.sys_class_name == 'service_offering') {
                answer.parent = cmdbRelCi.getValue('parent');
                answer.support_group = cmdbRelCi.parent.support_group;
                return answer;
            }


Client Script

var cI = g_form.getValue('cmdb_ci'); 
	var ga = new GlideAjax('SupplierOfferingFinder');
	ga.addParam('sysparm_name', 'getSupplierOfferingForCI');
	ga.addParam('sysparm_ci_sys_id', cI);  
	ga.getXML(setSupplierOffering);
	
	function setSupplierOffering(response) {
		var answer = response.responseXML.documentElement.getAttribute('answer');
		var answer = JSON.parse(answer );
	 g_form.setValue('u_supplier_offering',answer.parent);
g_form.setValue('assignment_group',answer.support_group); // this statement not working
		
	}

ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

Pauls answer is great. Just remember to stringify the object before returning to the client script like so:

Script Include:

_getCIRelationship: function(ciSysId) {
        var answer = {};
        var cmdbRelCi = new GlideRecord('cmdb_rel_ci');
            cmdbRelCi.addQuery('child',ciSysId);
        cmdbRelCi.addEncodedQuery('parent.ref_service_offering.service_classification=Supplier Offering');
        cmdbRelCi.query();
        if(cmdbRelCi.next()){
            if(cmdbRelCi.parent.sys_class_name == 'service_offering') {
                answer.parent = cmdbRelCi.getValue('parent');
                answer.support_group = cmdbRelCi.parent.support_group.toString();
                
            }

return JSON.stringify(answer);
}
}

 

Client Script:

var cI = g_form.getValue('cmdb_ci'); 
	var ga = new GlideAjax('SupplierOfferingFinder');
	ga.addParam('sysparm_name', 'getSupplierOfferingForCI');
	ga.addParam('sysparm_ci_sys_id', cI);  
	ga.getXMLAnswer(setSupplierOffering);
	
	function setSupplierOffering(response) {
		var answer = response;
		var answer = JSON.parse(answer);
	    g_form.setValue('u_supplier_offering',answer.parent);
        g_form.setValue('assignment_group',answer.support_group); 
		
	}