Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Populate the domain values when a CI changes on incident form

Phanideepthi
Tera Contributor

Hi All,

We have two fields Business domain and Business function on the incident form as shown in the image. Now we are working on getting the values populated on the form when a CI is selected. We have written before insert business rule with the following script.

(function executeRule(current, previous /*null when async*/) {

var ubus = new GlideRecord('cmdb_ci_service_discovered');
    ubus.addQuery('sys_id',current.cmdb_ci);
    ubus.query();
    if (ubus.next()) {
        current.u_business_domain = ubus.u_business_domain;
        current.u_business_function = ubus.u_business_function;
        // gs.print(ubus.u_business_domain);
    }
})(current, previous);
 
Now the issue we are facing is the values are populating once the form is saved instead we need to show when a CI is selected. Any help on this is much helpfull.
Phanideepthi_0-1763139194189.png
 
Thanks in advance.
 
1 REPLY 1

Sarthak Kashyap
Kilo Sage

Hi @Phanideepthi ,

 

Issue is you created Business Rule, BR will run when it got some trigger condition, as you mention before insert, but you want the value will auto populate when you select the field. 

 

So in this case please create On-Change Client script, table - Incident, field - CI Field and add below script

function onChange(control, oldValue, newValue) {

    if (!newValue) {
        g_form.clearValue('u_business_domain'); // Your field backend value
        g_form.clearValue('u_business_function'); //Your field backend value
        return;
    }

    var ga = new GlideAjax('GetBusinessDetails');
    ga.addParam('sysparm_name', 'getValues');
    ga.addParam('sysparm_ci', newValue); // new Value is your CI field value sysId 

    ga.getXML(function(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var obj = JSON.parse(answer);

        g_form.setValue('u_business_domain', obj.domain);
        g_form.setValue('u_business_function', obj.function);
    });
}

 

Now Create Script Include - GlideAjax Checked and add below script 

var GetBusinessDetails = Class.create();
GetBusinessDetails.prototype = {
    initialize: function() {},

    getValues: function() {
        var ciSysId = this.getParameter("sysparm_ci");
        var result = {};
        var gr = new GlideRecord('cmdb_ci_service_discovered');
        if (gr.get(ciSysId)) {
            result.domain = gr.u_business_domain + "";
            result.function = gr.u_business_function + "";
        }
        return JSON.stringify(result);
    },

    type: 'GetBusinessDetails'
};

 

Let me know if you need more help!

 

Please mark my answer correct and helpful if this works for you

Thanks and Regards,

Sarthak