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.