Which IIQ version are you inquiring about?
8.3
Hello
I am trying to create a report that can be scheduled as a task definition ( i hope this is the right approach )
I am having trouble getting more than one attribute in the report. I didn’t think it was going to be this difficult.
Below is the report I’ve been working with. I can get the displayname of the user but not the email. My goal is to have the displayname, email, status of each user in a certain workgroup.
Hoping someone can get me pointed in the right direction.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition created="1741108750259" executor="sailpoint.reporting.LiveReportExecutor" id="a24f1341954e13f08195622b27b31f67" modified="1741288785871" name="NAC Report Template" progressMode="Percentage" resultAction="Rename" significantModified="1741288785871" subType="Identity and User Reports" template="true" type="LiveReport">
<Attributes>
<Map>
<entry key="TaskDefinition.runLengthAverage" value="10"/>
<entry key="TaskDefinition.runLengthTotal" value="10"/>
<entry key="TaskDefinition.runs" value="1"/>
<entry key="report">
<value>
<LiveReport title="User Details Report">
<DataSource defaultSort="name" objectType="Identity" type="Filter">
<QueryParameters>
<Parameter argument="queryFilter">
<QueryScript>
<Source>
import sailpoint.object.*;
import java.lang.*;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
Log log = LogFactory.getLog("trace.NAC_Report");
Filter f = Filter.eq("workgroup", true);
queryOptions.addFilter(f);
Filter f2 = Filter.like("name","FNS_NAC_",Filter.MatchMode.START);
Iterator it = context.search(Identity.class, queryOptions);
while (it.hasNext()) {
Identity id = (Identity) it.next();
log.error("xxx Datasource - Name: " + id.getName() + ", DisplayName: " + id.getDisplayName() + ", Email: " + id.getEmail() + ", EmailAttr: " + id.getAttribute("email") + ", ID: " + id.getId());
}
return queryOptions;
</Source>
</QueryScript>
</Parameter>
</QueryParameters>
</DataSource>
<Columns>
<ReportColumnConfig field="Workgroup" header="Workgroup" property="name" sortable="true" width="110"/>
<ReportColumnConfig field="email" header="Email" property="email" width="110">
<RenderScript>
<Source>
import sailpoint.object.*;
import java.util.*;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
Log log = LogFactory.getLog("trace.NAC_Report");
String email = "";
log.error("xxx Email Script - here is the value " + value); // Should be groupName
if (value != null) {
QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("workgroups.name", value));
qo.addFilter(Filter.ne("workgroup", true)); // Exclude workgroups
Iterator entIter = context.search(Identity.class, qo);
int count = 0;
while(entIter.hasNext()){
Identity wg = (Identity)entIter.next();
String emailAttr = wg.getAttribute("email");
email = emailAttr != null ? emailAttr : "N/A";
log.error("xxx Email Script - Member - Name: " + wg.getName() + ", Email (getEmail): " + wg.getEmail() + ", Email (attribute): " + emailAttr + ", DisplayName: " + wg.getDisplayName());
log.error("xxx Email Script - All Member Attributes: " + wg.getAttributes());
count++;
break; // Single member per row
}
log.error("xxx Email Script - Found " + count + " members");
} else {
log.error("xxx Email Script - Value is null, skipping query");
}
log.error("xxx Email Script - Returning Email: " + email);
return email; // Return String for Email
</Source>
</RenderScript>
</ReportColumnConfig>
<ReportColumnConfig field="displayName" header="Display Name" property="displayName" width="150">
<RenderScript>
<Source>
import sailpoint.object.*;
import java.util.*;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
Log log = LogFactory.getLog("trace.NAC_Report");
String displayName = "";
log.error("xxx DisplayName Script - here is the value " + value); // Should be groupName
if (value != null) {
QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("workgroups.name", value));
qo.addFilter(Filter.ne("workgroup", true)); // Exclude workgroups
Iterator entIter = context.search(Identity.class, qo);
int count = 0;
while(entIter.hasNext()){
Identity wg = (Identity)entIter.next();
displayName = wg.getDisplayName() != null ? wg.getDisplayName() : "N/A";
log.error("xxx DisplayName Script - Member - Name: " + wg.getName() + ", Email (attribute): " + wg.getAttribute("email") + ", DisplayName: " + wg.getDisplayName());
log.error("xxx DisplayName Script - All Member Attributes: " + wg.getAttributes());
count++;
break; // Single member per row
}
log.error("xxx DisplayName Script - Found " + count + " members");
} else {
log.error("xxx DisplayName Script - Value is null, skipping query");
}
log.error("xxx DisplayName Script - Returning DisplayName: " + displayName);
return displayName; // Return String for Display Name
</Source>
</RenderScript>
</ReportColumnConfig>
</Columns>
</LiveReport>
</value>
</entry>
</Map>
</Attributes>
<Description>FNS_NAC_ Workgroup Member report template.</Description>
</TaskDefinition>