Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

User is in multiple groups, but query only returns one group

Bruler1230
Tera Expert

I have a script include that needs to return the groups that a user is a member of. Currently my script inlcude is only returning one group, even if there are 3 groups total? Why is my query only getting one group?

 

var currentUser = this.getParameter('sysparm_user')
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('user', currentUser);
gr.query();

if (gr.next()) {
var groupname = [];
var group = new GlideRecord('sys_user_group');
group.addQuery('sys_id', gr.group);
group.query();

while(group.next()) {
groupname.push(group.name.toString();
}
return groupname.toString();
}
7 REPLIES 7

Community Alums
Not applicable

Hi, 

Here's an example background script to help you with this. This is for the demo user Beth Anglin: 

gs.info(userGroups("46d44a23a9fe19810012d100cca80666"));

function userGroups(currentUser){
    var grMember = new GlideRecord("sys_user_grmember");
    grMember.addQuery("user", currentUser);
    grMember.query();
    var groupArray = [];
    while(grMember.next()){
        groupArray.push(grMember.getDisplayValue("group"));
    }
    return groupArray.toString();
}

You will want to pass in the user parameter in where I've manually passed the sys_id. 

The result of this script running for beth was: 

NA Escalation Approvers,EMEA Escalation Approvers,Network CAB Managers,Hardware,Database,Software,Catalog Request Approvers for Sales,Service Desk

Also - to specifically answer your question, it was the if (gr.next) that was causing it, that needed to have been a while. You then do a second GlideRecord query which isn't required though. 

Hope that helps!

Mike

Thanks.

so do i not need this line?

var currentUser = this.getParameter('sysparm_user')

 

Where am i setting current user to be this parameter?

Also, in my catalog client script, what would be the correct way to set these values? 

g_form.setValues('groups', what goes here?);

Please try as below

var currentUser = this.getParameter('sysparm_user');

userGroups(currentUser); // calling the function


function userGroups(currentUser){
var grMember = new GlideRecord("sys_user_grmember");
grMember.addQuery("user", currentUser);
grMember.query();
var groupArray = [];
while(grMember.next()){
groupArray.push(grMember.getDisplayValue("group"));
}
return groupArray.join(',');
}

in client script try to set the value

g_form.setValues('groups', the returned answer from the script include);