Auto-populate Configuration Item field on incident form with certain conditions :

Adityanshu Sing
Tera Contributor

I want to Auto-populate CI field on incident form from reference table 'cmdb_ci_pc_hardware'(this table consists of PC assigned to users) with some conditions :

1. If user has one device then auto-populate CI field .

2.if user has multiple devices assigned then clear the CI field .

3 . It should not work on old incidents which is already created .

Howvever we have tried this with script include and onchange client script but it did't work.

Please suggest.

 

 

function onChange(control, oldValue, newValue, isLoading) {



    //     if (newValue == '') {
    // 		g_form.addInfoMessage('newValue ');
    //         g_form.setVisible('cmdb_ci', true);
    //         g_form.clearValue('cmdb_ci');
    //         return;
    //     }
    var caller = g_form.getValue('caller_id');

    if (isLoading && oldValue != '') { // newValue == ''
        alert('Old value running ');
        var ref = g_form.getReference('cmdb_ci', pullAttributes);

        
//         g_form.addInfoMessage('Old Value ' + g_form.getValue('cmdb_ci'));
//         g_form.setVisible('cmdb_ci', true);
//         g_form.clearValue('cmdb_ci', false);
									}
	
		else if (isLoading && newValue != '') { //  && oldValue == ''
        alert('New Value running ');
        var ga = new GlideAjax('Inc_ci');
        ga.addParam('sysparm_name', "getCIList2");
        ga.addParam('sysparm_role', caller);
        ga.addParam('sysparm_sysID', g_form.getUniqueValue());
        alert('Caller ' + caller);
        alert('SysID  ' + g_form.getUniqueValue());
        ga.getXMLAnswer(function(answer) {

            g_form.addInfoMessage('Answer ' + answer);
            if (answer != '' && answer != 'List') { // Ci available - only 1
                g_form.setDisplay('cmdb_ci', true);
                g_form.setValue('cmdb_ci', answer);

            } else if (answer == 'List') { // Ci available - multiple
                g_form.clearValue('cmdb_ci');
                g_form.setVisible('cmdb_ci', true);
            } else if (answer == '') { // Ci avaialble - No

                g_form.clearValue('cmdb_ci');

            }


        });

    }
}

function pullAttributes(ref) {
			g_form.addInfoMessage('pullAttributes running');
            g_form.setValue('cmdb_ci', ref.cmdb_ci);

        }
 getCIList2: function() {
        gs.log('running CI ');
        var myDateTime = new GlideDateTime();
        myDateTime.setValue('2023-08-01 00:00:00');

        var user_id = this.getParameter('sysparm_role');
        var record = this.getParameter('sysparm_sysID');
        gs.log('running CI2');
        var gr = new GlideRecord('incident');
        gr.addQuery('sys_id', record);
        gs.log('running inc ' + record);
        gr.query();
        if (gr.next()) {
            gs.log('running gr.next() ');
            var createdDateTime = new GlideDateTime(gr.sys_created_on);
            gs.log('running ' + createdDateTime);
            if (createdDateTime.before(myDateTime))
                return 'false';
            else {
                var ci = new GlideRecord('cmdb_ci_pc_hardware');
                ci.addQuery('assigned_to', user_id);
                gs.log('running user ' + user_id);
                ci.query();
                if (ci.next()) {
                    if (ci.getRowCount() == 1) {
                        //gs.log('JT: Row count is ' + ci.getRowCount());
                        return ci.getValue('sys_id');
                    }
                    return "List";
                }
                return "";
            }
        }
    },

    type: 'Inc_ci'
});

 

 

6 REPLIES 6

Chetan Mahajan
Kilo Sage
Kilo Sage

Hello @Adityanshu Sing ,

                                       The onchange event is triggered when the user changes the value of the 'caller_id' field. it will not work initially when form gets load.

you can try below script 

onLoad client script 

function onLoad() {
    var caller = g_form.getValue('caller_id');

    // Check if the current record is a new incident or an existing one
    if (g_form.isNewRecord()) {
        var ga = new GlideAjax('Inc_ci');
        ga.addParam('sysparm_name', 'getCIForCaller');
        ga.addParam('sysparm_role', caller);
        ga.addParam('sysparm_sysID', g_form.getUniqueValue());
        ga.getXMLAnswer(function(answer) {
            if (answer) {
                g_form.setValue('cmdb_ci', answer);
            } else {
                g_form.clearValue('cmdb_ci');
            }
        });
    }
}

Script Include :

 
    getCIForCaller: function() {
        var myDateTime = new GlideDateTime();
        myDateTime.setValue('2023-08-01 00:00:00');

        var user_id = this.getParameter('sysparm_role');
        var record = this.getParameter('sysparm_sysID');

        var gr = new GlideRecord('incident');
        gr.addQuery('sys_id', record);
        gr.query();
        if (gr.next()) {
            var createdDateTime = new GlideDateTime(gr.sys_created_on);
            if (createdDateTime.before(myDateTime)) {
                return false;
            } else {
                var ci = new GlideRecord('cmdb_ci_pc_hardware');
                ci.addQuery('assigned_to', user_id);
                ci.query();
                if (ci.getRowCount() == 1) {
                    if (ci.next()) {
                        return ci.getValue('sys_id');
                    }
                }
            }
        }
        return false;
    },

Kindly mark correct and helpful if applicable

Thanks for the solution @Chetan Mahajan . Onload client script is working but I want that Ci field Auto populate when user is selected or when we change the user.

Understood, same script provided by me can be work in OnChange As well have you tried it ? or if not working try to add logs and check where its breaking so i can help you accordingly.

Diana Rodriguez
Tera Contributor

Hi @Chetan Mahajan , I am attempting to use your scripts provided above, but its not working. Any help is greatly appreciated 🙂

 script include_ci.jpgclient script_ci.jpg