- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2024 02:25 AM
I have a customized reference field in UI page 'review_request' for Exception request. It refers to the sys_user table.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2024 03:19 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2024 02:53 AM
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!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2024 03:00 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2024 03:16 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2024 03:19 AM
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