You can use the following method to get the member list of a given workgroup:
api.ObjectUtil.getWorkgroupMembers(...);
/**
* Given an Identity that is a workgroup Iterator over the properties
* of a groups' members. This method does a projection query.
*/
public static Iterator<Object[]> getWorkgroupMembers(SailPointContext ctx, Identity identity, List<String> props )
Please refer below rule, if someone needed.
Hope you get answer if still looking then pls refer.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Rule PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Rule language="beanshell" name="XXXXXXXXX">
<Source>
<![CDATA[
import sailpoint.object.Identity;
import sailpoint.object.QueryOptions;
import sailpoint.object.Filter;
import java.util.*;
import sailpoint.object.WorkItem;
import sailpoint.api.SailPointContext;
import sailpoint.api.ObjectUtil;
public List createOwnMethodName(SailPointContext context, Identity Workgroup){
List workgroupMembers = new ArrayList();
Iterator members = ObjectUtil.getWorkgroupMembers(context, Workgroup, null);
while (members.hasNext()) {
Object[] object = (Object[]) members.next();
Identity firstValue = (Identity) object[0];
workgroupMembers.add(firstValue.getName());
}
return workgroupMembers;
}
Identity idn = context.getObjectByName(Identity.class, "XXXXXXXXXX");
createOwnMethodName(context, idn);
]]>
</Source>
</Rule>
Hi Ranjan,
I'm getting exception while printing the memebers.
String temp = owner; /////getting owner value from form
Identity iden = context.getObjectById(Identity.class,temp);
String temp2 = iden.getName();
if(temp2.equalsIgnoreCase(" Resolution Group"))
{
List workgroupMembers = new ArrayList();
Identity iden2 = context.getObjectByName(Identity.class,temp);
Iterator members = ObjectUtil.getWorkgroupMembers(context, iden2, null);
System.out.println("members issssssssssssssss--------"+members); ///////////////im getting "sailpoint.persistence.hibernatemanager$Project result iterator@702bfd1 error"
while (members.hasNext())
{
Object[] object = members.next();
Identity firstValue = (Identity) object[0];
workgroupMembers.add(firstValue.getName());
}
return workgroupMembers;
}
Here is the rule to send an email as report for Workgroup members
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Rule PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Rule language="beanshell" name="Workgroup Membership Report">
<Source>
<![CDATA[
import java.io.File;
import java.io.FileInputStream;
import sailpoint.object.Identity;
import sailpoint.object.QueryOptions;
import sailpoint.object.Filter;
import sailpoint.object.EmailTemplate;
import sailpoint.object.EmailOptions;
import sailpoint.object.EmailFileAttachment;
import java.util.List;
import java.lang.StringBuilder;
import sailpoint.api.ObjectUtil;
String header = "Workgroup,members,size\n";
StringBuilder builder=new StringBuilder();
builder.append(header);
boolean hasIdentities = false;
try{
QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("workgroup",Boolean.TRUE));
List workGroups = context.getObjects(Identity.class,qo);
for(Identity ident : workGroups){
List wrkgmemnberList = new ArrayList();
log.warn("Workgroup name - "+ident.getName()+"\nMembers");
Identity workgroup = context.getObjectByName(Identity.class, ident.getName());
if(workgroup.isWorkgroup()){
//Integer size = 0;
Iterator wrkGrpmembers = ObjectUtil.getWorkgroupMembers(context, workgroup, null);
while(wrkGrpmembers.hasNext()){
Object[] object = (Object[]) wrkGrpmembers.next();
Identity ids = (Identity) object[0];
wrkgmemnberList.add(ids.getName());
System.out.println(ids.getName()+" - "+ids.isInactive());
}
if(wrkgmemnberList.size()>0){
builder.append(workgroup.getName()+","+wrkgmemnberList+","+wrkgmemnberList.size()+"\n");
hasIdentities = true;
}
}
}
}catch(Exception e){
e.printStackTrace();
}
if(hasIdentities){
try{
String fileName = "Workgroup Members Report.csv";
byte[] fileData = builder.toString().getBytes();
EmailTemplate emailTemplate = context.getObject( EmailTemplate.class, "Report Completion" );
EmailOptions emailOptions = new EmailOptions();
List toAddress = Arrays.asList(new String[]{"JP@xxx.com"});
emailOptions.setTo(toAddress);
emailOptions.setVariable("reportName", "Workgroup Members Report");
EmailFileAttachment attachment = new EmailFileAttachment( fileName, EmailFileAttachment.MimeType.MIME_CSV, fileData );
emailOptions.addAttachment( attachment );
context.sendEmailNotification( emailTemplate, emailOptions );
}
catch(Exception e){
log.error("Failed to send User Status Report");
log.error(e.toString());
}
}
return "Goodbye!";
]]>
</Source>
</Rule>