Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

Getting "undefined" while passing string data into another string field

venkysana
Tera Expert

Need to auto populate APM Number of issue (sn_grc_issue) form from entity field which is reference to profile (sn_grc_profile) table. I am getting "undefined" in APM Number field as shown in below.

find_real_file.png

I have written below script include and onload client script but no use. Please help me to achieve this.

Script Include:

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


    getAPMnumber: function() {

        var object = {};

        var num = this.getParameter('sysparm_sys');
        var appGr = new GlideRecord('sn_grc_profile');
        appGr.addQuery('sys_id', num);
        appGr.query();
        if (appGr.next()) {
            object.u_amp_number = appGr.u_amp_number.toString();
        }

        val = JSON.stringify(object);
        return val;

    },

    type: 'autopopulateentityAPMnumber'
});

 

OnLoad Client Script:

function onLoad() {
	
	var ga = new GlideAjax('autopopulateentityAPMnumber');
	ga.addParam('sysparm_name', 'getAPMnumber');
	ga.addParam('sysparm_sys', g_form.getValue('profile'));
	ga.getXML(callBackFunction);
	
	function callBackFunction(response){
		var answer = response.responseXML.documentElement.getAttribute('answer');
		var val = JSON.parse(answer);
		
		g_form.setValue('u_amp_number', val.u_amp_number);
	}

}
20 REPLIES 20

Thanks for your reply,

Background script is working fine but onChange client script is not working.

Note: I have to auto populate APM number field while loading the form. Please provide me onLoad client script. 

@venkysana onChange is just for testing. I wanted to make sure the value of field "entity" was getting passed through. With onChange, I can pass "newValue" instead of "g_form.getValue('profile')".

Please try the following scripts. This should popup an alert with message 'OK'. If it doesn't it means Script Include is not being called. 

Script Include

var autopopulateentityAPMnumber = Class.create();
autopopulateentityAPMnumber.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getAPMnumber: function() {
       return 'OK';
    },

    type: 'autopopulateentityAPMnumber'
});

Client Script (onLoad)

function onLoad() {
	
	var ga = new GlideAjax('autopopulateentityAPMnumber');
	ga.addParam('sysparm_name', 'getAPMnumber');
	ga.addParam('sysparm_sys', g_form.getValue('profile'));
	ga.getXMLAnswer(callBackFunction);
	
	function callBackFunction(answer){
		alert(answer);
	}

}

If the alert message pops up, please try the following scripts.

Script Include

var autopopulateentityAPMnumber = Class.create();
autopopulateentityAPMnumber.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getAPMnumber: function() {
        var num = this.getParameter('sysparm_sys');
        var appGr = new GlideRecord('sn_grc_profile');
        if (appGr.get(num())) {
            return appGr.u_amp_number.toString();
        }
    },

    type: 'autopopulateentityAPMnumber'
});

Client Script (onLoad)

function onLoad() {

	var ga = new GlideAjax('autopopulateentityAPMnumber');
	ga.addParam('sysparm_name', 'getAPMnumber');
	ga.addParam('sysparm_sys', g_form.getValue('profile'));
	ga.getXMLAnswer(callBackFunction);
	
	function callBackFunction(answer){
		alert(answer);
		if (answer.length > 0) {
			g_form.setValue('u_amp_number', answer);
		}
	}
}

I am getting "Ok" in alert message for first script.

But I am getting null in alert for 2nd script include and also getting empty value in APM Number field.

My bad. There shouldn't be a "()" after num in the .get() statement.

var autopopulateentityAPMnumber = Class.create();
autopopulateentityAPMnumber.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getAPMnumber: function() {
        var num = this.getParameter('sysparm_sys');
        var appGr = new GlideRecord('sn_grc_profile');
        if (appGr.get(num)) {
            return appGr.u_amp_number.toString();
        }
    },

    type: 'autopopulateentityAPMnumber'
});

If this doesn't work, try running the following script in Scripts - Background. Set "num" to be a sys_id of a record in sn_grc_profile table.

var num = '<sys_id of sn_grc_profile record>';
var appGr = new GlideRecord('sn_grc_profile');
if (appGr.get(num)) {
    return appGr.u_amp_number.toString();
}

Ankur Bawiskar
Tera Patron

@venkysana 

why not just show the APM number field as Dot walked field from your Entity reference field?

then no need of any script

Regards
Ankur

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