Get all users, who are part of the requester's groups

Harsha Pappala
Kilo Sage

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());
}
}

1 ACCEPTED SOLUTION

Willem
Giga Sage
Giga Sage

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

View solution in original post

14 REPLIES 14

Willem
Giga Sage
Giga Sage

You can try this:

var group_list = gs.getUser().getMyGroups();

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());
    }
}

Willem
Giga Sage
Giga Sage

or even better:

var group_list = gs.getUser().getMyGroups();

var users = [];
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group', "IN", group_list);
grp.query();

while (grp.next()) {
    users.push(grp.user);
    gs.info('user name ' + grp.user.getDisplayValue());
}

Hi Willem, 

Thanks for the response. But i am trying to execute this on a catalog request. 

There is a requester name field, using whose name i need to gather their groups and users who are part of those groups

current.requester_name.getGroups() ?

I am not sure what to use..

Can you try with:

gs.getUserByID(current.requester_name).getGroups()