Populate Reference field value to other reference field parent value

AnilM99
Tera Expert

Hi Team,

I created a new catalog item, there is a 2 reference variables and 1 is list collector variable

1. variable called 'computer' reference to 'cmdb_ci_computer' table - eg. value is "lenovo" parent is "Servicenow"

2. variable called 'parent computer' reference to 'cmdb_ci_computer' table - dependent on 1st variable parent and display only parent value - eg. parent is - Servicenow and parent parent is Salesforce

3. (List collector)variable called 'all computers' reference to 'cmdb_ci_computer' table - dependent on 2nd variable parent and display under the values from this parent - eg. parent is Salesforce - values (apple, windows)

 

Thanks

Anil

2 REPLIES 2

Sonam_Tiwari
Kilo Sage

Hi @AnilM99 ,

 

Please see the below script for reference.

 

You can have an onChange on your 1st field, somthing like:

 

 

 

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

    var ga_user = new GlideAjax('global.getComputerDetails');
    ga_user.addParam('sysparm_name', 'getParent');
    ga_user.addParam('sysparm_computer', newValue);
    ga_user.getXMLAnswer(userDetails);

    function userDetails(response) {
        
        var answer = response;
        g_form.setValue('parent_computer',answer);
    }
}

 

 

 

and then on the 2nd one based on which your list collector will populate :

 

 

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

    var ga_user = new GlideAjax('global.getComputerDetails');
    ga_user.addParam('sysparm_name', 'getComputersUnderParent');
    ga_user.addParam('sysparm_parent_computer', newValue);
    ga_user.getXML(userDetails);

    function userDetails(response) {

        var answer = response.responseXML.documentElement.getAttribute("answer");
                g_form.setValue('all_computers', answer);
    }

}

 

 

 

Script Include :

 

 

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

    getParent: function() {
        var comp = this.getParameter('sysparm_computer');
        var compRec = new GlideRecord('cmdb_ci_computer')
        if (compRec.get(comp)) {
            var parent_comp = compRec.u_parent.u_parent;

        }
        return parent_comp;
    },


    getComputersUnderParent: function() {
        var comp_under_parent = [];
        var comp_parent = this.getParameter('sysparm_parent_computer');
        var compParentRec = new GlideRecord('cmdb_ci_computer')
        compParentRec.addQuery('u_parent', comp_parent);
        compParentRec.query();
        while (compParentRec.next()) {
            comp_under_parent.push(compParentRec.sys_id.toString());
            gs.info('comp  ' + comp_under_parent.toString());
        }
        return comp_under_parent.toString();
    },


    type: 'getComputerDetails'
});

 

 

 

Remember tohave something in place to clear values. I haven't included that here. Refine the script more as per your requirement and test it out.

Consider indicating the response as helpful and marking it as correct if it meets your needs.

AnilM99
Tera Expert

Hi @Sonam_Tiwari thanks for the replay,

I added Reference qualifier for the 2 variables it's working perfect.

 

Thanks

Anil!