To populate list collector values based on another select box variable

Koyel Guha
Tera Contributor

Hi,

I am trying to populate the results in list collector variable based on the value selected from another variable.

I have variable A (selectbox) and variable B(list collector). When I select any option from variable A for eg. "x1" then variable B referencing a customized table having a field u_description which will filter u_description contains "read" keyword and u_description contains "x1". Based on the condition, it will display the one or multiple results from the table in the varible B.

 

I am using a script include and client script for this requirement and it is not working. Can somebody help on this.

 

Script Include

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

    getFilteredSysIds: function() {
        var input = this.getParameter('sysparm_id');
        var info = [];
      var gr = new GlideRecord('u_active_directory_groups');
      gr.addEncodedQuery('u_descriptionLIKEread^u_descriptionLIKE'+ input);
    gr.query();
        while (gr.next()) {
        // info.push({
        //  "label": gr.u_query_name.toString(),
        //  "value": gr.u_query_name.toString()

        info.push({
         "label": gr.getValue('u_query_name'),
         "value": gr.getValue('u_query_name')
});
  
        }
    return info;
    //   return json.encode(info);
    },
     type: 'FilterActiveDirectory'
});
 
Client script
 function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        //g_form.clearValue('please_select_the_following');
     return;
    }
    var ga = new GlideAjax('FilterActiveDirectory');
    ga.addParam('sysparm_name', 'getFilteredSysIds');
    ga.addParam('sysparm_id', g_form.getValue('please_select_the_fileserver_where_the_shared_folder_is_located'));
    // ga.getXMLAnswer(info);
    // function info(answer) {
    // var msgObj = JSON.parse(answer);

    ga.getXMLAnswer(function(response) {
    var msgObj = JSON.parse(response);
g_form.clearOptions('please_select_the_following');
g_form.addOption('please_select_the_following', '', '--None--');
for (var i = 0; i < msgObj.length; i++) {
g_form.addOption('please_select_the_following', msgObj[i].value, msgObj[i].label);
}
//}
 //}

    });
}
2 ACCEPTED SOLUTIONS

@Koyel Guha 

you need to do 2 things which I mentioned in my 1st response to your question

AnkurBawiskar_0-1751359526323.png

 

1) advanced ref qualifier

a) why variable value will be random? You said it's a select box so it should have choices in it, you can use that.

You can use this, for x1 choice value you can have a query

javascript&colon;var variableValue = current.variables.please_select_the_fileserver_where_the_shared_folder_is_located.toString() ; var query; if(variableValue == 'x1') query = 'u_descriptionLIKEread^u_descriptionLIKE' + variableValue; query; 

If you want the same filter for other drop down choices then do this generic

javascript&colon;var variableValue = current.variables.please_select_the_fileserver_where_the_shared_folder_is_located.toString() ; var query = 'u_descriptionLIKEread^u_descriptionLIKE' + variableValue; query; 

2) variable attributes - add this

ref_qual_elements=please_select_the_fileserver_where_the_shared_folder_is_located 

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

View solution in original post

@Koyel Guha 

please update : in your ref qualifier.

Community converts : to &colon;

share the choices for your select box?

Also share if there are records matching in your table with that filter condition?

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

View solution in original post

20 REPLIES 20

Hello @Koyel Guha 

Please follow exact code that sent you.

1. Your encoded query is wrong. Why you have added "read" in between the query because it must be an input.

2. Please push sys_id in the array

3. Change the return statement as it should contain sys_id in the statement 

4. Please confirm, Is your select box type variable referencing any table or there are some custom choices?

 

By using my script, it should work

If my response helped you, please accept the solution and mark it as helpful.
Thank You!

Hi Rushi,

1 - We are referencing to a customised ad group table where we have queryname as ad group name and there is a description field where we have the read keyword and the server values from the selectbox variable. 

 

When I select any option from variable A(selectbox) for eg. "x1" then variable B(list collector) with displaying the list of query names i.e ad group names which is referencing a customized table having a field u_description which will filter u_description contains "read" keyword and u_description contains "x1". 

 

variable A = x1, then variable B should check the customised table's description field contains [ read keyword AND x1(selected from variable A) and displays the number of querynames from the table. If there is only one record it will show 1 , if multiple it will show multiple values containing both read keyword and x1 from variable A. 

As the list collector variable B displays the query names field of the customised table. I am using u_query_name. Should i still use sys_id here ?

 

variable A select box is not referencing to any table , it is a choice field.

 

Let me know in case of any question and confirm where i need to correct. 

 

Thanks for helping me on this.

Hello @Koyel Guha 

I have edited your code. Try the below code

 

var FilterActiveDirectory = Class.create();
FilterActiveDirectory.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getFilteredSysIds: function(inp) {
           var input = inp;
           var info = [];
           var gr = new GlideRecord('u_active_directory_groups');
           gr.addQuery('u_descriptionLIKE' + input + '^u_descriptionLIKE' + input); //if this is not working try below addquery
           //gr.addQuery('u_descriptionLIKE' + input + '^ORu_descriptionLIKE' + input);
           gr.query();
           gs.info("Koyel17" + input);
           while (gr.next()) {
               gs.info("Koyel19" + gr.sys_id);
               info.push(gr.getValue('sys_id').toString());
           }
           return 'sys_idIN' + info.join(",");
       },
    type: 'FilterActiveDirectory'
});

 

Reference Qualifier:

javascript&colon; new global.FilterActiveDirectory().getFilteredSysIds(current.variables.please_select_the_fileserver_where_the_shared_folder_is_located);

Thank you!

If my response helped you, please accept the solution and mark it as helpful.
Thank You!

Hi Rushi, 

I have to use read keyword as well as it is considering read And value from variable A. 

However, i have tried exactly what you have shared. but it is still showing all the values. 

 

Thanks

@Koyel Guha 

sorry you didn't share screenshots

the logic I shared should work fine.

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