I have task to populate company on the bases of caller on the Incident Form.

Atharvabx
Tera Contributor

I have Created a Onchange client script and calling Script Include to Achieve the Same, my full requirement is to populate company on the bases of caller if company is not available for the caller then fetch the value from CI 's company field but for now i am not getting the company on the bases of the caller.

Client scipt:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var callerDetails = g_form.getValue("caller_id");
    var ga = new GlideAjax("autopopulate_CallerInfo");
    ga.addParam('sysparm_name', getCallerInfo);
    ga.addParam('sysparm_value', callerDetails);
    ga.getXML(callback);

    function callback(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');
        g_form.setValue('company', answer);
    }
}
 
Script Include:-
Client callable-YES
var autopopulate_CallerInfo = Class.create();
autopopulate_CallerInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getCallerInfo: function() {
        var sysIdOfCaller = this.getParameter('sysparm_value');
        var x = new GlideRecord('sys_user');
        x.addQuery('sys_id', sysIdOfCaller);
        x.query();
        if (x.next()) {
            var comp=x.getDisplayValue('company');
            return comp;
        }
       
    },
    type: 'autopopulate_CallerInfo'
});
2 ACCEPTED SOLUTIONS

Let's go back to the basics: you are triggering the onChange Client Script on change of which field? If you add alerts like this to the script, do you see one or both when changing the value of that field?

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    alert('TEST: client script running');
    if (isLoading || newValue === '') {
        return;
    }
    var callerDetails = g_form.getValue("caller_id");
    var ga = new GlideAjax("autopopulate_CallerInfo");
    ga.addParam('sysparm_name', 'getCallerInfo');
    ga.addParam('sysparm_value', callerDetails);
    ga.getXML(callback);

    function callback(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');
        alert('TEST: value received from server script = ' + answer); 
        g_form.setValue('company', answer);
    }
}

 

View solution in original post

Hi @Atharvabx ,

 

Try below code i just checked in my PDI its working,

CS:

swathisarang98_1-1709039837088.png

 

 

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

    var userSysid = g_form.getValue('caller_id');
    var userName = new GlideAjax('getUserCompany');
    userName.addParam('sysparm_name', 'getUser');
    userName.addParam('sysparm_sysid', userSysid);
    userName.getXML(callback);



    //Type appropriate comment here, and begin script below

}

function callback(response) {
    var ans = response.responseXML.documentElement.getAttribute('answer');
    g_form.setValue('company', ans);
}

 

SI:

 

var getUserCompany = Class.create();
getUserCompany.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	getUser: function(){
		var sys_id =this.getParameter('sysparm_sysid'); 
		var gr = new GlideRecord('sys_user');
		gr.addQuery('sys_id',sys_id);
		gr.query();
		if(gr.next()){
			var company = gr.company;
		}
		gs.info('company is ' + company);
		return company;

	},



    type: 'getUserCompany'
});

 

 

Please mark this comment as Correct Answer/Helpful if it helped you.

Regards,

Swathi Sarang

 

View solution in original post

16 REPLIES 16

Let's go back to the basics: you are triggering the onChange Client Script on change of which field? If you add alerts like this to the script, do you see one or both when changing the value of that field?

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    alert('TEST: client script running');
    if (isLoading || newValue === '') {
        return;
    }
    var callerDetails = g_form.getValue("caller_id");
    var ga = new GlideAjax("autopopulate_CallerInfo");
    ga.addParam('sysparm_name', 'getCallerInfo');
    ga.addParam('sysparm_value', callerDetails);
    ga.getXML(callback);

    function callback(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');
        alert('TEST: value received from server script = ' + answer); 
        g_form.setValue('company', answer);
    }
}

 

Thank you for Prompt reeply @swathisarang98  but still the script is not working, could provide a screentshot where it is working or something like that?becuase for me i am not getting the alerts as well.

Hi @Atharvabx ,

 

Try below code i just checked in my PDI its working,

CS:

swathisarang98_1-1709039837088.png

 

 

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

    var userSysid = g_form.getValue('caller_id');
    var userName = new GlideAjax('getUserCompany');
    userName.addParam('sysparm_name', 'getUser');
    userName.addParam('sysparm_sysid', userSysid);
    userName.getXML(callback);



    //Type appropriate comment here, and begin script below

}

function callback(response) {
    var ans = response.responseXML.documentElement.getAttribute('answer');
    g_form.setValue('company', ans);
}

 

SI:

 

var getUserCompany = Class.create();
getUserCompany.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	getUser: function(){
		var sys_id =this.getParameter('sysparm_sysid'); 
		var gr = new GlideRecord('sys_user');
		gr.addQuery('sys_id',sys_id);
		gr.query();
		if(gr.next()){
			var company = gr.company;
		}
		gs.info('company is ' + company);
		return company;

	},



    type: 'getUserCompany'
});

 

 

Please mark this comment as Correct Answer/Helpful if it helped you.

Regards,

Swathi Sarang

 

Thanks you @swathisarang98  there was as another client script that was contradicting the same.

Thanks for your help

My working scripts:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var callerDetails = g_form.getValue("caller_id");
    var ga = new GlideAjax("autopopulate_CallerInfo");
    ga.addParam('sysparm_name', 'getCallerInfo');
    ga.addParam('sysparm_value', callerDetails);
    ga.getXML(callback);

    function callback(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');
        g_form.setValue('company', answer);
    }
}
var autopopulate_CallerInfo = Class.create();
autopopulate_CallerInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getCallerInfo: function() {
        var sysIdOfCaller = this.getParameter('sysparm_value');
        var x = new GlideRecord('sys_user');
        x.addQuery('sys_id', sysIdOfCaller);
        x.query();
        if (x.next()) {
            var comp=x.getValue('company');
            return comp;
        }
       
    },
    type: 'autopopulate_CallerInfo'
});

If it's still not working in your environment, help yourself by adding some alert lines to the client script and gs.addInfoMessage lines to the script include so you can confirm that each script is running/called, the value passed between the two, and the GlideRecord and logic along the way, then you'll see where it is going wrong.