asifnoor
Kilo Patron

Hi,

In this article, I will show you how we can automatically select the values in the list collector variable.

Requirement: When you select a group, under user list collector, select all the group members dynamically.

Create 2 reference fields in your catalog item

  • Group : Reference field (reference to sys_user_group)
  • Members: List collector field (reference to sys_user_grmember)

OnChange Client Script on Group field

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
	//pass the group to SI and get members of that group
	var ga = new GlideAjax("getSelectedGroupMembers");
	ga.addParam("sysparm_name","getMembers");
	ga.addParam("sysparm_group",newValue); //pass the group sys_id to SI
	ga.getXML(parseResponse);   
}
function parseResponse(response) {
	var answer =  response.responseXML.documentElement.getAttribute("answer");
	if(answer !=0) {
		answer=answer.split(",");
		g_form.clearValue("members");
		g_form.setValue("members",answer);
	} else {
		g_form.clearValue("members");
	}
}

 

Script Include

Name: getSelectedGroupMembers

Active: True

Client Callable: True

var getSelectedGroupMembers = Class.create();
getSelectedGroupMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getMembers:function() {
		var group = this.getParameter("sysparm_group").toString();
		var gr = new GlideRecord("sys_user_grmember");
		gr.addQuery("group",group); //query the group members based on selected group
		gr.query();
		var members=[];
		while(gr.next()) {
			members.push(gr.getValue("user"));
		}
		if(members.length>0)
			return members.toString();
		else
			return 0; 
	},
    type: 'getSelectedGroupMembers'
});

Output (Service Portal)

find_real_file.png

Output (Backend)

find_real_file.png

Let me know if you have any questions in the comments below.

Mark the article as helpful and bookmark if you found it useful.


Regards,
Asif
2020 ServiceNow Community MVP

Comments
Shahida
Kilo Contributor

I am able to fetch the values from the server using script include but I want those values to be populated as choice values in the list collector.

 

Can someone help on this?

 

 

Thanks in advance.

Johan H
Tera Contributor

Hi @Shahida ,

Did you find a solution to this?

//Johan

Sriramachandra
Tera Contributor

pls find below


    try {
        var myListCollector = g_list.get(collectorName);
        myListCollector.reset();
        myListCollector.setQuery(filterString);
    }
    //Revert to Service Catalog method
    catch (e) {
        //Find and hide the filter header elements (optional)
        //Simple method for items with only one list collector
        //$('ep').select('.row')[0].hide();
        //Advanced method for items with more than one list collector (more prone to upgrade failure)
        //var el = $('container_' + g_form.getControl(collectorName).id).select('div.row')[0].hide();

        //Reset the filter query
        window[collectorName + 'g_filter'].reset();
        window[collectorName + 'g_filter'].setQuery(filterString);
        window[collectorName + 'acRequest'](null);
    }
Version history
Last update:
‎09-21-2020 02:29 AM
Updated by: