How to get the users who are members of a particular group?

ArpitaVK
Tera Expert

I have a customized reference field in UI page 'review_request' for Exception request. It refers to the sys_user table.

 

<g:ui_reference name="service_desk" completer="AJAXTableCompleter" query="QUERY:active=true
^roles=ITILid="service_desk" table="sys_user" columns="user_name;first_name;last_name" />
 
In the above code, I want to add a condition that filters out the users which are members of 'Service desk' group. How can I query sys_user table in above code to filter the members of Service Desk group?
1 ACCEPTED SOLUTION

James Chun
Kilo Patron

Hey @ArpitaVK,

 

Try the following code:

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
	<g:evaluate var="jvar_grMembers">
		var grMember = new GlideRecord('sys_user_grmember');
		grMember.addQuery('group', 'c38f00f4530360100999ddeeff7b1298'); //replace with your group
		grMember.query();
		var memberList = [];
		while (grMember.next()) {
		memberList.push(grMember.getValue('user'));
		}
		var memberStr = memberList.join(',');
		memberStr;
	</g:evaluate>

	<g:ui_reference name="service_desk" completer="AJAXTableCompleter" query="sys_idIN${jvar_grMembers}"
		id="service_desk" table="sys_user" columns="user_name;first_name;last_name" />
</j:jelly>

 Cheers

View solution in original post

5 REPLIES 5

M Ismail
Tera Guru

Hi @ArpitaVK,

To filter out users who are members of the 'Service Desk' group in your UI page's reference field, you can modify the query parameter to include this condition. Here's how you can do it:

```html
<g:ui_reference name="service_desk" completer="AJAXTableCompleter" query="QUERY:active=true^roles=ITIL^member_of=Service Desk" id="service_desk" table="sys_user" columns="user_name;first_name;last_name" />
```

In the above code:

- `^member_of=Service Desk`: This condition filters users who are members of the 'Service Desk' group. Replace 'Service Desk' with the actual name of your group if it's different.

Make sure to adjust the group name accordingly to match the actual name of your 'Service Desk' group in ServiceNow. This should effectively filter out users who are not members of the specified group from appearing in the reference field.

Please hit helpful and accept this as a solution if it solved your problem.
Thank you!

@M Ismail ,

Adding this condition is not working for me.

 

@ArpitaVK 

If adding the condition directly to the query parameter isn't working as expected, you might need to use a different approach to filter users who are members of the 'Service Desk' group. One alternative approach is to use a script include to fetch the users and apply the filter condition programmatically. Here's how you can do it:

1. Create a script include:
- Navigate to `System Definition` > `Script Includes`.
- Click on **New** to create a new script include.
- Name the script include (e.g., `ServiceDeskUtils`) and define a function to retrieve users who are members of the 'Service Desk' group.
- Here's an example of what the script include might look like:

```javascript
var ServiceDeskUtils = Class.create();
ServiceDeskUtils.prototype = {
initialize: function() {},

getMembersOfServiceDeskGroup: function() {
var members = [];
var group = new GlideRecord('sys_user_group');
if (group.get('name', 'Service Desk')) {
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group', group.getUniqueValue());
gr.query();
while (gr.next()) {
members.push(gr.user.toString());
}
}
return members;
},

type: 'ServiceDeskUtils'
};
```

2. Modify your UI page to call the script include and filter the reference field based on the result:
- Within your UI page, call the `getMembersOfServiceDeskGroup` function from the script include to retrieve the users who are members of the 'Service Desk' group.
- Use JavaScript to filter the reference field options based on the users retrieved from the script include.

Here's an example of how you might modify your UI page:

```html
<script>
var serviceDeskUtils = new ServiceDeskUtils();
var serviceDeskMembers = serviceDeskUtils.getMembersOfServiceDeskGroup();

function filterServiceDeskMembers(referenceField) {
var referenceFieldElement = document.getElementById(referenceField);
for (var i = referenceFieldElement.options.length - 1; i >= 0; i--) {
if (!serviceDeskMembers.includes(referenceFieldElement.options[i].value)) {
referenceFieldElement.remove(i);
}
}
}
</script>

<g:ui_reference name="service_desk" completer="AJAXTableCompleter" query="QUERY:active=true^roles=ITIL" id="service_desk" table="sys_user" columns="user_name;first_name;last_name" onload="filterServiceDeskMembers('service_desk')" />
```

In this approach, the script include retrieves the users who are members of the 'Service Desk' group, and JavaScript filters the reference field options based on this list when the page loads. This should effectively filter out users who are not members of the 'Service Desk' group from appearing in the reference field.

James Chun
Kilo Patron

Hey @ArpitaVK,

 

Try the following code:

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
	<g:evaluate var="jvar_grMembers">
		var grMember = new GlideRecord('sys_user_grmember');
		grMember.addQuery('group', 'c38f00f4530360100999ddeeff7b1298'); //replace with your group
		grMember.query();
		var memberList = [];
		while (grMember.next()) {
		memberList.push(grMember.getValue('user'));
		}
		var memberStr = memberList.join(',');
		memberStr;
	</g:evaluate>

	<g:ui_reference name="service_desk" completer="AJAXTableCompleter" query="sys_idIN${jvar_grMembers}"
		id="service_desk" table="sys_user" columns="user_name;first_name;last_name" />
</j:jelly>

 Cheers