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

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

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

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

Hi @Anil Lande 

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

Thanks,

Abhishek