query to see if user is in a group

sigmachiuta
Kilo Guru

i am trying to query in a business rule to see if the opened by user of a change is a part of a group.   i cant seem to use current.opened_by.isMemberOf()

so i am querying the group table but i am not returning any results

var usr = current.opened_by.getDisplayValue();

 

  var gr = new GlideRecord('sys_user_grmember');

  gr.addQuery('group','group name');

  gr.addQuery('user',usr);

  gr.query();

  while (gr.next()){

  gs.log('query ran');

  if (gr.user != null){

  gs.log('query found' + gr.user);

//do processing

  }else{

gs.log('no user found')

}

  }

1 ACCEPTED SOLUTION

var gr2 = new GlideRecord('sys_user_group');  


gr2.addQuery('name', 'Desktop Support');  


gr2.query();  


  while (gr2.next()){  


      var groupsys = gr2.sys_id;  


      gs.log('The GroupSys ' +groupsys);  


  }  


 


var gr = new GlideRecord('sys_user_grmember');  


gr.addQuery('group', groupsys);  


gr.addQuery('user',current.opened_by);    


gr.query();  


if (gr.next()) {


  gs.log('query ran');


  gs.log('This person is ' + gr.user + ' is a member');


}


else


{


  gs.log('the query still ran');


  gs.log('No user');


}


View solution in original post

13 REPLIES 13

i would rather use the isMemberOf() method but it seems its only available for gs.   current logged in user objects


such as gs.getUser().isMemberOf('group name')


i would rather not use sysId's


Ok.


Has the above script works ?


Just use the sys_id in


gr.addQuery('group','sys_id of the group you want');


statement and   run.



Thanks,


Mihir


The user object is ServiceNow's internal representation of the currently logged in user. (Getting a User Object - ServiceNow Wiki )   So it looks like you will have to query the sys_user_group table first to get the sys_id of the group by it's name (as you prefer to reference it).   Then use the sys_id of the group in your query of the sys_user_grmember table to find a match along iwth the sys_id of the user you are looking up.



So just query the Group table first to get the Sys_ID of the group and then use that in your query to determine if they are a member of that group:



var gr = new GlideRecord('sys_user_group');


gr.addQuery('name', 'Desktop Support');


gr.query();


  while (gr.next()){


      var groupsys = gr.sys_id;


      gs.log(groupsys);


  }


ok so i am getting somewhere now...   Why wouldnt i get   'no user' if the user wasnt in the group


var gr2 = new GlideRecord('sys_user_group');


gr2.addQuery('name', 'Help Desk');


gr2.query();


  while (gr2.next()){


      var groupsys = gr2.sys_id;


      gs.log('The GroupSys' +groupsys);


  }


var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group','groupsys');
gr.addQuery('user',current.opened_by);
gr.query();
while (gr.next()){
gs.log('query ran');
if (gr.user != null){
gs.log('This person is ' + gr.user);
}else {gs.log('No user');
  }
}

Take the quotes away from 'group_sys' since it's a variable in the line:



  1. gr.addQuery('group','groupsys');