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.

javascript in report filters

mduluk
Giga Expert

We have a PTO calendar, and I would like to run a report where the it only shows people who our members of my assignment groups. I have one field, requester, which is a reference to the user table. I want to run a filter where 'requester is javascript:isMemberOf(getMyGroups())', but I know that syntax is wrong. Any ideas on how to set up the filter correctly?

1 ACCEPTED SOLUTION

Michael Kaufman
Giga Guru

You can try this:

Find ArrayUtil Script Include and set to Client Callable



Script Include: ArrayUtil
Client Callable: true


Add getMyGroupMembers Script Include


Script Include: getMyGroupMembers
Client Callable: true
Description: Returns all members of your group
function getMyGroupMembers(){
//Set Variables
var myUserObject = gs.getUser();
var myUserGroups = myUserObject.getMyGroups();
var groupsArray = [];
var groupMembers = [];
var arrayUtil = new ArrayUtil();
var it = myUserGroups.iterator();
//gs.log('Get all my Groups into an array');
for (var i = 0; it.hasNext(); i++) {
var myGroup = it.next();
groupsArray<i>=myGroup;
}
//gs.log('Get all my Group Members into an array;);
for (var i2 = 0; i2 < groupsArray.length; i2++) {
var grGroupMembers = new GlideRecord('sys_user_grmember');
grGroupMembers.addQuery('group',groupsArray[i2]);
grGroupMembers.query();
while (grGroupMembers.next()) {
groupMembers.push(grGroupMembers.user.sys_id.toString());
}
}
//gs.log('Return Unique Group Member Array');
return arrayUtil.unique(groupMembers);
}


Filter for report:


requester is javascript:getMyGroupMembers()


View solution in original post

9 REPLIES 9

Michael Kaufman
Giga Guru

You can try this:

Find ArrayUtil Script Include and set to Client Callable



Script Include: ArrayUtil
Client Callable: true


Add getMyGroupMembers Script Include


Script Include: getMyGroupMembers
Client Callable: true
Description: Returns all members of your group
function getMyGroupMembers(){
//Set Variables
var myUserObject = gs.getUser();
var myUserGroups = myUserObject.getMyGroups();
var groupsArray = [];
var groupMembers = [];
var arrayUtil = new ArrayUtil();
var it = myUserGroups.iterator();
//gs.log('Get all my Groups into an array');
for (var i = 0; it.hasNext(); i++) {
var myGroup = it.next();
groupsArray<i>=myGroup;
}
//gs.log('Get all my Group Members into an array;);
for (var i2 = 0; i2 < groupsArray.length; i2++) {
var grGroupMembers = new GlideRecord('sys_user_grmember');
grGroupMembers.addQuery('group',groupsArray[i2]);
grGroupMembers.query();
while (grGroupMembers.next()) {
groupMembers.push(grGroupMembers.user.sys_id.toString());
}
}
//gs.log('Return Unique Group Member Array');
return arrayUtil.unique(groupMembers);
}


Filter for report:


requester is javascript:getMyGroupMembers()


For some reason my gs.log's are working when I run this report.  I want to make sure a certain section is completed and nothing is in the system logs.  Will the script include still log stuff if it's coming from a report that ran?

mduluk
Giga Expert

Thank you. I was thinking that was the path I wanted to go. That worked great!


Aaron40
Kilo Guru

Hey Mark (remember me?),

That's a nice script you posted above. +1'd it so others could find it- I'm sure others will find it handy. This seems like a pretty basic situation others will run into eventually.