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.

How Populate field in Multi Row Variable Sets base onChange Script

Dario_C
Mega Sage

Hi everyone,

I have an issue with my catalog client script. I need to change the value of one field within a multi-row variable set, based on the location of a field in a catalog item (i.e., outside the catalog item). I am using a Script Include to retrieve

all the data from the server side, but I can't load this data into the field. I don't know what I'm doing wrong.

 

Script Include

 

c

    getProductByDistrict: function() {
        var selezionare_il_servizio = this.getParameter('sysparm_dept_sys_id');
        gs.log('getProductByDistrict: ' + 'QUERY SERVICE CONFIGURATION');
        var grService = new GlideRecord('u_service_configuration');
        if (grService.get(selezionare_il_servizio)) {
            var nameLocation = grService.getValue('u_service');
            gs.log('getProductByDistrict nameLocation  ' + nameLocation);
        }
        var nameLocationUpper = nameLocation.toUpperCase();
        gs.log('getProductByDistrict: ' + 'QUERY CMN LOCATION');
        var grLocation = new GlideRecord('cmn_location');
        grLocation.addEncodedQuery('nameSTARTSWITH' + nameLocationUpper);
        grLocation.query();
        if (grLocation.next()) {
            var district = grLocation.sys_id;
            gs.log('getProductByDistrict LOCATION ' + 'LOCATION: ' + grLocation.name + ' SYS_ID: ' + grLocation.sys_id);
        }
        gs.log('getProductByDistrict: ' + 'PRODUCT MODEL');
        var gr = new GlideRecord('cmdb_consumable_product_model');
        gr.addQuery('u_district', district);
        gr.query();
        gs.log('getProductByDistrict log finale query ' + district);
        var count = 0;
        var productNames = [];
        while (gr.next()) {
            productNames.push({
                //sys_id: gr.getValue('sys_id'),
                name: gr.getValue('name')
            });
        }
        return JSON.stringify(productNames);
    }

Client Script

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return;
    }
    var distretto = g_form.getValue('selezionare_il_servizio');
    var ajax = new GlideAjax('xxxx');
    ajax.addParam('sysparm_name', 'getProductByDistrict');
    ajax.addParam('sysparm_dept_sys_id', distretto);
    ajax.getXMLAnswer(function(answer) {
        if (answer) {
            var productIds = answer.split(',');
            JSON.parse(productIds);
            g_form.clearOptions('product_model');
            for (var i = 0; i < productIds.length; i++) {
                var idItem = productIds[i].trim();
                if (idItem !== "") {
                    g_form.addOption(medium_low_technology_produc_list.product_name, idItem, idItem);
                    // medium_low_technology_produc_list is a name of Variable Set
                   // product_name is an name of field inside the variable set where i need to put the data
                }
            }
        }
    });
}

Thanks in advance

 

10 REPLIES 10

Ankur Bawiskar
Tera Patron
Tera Patron

@Dario_C 

what debugging have you done so far?

If my response helped please mark it correct and close the thread so that it benefits future readers.

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

jcmings
Mega Sage

Can you do this in your variable set's client script? I don't know if you can dotwalk into a variable set's field (AKA variable) to addOption. I've never seen that done before.

Tai Vu
Kilo Patron
Kilo Patron

Hi @Dario_C 

Can you help clarify a bit? Do you want to:

1. Update the product_name values that users have already entered in the MRVS?

2. Or dynamically display the choice options for the product_name field based on the selezionare_il_servizio (a field outside the MRVS) while users interact with the form?

 

Thanks,

Tai Vu

Hi @Tai Vu ,

Thank you for your answer. 

I want to do the 2nd option, i want dynamically display choice options for the product_name field based on the selezionare_il_servizio (variables outside the mrvs). 

 

 

@Ankur Bawiskar 

Yes, the script include works fine and the data reaches the client script, the problem is that I don't know how to display the data in the choice option in the product_name field.