- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-12-2025 04:17 AM - edited ‎03-12-2025 04:26 AM
Hi all. Working in a domain separated environment and have a requirement for the 'Assigned_To' field to be filtered based on the user being in 2 sys_user_group--the selected 'Assignment_Group' as well as another Visibility group. I've tried:
1. background script with hardcoded sys_ids. It works. I get the expected result which returns 1 user
2. all code in reference qualifier: Doesn't work. I get a list of all users
3. reference qualifier calling script include. Doesn't work. I get no users returned.
Assuming #3 is best approach, I've put that code below for review.
Assigned_To reference qualifier:
javascript: new AssignedToReferenceQualifier().getAssignedTo(current.company.sys_id,current.company.sys_domain,current.assignment_group.sys_id)
Script Include:
var AssignedToReferenceQualifier = Class.create();
AssignedToReferenceQualifier.prototype = {
initialize: function() {
},
getAssignedTo: function(myCompany, myDomain, myGroup) {
//query the Group Visibility Domain table to find the Visibility Group that grants access to the company's domain
var visibilityGroup = new GlideRecord('sys_user_group_visibility');
visibilityGroup.addQuery('sys_domain', myDomain);
visibilityGroup.addQuery('group.name', 'CONTAINS', myCompany);
visibilityGroup.query();
while (visibilityGroup.next()) {
var groupSysID = visibilityGroup.group;
gs.info(groupSysID);
}
//now that we have the Visibility, we can filter the group membership table for the members of this group
var userVisArray = [];
var groupMembers = new GlideRecord('sys_user_grmember');
groupMembers.addQuery('group',groupSysID);
groupMembers.query();
while(groupMembers.next()) {
userVisArray.push(groupMembers.user.toString());
}
var membershipResults = [];
var strLength = userVisArray.length;
//now that we have members that are part of the Visibility group, confirm they are also part of the selected assignment group
var userAssignArray = [];
for(var i = 0; i < strLength; i++){
var userID = userVisArray[i];
gs.info(userID);
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('user',userID);
grMember.addQuery('group',myGroup);
grMember.query();
while(grMember.next()){
userAssignArray.push(grMember.user.toString());
}
}
return 'sys_idIN' + userAssignArray.join(',');
},
type: 'AssignedToReferenceQualifier'
};
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-12-2025 06:20 AM
Hi @Ryan S Please find the updated code -
var AssignedToReferenceQualifier = Class.create();
AssignedToReferenceQualifier.prototype = {
initialize: function() {},
getAssignedTo: function(myCompany, myDomain, myGroup) {
//only apply to specific groups, for now just going based on certain value in Group Name field
var gr = new GlideRecord('sys_user_group');
gr.addQuery('sys_id', myGroup);
gr.addQuery('name', 'CONTAINS', '');
gr.query();
if (gr.next()) {
//query the Group Visibility Domain table to find the Visibility Group that grants access to the company's domain
var visibilityGroup = new GlideRecord('sys_user_group_visibility');
visibilityGroup.addQuery('sys_domain', myDomain);
visibilityGroup.addQuery('group.name', 'CONTAINS', myCompany);
visibilityGroup.query();
while (visibilityGroup.next()) {
var groupSysID = visibilityGroup.group;
}
//now that we have the Visibility, we can filter the group membership table for the members of this group
var userVisArray = [];
var groupMembers = new GlideRecord('sys_user_grmember');
groupMembers.addQuery('group', groupSysID);
groupMembers.query();
while (groupMembers.next()) {
userVisArray.push(groupMembers.user.toString());
}
var membershipResults = [];
var strLength = userVisArray.length;
//now that we have members that are part of the Visibility group, confirm they are also part of the selected assignment group
var userAssignArray = [];
for (var i = 0; i < strLength; i++) {
var userID = userVisArray[i];
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('user', userID);
grMember.addQuery('group', myGroup);
grMember.query();
while (grMember.next()) {
userAssignArray.push(grMember.user.toString());
}
}
return 'sys_idIN' + userAssignArray.join(',');
} else {
var groupMembersArray = [];
var grMembers = new GlideRecord('sys_user_grmember');
grMembers.addQuery('group', myGroup);
grMembers.query();
while (grMembers.next()) {
groupMembersArray.push(grMembers.user.toString());
}
return 'sys_idIN' + groupMembersArray.join(',');
}
},
type: 'AssignedToReferenceQualifier'
};
first return statement should be inside the 'if' block.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-12-2025 06:26 AM
Thanks @GopikaP for the fix and calling out where the issue was.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-12-2025 06:23 AM
Also -
gr.addQuery('name','CONTAINS',<search text goes here in single quotes>);
is this line commented out in your script include? if not, you need to give the correct variable/string there in quotes.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-12-2025 06:27 AM
So if it's group ABC then only the reference qualifier should run and for other groups show all
If yes then do this while calling
javascript:var query= ''; if(current.assignment_group.name.toString().indexOf('your name') > -1) query = new AssignedToReferenceQualifier().getAssignedTo(current.company.sys_id,current.company.sys_domain,current.assignment_group.sys_id); query;
Script include as this
var AssignedToReferenceQualifier = Class.create();
AssignedToReferenceQualifier.prototype = {
initialize: function() {
},
getAssignedTo: function(myCompany, myDomain, myGroup) {
//query the Group Visibility Domain table to find the Visibility Group that grants access to the company's domain
var visibilityGroup = new GlideRecord('sys_user_group_visibility');
visibilityGroup.addQuery('sys_domain', myDomain);
visibilityGroup.addQuery('group', 'CONTAINS', myCompany);
visibilityGroup.query();
while (visibilityGroup.next()) {
var groupSysID = visibilityGroup.group;
gs.info(groupSysID);
}
//now that we have the Visibility, we can filter the group membership table for the members of this group
var userVisArray = [];
var groupMembers = new GlideRecord('sys_user_grmember');
groupMembers.addQuery('group',groupSysID);
groupMembers.query();
while(groupMembers.next()) {
userVisArray.push(groupMembers.user.toString());
}
var membershipResults = [];
var strLength = userVisArray.length;
//now that we have members that are part of the Visibility group, confirm they are also part of the selected assignment group
var userAssignArray = [];
for(var i = 0; i < strLength; i++){
var userID = userVisArray[i];
gs.info(userID);
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('user',userID);
grMember.addQuery('group',myGroup);
grMember.query();
while(grMember.next()){
userAssignArray.push(grMember.user.toString());
}
}
return 'sys_idIN' + userAssignArray.join(',');
},
type: 'AssignedToReferenceQualifier'
};
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader