Change Client Script calling a Script Include

Dead Blade
Kilo Guru

Hello Developers,

I am trying to call a script include from an onchange client script and populate a u_Field. The script include returns a group.  The client script needs to supply the cmdb_ci and the group type.

I've been attempting to use something similar to: https://community.servicenow.com/community?id=community_question&sys_id=a77707a1dbc023c09d612926ca961925&view_source=searchResult

with little luck. 

Here is the script include:

var Group_and_CI = Class.create();
Group_and_CI.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    
    getallValues : function() {
        var output;
        var grp = this.getParameter("sysparm_grp");
        var cmdb = this.getParameter("sysparm_ci");
        var gr = new GlideRecord('u_m2m_groups_configuratio');
        gr.addQuery('u_group', grp);
        gr.addQuery('u_configuration_item', cmdb);
        gr.query();
        if(gr.next()) {
            output += gr.sys_id+"\n";    
        }
        return output ;
    },
    
    type: 'Group_and_CI'
});

 

Can someone help me with the Change client script?

 

1 ACCEPTED SOLUTION

David, this is what works now:

Script Include:

var Group_and_CI_1 = Class.create();
Group_and_CI_1.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    
    getallValues : function() {
        var output;
        var grp = this.getParameter("sysparm_grp");
        var cmdb = this.getParameter("sysparm_ci");
        
        gs.log('TESTING: grp is = ' + grp);   //Added by Will
        gs.log('TESTING: cmdb is = ' + cmdb);  //Added by Will
        
        var gr = new GlideRecord('u_m2m_groups_configuratio');
        gr.addQuery('u_group.type', grp);
        gr.addQuery('u_configuration_item', cmdb);
        gr.query();
        
        gs.log('TESTING: Result before IF is = ' + gr.output);  //Added by Will
        gs.log('TESTING Row Count is '+ gr.getRowCount());  //Added by Will
        
        if(gr.next()) {
            //output = gr.sys_id +" \n";
            output = gr.u_group +" \n";
            gs.log('TESTING: Result after IF is = ' + output);  //Added by Will
        }
        gs.log('TESTING Result Before Output is '+ output);  // Added by Will
        return output ;
    },
    
    type: 'Group_and_CI_1'
});

 

 Client:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }


    var ga = new GlideAjax('Group_and_CI_1');
    ga.addParam('sysparm_name', 'getallValues');    
    ga.addParam('sysparm_ci', g_form.getValue('cmdb_ci'));   
    ga.addParam('sysparm_grp', '1512159ddbc5a300b6e69b3c8a96195d');   
    ga.getXML(callback);
	

    function callback(response) {

    var answer = response.responseXML.documentElement.getAttribute("answer");
		
		

	alert(answer);
		
    
	g_form.setValue('u_glide_list_areas_impacted', answer);

    
}

}

 

Client Script passed the cmdb_ci and the group type.

Results in the Group being added to the Change Request u_field.

 

Do you want full credit, you led me to the final, or just helpful.  I'm cool either way.

View solution in original post

31 REPLIES 31

 

just confirming here , you did not write client script ? if not then Kindly have a look on below doc link. 

 

https://docs.servicenow.com/bundle/geneva-servicenow-platform/page/script/server_scripting/reference...

I need help with a client script.  This is my attempt:

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
//     var chg_ci=g_form.getReference('cmdb_ci');

    var ga = new GlideAjax('Group_and_CI');

    
    ga.addParam('sysparm_ci', g_form.getValue('cmdb_ci'));
    ga.addParam('sysparm_grp', 'Release Coordinator');  // Release Coordinator  '75da0d45dbcc7380b825abc5ca96196e' sys_id
    //ga.getXML(getResponse);
    ga.getXML(callback);

    function callback(response) {
    var result = response.responseXML.getElementsByTagName('result');

    g_form.setValue('u_glide_list_areas_impacted', result[0].getAttribute('u_glide_list_areas_impacted'));

    
}
}

try now

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
//     var chg_ci=g_form.getReference('cmdb_ci');

    var ga = new GlideAjax('Group_and_CI');

ga.addParam('sysparm_name', 'getallValues');


    
    ga.addParam('sysparm_ci', g_form.getValue('cmdb_ci'));
    ga.addParam('sysparm_grp', 'Release Coordinator');  // Release Coordinator  '75da0d45dbcc7380b825abc5ca96196e' sys_id
    //ga.getXML(getResponse);
    ga.getXML(callback);

    function callback(response) {
    var result = response.responseXML.getElementsByTagName('result');

alert(result);

    g_form.setValue('u_glide_list_areas_impacted', result[0].getAttribute('u_glide_list_areas_impacted'));

    
}
}

 

Also update your callback function since you are returning a single value (sys_id) in this case.

 

 function callback(response) {

    var result = response.responseXML.getElementsByTagName('result');

    g_form.setValue('u_glide_list_areas_impacted', result);

    
}

 

So your client script should be:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }


    var ga = new GlideAjax('Group_and_CI');
    ga.addParam('sysparm_name', 'getallValues');    
    ga.addParam('sysparm_ci', g_form.getValue('cmdb_ci'));
    ga.addParam('sysparm_grp', 'Release Coordinator');  // Release Coordinator  '75da0d45dbcc7380b825abc5ca96196e' sys_id
    ga.getXML(callback);

    function callback(response) {

    var result = response.responseXML.getElementsByTagName('result');


    g_form.setValue('u_glide_list_areas_impacted', result);

    
}

}

Harsh, your client script popped up an alert box with [object HTMLCollection]