- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-18-2020 04:01 AM
Hello guys,
For a catalog request, i want to update all the incidents. Where assigned or caller is a user who is part of requester's group/groups.
Using below script to get the information. But it is very time taking, as i have to parse multiple incidents.
Could anybody suggest me a better way to do this
var sg = new GlideRecord('sys_user_grmember');
sg.addQuery('user', requester);
sg.query();
var group_list = [];
var num = sg.getRowCount();
while (sg.next()) {
gs.info('groups found' + num);
group_list.push(sg.group);
}
for (var j = 0; j < group_list.length; j++) {
var users = [];
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group', group_list[j]);
grp.query();
while (grp.next()) {
users.push(grp.user);
gs.info('user name ' + users[j].getDisplayValue());
}
}
Solved! Go to Solution.
- Labels:
-
Request Management
-
Service Catalog
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-19-2020 04:40 AM
You got above code working right? So "requester" variable is already set somewhere in the code?
Then this will improve the speed. It will only trigger 2 queries instead of 1 query, plus additional queries for each group:
var sg = new GlideRecord('sys_user_grmember');
sg.addQuery('user', requester);
sg.query();
var group_list = [];
var num = sg.getRowCount();
while (sg.next()) {
gs.info('groups found' + num);
group_list.push(sg.group);
}
var users = [];
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group', 'IN', group_list);
grp.query();
while (grp.next()) {
users.push(grp.getUniqueValue());
gs.info('user name ' + grp.getDisplayValue());
}
//now you have an array of users you can use for an "IN" on the incident table
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-19-2020 04:40 AM
Hi Harsha,
there is no way other than query.
had it been for logged in user then you could have used gs.getUser().getMyGroups();
So you need to query twice sys_user_grmember table
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-19-2020 04:40 AM
You got above code working right? So "requester" variable is already set somewhere in the code?
Then this will improve the speed. It will only trigger 2 queries instead of 1 query, plus additional queries for each group:
var sg = new GlideRecord('sys_user_grmember');
sg.addQuery('user', requester);
sg.query();
var group_list = [];
var num = sg.getRowCount();
while (sg.next()) {
gs.info('groups found' + num);
group_list.push(sg.group);
}
var users = [];
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group', 'IN', group_list);
grp.query();
while (grp.next()) {
users.push(grp.getUniqueValue());
gs.info('user name ' + grp.getDisplayValue());
}
//now you have an array of users you can use for an "IN" on the incident table
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2020 10:37 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-21-2020 03:25 AM
It is working as expected and the execution time improved by a lot.
Thanks for your support
Much appreciated

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-19-2020 10:20 PM
Hi Harsha,
Try below code to get all group members of requester
I have tried this code in background script it is working for me
var groupArray = gs.getUser().ÂgetUserByID('your_requester_name').getMyGroups().toArray();
var len = groupArray.length;
var users = [];
for( var i = 0; i<len; i++)
{
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group', groupArray[i]);
gr.query();
while(gr.next())
{
users.push(gr.user.toString());
}
}
var allMembers = [];
var ut = new ArrayUtil();
allMembers = ut.unique(users);
for (var j=0;j<allMembers.length; j++)
{
gs.print(allMembers[j]);
}
Thanks
Himanshu