Dynamic filter one of my group members
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
Hi,
Im trying to create a dynamic filter that will return all users from my groups but i had no luch. What am I doing wrong?
var OneOfMyGroupMembers = Class.create();
OneOfMyGroupMembers.prototype = {
initialize: function() {},
getMyGroupMembers: function() {
var groups = gs.getUser().getMyGroups();
var groupQuery = groups && groups.join ? groups.join(',') : String(groups || '');
if (!groupQuery)
return '';
var users = [];
var seen = {};
var member = new GlideRecord('sys_user_grmember');
member.addQuery('group', 'IN', groupQuery);
member.addQuery('user.active', true);
member.query();
while (member.next()) {
var userId = member.getValue('user');
if (userId && !seen[userId]) {
seen[userId] = true;
users.push(userId);
}
}
return users.join(',');
},
type: 'OneOfMyGroupMembers'
};
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
my thoughts
-> When used in a reference field, ServiceNow expects an encoded query, like return "sys_idIN" + users.join(',');
-> When used in a list filter dynamic operator, ServiceNow expects only the value(s) to compare against, not a field query. return users works because the platform internally generates something similar to: assigned_to IN (<returned values>)
💡 If my response helped, please mark it as correct ✅ and close the thread 🔒— this helps future readers find the solution faster! 🙏
Ankur
✨ Certified Technical Architect || ✨ 10x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago - last edited 3 weeks ago
Hello @Alon Grod
Script Include:
var OneOfMyGroupMembers = Class.create();
OneOfMyGroupMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getMyGroupMembers: function() {
var usersList = [];
var seen = {};
//prints [5ee74940b70022108d4406dd1e11a918, 019ad92ec7230010393d265c95c260dd, cfcbad03d711110050f5edcb9e61038f]
var myGroups = String(gs.getUser().getMyGroups());
//prints 5ee74940b70022108d4406dd1e11a918,019ad92ec7230010393d265c95c260dd,cfcbad03d711110050f5edcb9e61038f
myGroups = myGroups.substring(1, myGroups.length - 1);
myGroups = myGroups.replaceAll(' ', '');
var allGrpMembers = new GlideRecord('sys_user_grmember');
allGrpMembers.addQuery('group', 'IN', myGroups);
allGrpMembers.addQuery('user.active', true);
allGrpMembers.query();
while (allGrpMembers.next()) {
var userSysId = allGrpMembers.getValue('user');
if (userSysId && !seen[userSysId]) {
seen[userSysId] = true;
usersList.push(userSysId);
}
}
// Array
return usersList;
},
type: 'OneOfMyGroupMembers'
});
Dynamic Filter Options (Table: sys_filter_option_dynamic)
Validation Results on Group Members Table:
Hope that helps!
