GlideAjax to set a reference field in catalog item form

Abhishek Barik
Tera Contributor

Hi Team,

We have a requirement to set a reference field on load. We have done it through sys id using set value, but our client has suggested to use it via GlideAjax instead of hardcoded "sys_id". Hence, I have written a on load client script and script include as shown below but its not setting the reference field value and throwing an alert "[object HTMLCollection]" when I try to get the "answer" value.

Client Script:

function onLoad() {
    var gr = new GlideAjax('x_acal_ahc.AHC_getServiceProvider');
    gr.addParam('sysparm_name', 'getProviderName');
    gr.addParam('sysparm_serviceProvider', g_form.setValue('service_provider', 'lion'));
    gr.getXML(getResponse);
}

function getResponse(response) {
    var answer = response.responseXML.documentElement.getElementsByTagName('result');
    alert(answer); //getting "[object HTMLCollection]" instead of "lion"
        g_form.setValue('service_provider', answer);
}

Script Include:

var AHC_getServiceProvider = Class.create();
AHC_getServiceProvider.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getProviderName: function() {
        var result = this.newItem("result");
        var service_provider = this.getParameter('sysparm_serviceProvider');
        var gr = new GlideRecord("u_zoo"); //zoo table to get value
        gr.get(service_provider);
        result.setAttribute("providerName", gr.getValue("sys_id")); //trying to return Lion sys_id
    },
    type: 'AHC_getServiceProvider'
});

Thanks in Advance,

Abhishek

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

why not use default value for this in the variable configuration?

you can store the sys_id of the record in system property as string and then call that in default value

Easier to maintain going forward

Just change the sys_id later on if required

javascript: var sysId = gs.getProperty('propertyName'); sysId;

Regards
Ankur

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

View solution in original post

8 REPLIES 8

Anil Lande
Kilo Patron

Hi,

Please update your script like below:

Client Script:

function onLoad() {
    var gr = new GlideAjax('x_acal_ahc.AHC_getServiceProvider');
    gr.addParam('sysparm_name', 'getProviderName');
    gr.addParam('sysparm_serviceProvider', g_form.getValue('service_provider')); // you have to pass service provider value here
    gr.getXML(getResponse);
}

function getResponse(response) {
    var answer = response.responseXML.documentElement.getElementsByTagName('result');
    alert(answer); //getting "[object HTMLCollection]" instead of "lion"
        g_form.setValue('service_provider', answer);
}

Script Include:

var AHC_getServiceProvider = Class.create();
AHC_getServiceProvider.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getProviderName: function() {
        var result = this.newItem("result");
        var service_provider = this.getParameter('sysparm_serviceProvider');
        var gr = new GlideRecord("u_zoo"); //zoo table to get value
        gr.get(service_provider);
        result.setAttribute("providerName", gr.getValue("sys_id")); //trying to return Lion sys_id
return JSON.stringify(result);  // you have to return some result
    },
    type: 'AHC_getServiceProvider'
});

 

 

Thanks,

Anil Lande

Please appreciate the efforts of community contributors by marking appropriate response as correct answer and helpful, this may help other community users to follow correct solution in future.
Thanks
Anil Lande

Hi @Anil Lande 

But where are we getting the "Lion" data from the zoo table? I need a particular record from the table.

Thanks,

Abhishek

Okay in that case you have to update glideRecord query in script include.

 

var AHC_getServiceProvider = Class.create();
AHC_getServiceProvider.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getProviderName: function() {
        var result = this.newItem("result");
        var service_provider = this.getParameter('sysparm_serviceProvider');
        var gr = new GlideRecord("u_zoo"); //zoo table to get value
        gr.get('name','lion'); // replace 'name' by the column name which store animal name
        result.setAttribute("providerName", gr.getValue("sys_id")); //trying to return Lion sys_id
return JSON.stringify(result);  // you have to return some result
    },
    type: 'AHC_getServiceProvider'
});
Please appreciate the efforts of community contributors by marking appropriate response as correct answer and helpful, this may help other community users to follow correct solution in future.
Thanks
Anil Lande

Hi @Anil Lande 

Its still returning this "[object HTMLCollection]" in alert instead of "lion"

Thanks,

Abhishek