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

Thank you David. This worked. 

If the CI is blank can we make the two fields blank with the same script?

Yes if the returned object is blank you can clear the field values in the Client Script like so:

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 = 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);
    } else {

        g_form.clearValue('u_supplier_offering');
        g_form.clearValue('assignment_group');

    }
}

Thank you David,

Not for the returned Object.

This is onchange client script , on change of CI I am populating this two field values.

If I make CI field as empty then the two fields should be blank.

Thanks

Johny

Ok gotcha..in that case if the onChange is on the cmdb_ci field then simply check if the newValue is blank or not like:

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);
        }

    }



}

Thank you David 🙂

Now I'm confused on "Mark as Correct Answer"