We are trying to add a new column in our custom report which uses a OOTB java data source “ProvisioningTransactionObjectDataSource”. Could you please let us know on how to add columns for java data source report
@sayandeep_zurich Mostly it depend on your requirement but if you just want to add new column then u can add with one more entry in ReportColumnConfig.
and you can calculate the value as per property for example u already have one property with identityname then pass it in property for this filed and write source code where you can calculate and return department name from identity.
@mkumariaas We have tried that using renderscript but it didnot work
@sayandeep_zurich send report debug once let me check what u r trying to achieve so i can validate.
Hi @sayandeep_zurich ,
RenderScript will not function with the “ProvisioningTransactionObjectDataSource” datasource. You can only retrieve predefined columns from this source.
@Arun-Kumar so no way to add new columns
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition created="1735588598522" executor="sailpoint.reporting.LiveReportExecutor" id="644151b194071ca58194192452f909d1" modified="1735821619862" name="Provisioning Transaction Failure Report" progressMode="Percentage" resultAction="Rename" significantModified="1735821619862" subType="Administration Reports" template="true" type="LiveReport">
<Attributes>
<Map>
<entry key="report">
<value>
<LiveReport disablePreview="true" title="Provisioning Transaction Failure Report">
<DataSource dataSourceClass="sailpoint.reporting.datasource.ProvisioningTransactionObjectDataSource" type="Java">
<QueryParameters>
<Parameter argument="applications" property="applicationName"/>
<Parameter argument="integration" property="integration">
<QueryScript>
<Source>
import sailpoint.object.*;
import java.util.*;
if (value != null && !value.isEmpty()){
queryOptions.addFilter(Filter.ignoreCase(Filter.like("integration", value, Filter.MatchMode.START)));
}
return queryOptions;
</Source>
</QueryScript>
</Parameter>
<Parameter argument="accountDisplayName" property="accountDisplayName">
<QueryScript>
<Source>
import sailpoint.object.*;
import java.util.*;
if (value != null && !value.isEmpty()){
queryOptions.addFilter(Filter.ignoreCase(Filter.like("accountDisplayName", value, Filter.MatchMode.START)));
}
return queryOptions;
</Source>
</QueryScript>
</Parameter>
<Parameter argument="status" property="status"/>
<Parameter argument="type" property="type"/>
<Parameter argument="operation" property="operation"/>
<Parameter argument="source" property="source"/>
<Parameter argument="creationDateStart">
<QueryScript>
<Source>
import java.util.Calendar;
import sailpoint.object.*;
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -3);
queryOptions.addFilter(Filter.gt("created", cal.getTime()));
return queryOptions;
</Source>
</QueryScript>
</Parameter>
<Parameter argument="forced" property="forced">
<QueryScript>
<Source>
import sailpoint.object.*;
import java.util.*;
if (value == true){
queryOptions.addFilter(Filter.eq("forced", true));
}
return queryOptions;
</Source>
</QueryScript>
</Parameter>
</QueryParameters>
</DataSource>
<ReportForm>
<Reference class="sailpoint.object.Form" id="644151b194071ca581941955767b0caf" name="AccessCentral-Provisioning Transaction Report Form"/>
</ReportForm>
<Columns>
<ReportColumnConfig field="name" header="report_provisioning_id" property="name" sortable="true" width="110"/>
<ReportColumnConfig field="applicationName" header="report_provisioning_application" property="applicationName" sortable="true" width="110"/>
<ReportColumnConfig field="identityName" header="report_provisioning_identity" property="identityName" sortable="true" width="110"/>
<ReportColumnConfig field="identityDisplayName" header="report_provisioning_identity_display" property="identityDisplayName" sortable="true" width="110"/>
#Need to populate the email field
<ReportColumnConfig field="email" header="Email" property="identities.email" sortable="true" width="110"/>
<ReportColumnConfig field="accountDisplayName" header="report_provisioning_account_display" property="accountDisplayName" sortable="true" width="110"/>
<ReportColumnConfig field="status" header="report_provisioning_status" property="status" sortable="true" width="110"/>
<ReportColumnConfig field="operation" header="report_provisioning_operation" property="operation" sortable="true" width="110"/>
<ReportColumnConfig field="source" header="report_provisioning_source" property="source" sortable="true" width="110"/>
<ReportColumnConfig field="created" header="report_provisioning_date" property="created" sortable="true" width="110"/>
<ReportColumnConfig field="errorMessages" header="report_provisioning_errors" width="110"/>
<ReportColumnConfig field="requestName" header="report_provisioning_request_name" width="110"/>
<ReportColumnConfig field="requestValue" header="report_provisioning_request_value" width="110"/>
<ReportColumnConfig field="requestOperation" header="report_provisioning_request_operation" width="110"/>
</Columns>
</LiveReport>
</value>
</entry>
</Map>
</Attributes>
<Description>Displays all information from provisioning transactions.</Description>
<RequiredRights>
<Reference class="sailpoint.object.SPRight" id="644105c490911a2d819091da61ea005d" name="FullAccessProvisioningTransactionDetailedReport"/>
</RequiredRights>
<Signature>
<Inputs>
<Argument multi="true" name="applications" type="Application">
<Description>help_report_provisioning_application</Description>
</Argument>
<Argument multi="true" name="identities" type="Identity">
<Description>help_report_provisioning_identity</Description>
</Argument>
<Argument name="integration" type="string">
<Description>help_report_provisioning_integration</Description>
</Argument>
<Argument name="accountDisplayName" type="string">
<Description>help_report_provisioning_account_display_name</Description>
</Argument>
<Argument name="operation" type="string">
<Description>help_report_provisioning_operation</Description>
</Argument>
<Argument name="source" type="string">
<Description>help_report_provisioning_source</Description>
</Argument>
<Argument name="status" type="string">
<Description>help_report_provisioning_status</Description>
</Argument>
<Argument name="type" type="string">
<Description>help_report_provisioning_type</Description>
</Argument>
<Argument name="creationDate" type="date">
<Description>help_report_provisioning_date</Description>
</Argument>
<Argument name="forced" type="boolean">
<Description>help_report_provisioning_forced</Description>
</Argument>
<Argument name="email" type="string">
<Description>help_report_provisioning_forced</Description>
</Argument>
</Inputs>
</Signature>
</TaskDefinition>
Trying to achieve the email field
Hi @sayandeep_zurich ,
You can create a new report using the Filter DataSource to retrieve the required fields.
<DataSource objectType="ProvisioningTransaction" type="Filter">
@Arun-Kumar how to achieve the other columns that is present in detailed provisioning transaction report. I need the error messages, attributes, etc
Hi @sayandeep_zurich ,
You can get all the required details from Filer DataSource. Please refer the column for errorMessages below.
<ReportColumnConfig field="errorMessages" header="provisioning_errors" property="name" scriptArguments="attributes" width="110">
<RenderScript>
<Source>
import sailpoint.object.Attributes;
import sailpoint.object.ProvisioningResult;
Attributes attributes = scriptArgs.get("attributes");
Map attributemap = attributes.getMap();
if(attributemap.get("planResult") != null){
ProvisioningResult result=attributemap.get("planResult");
return result.getErrors();
}
</Source>
</RenderScript>
</ReportColumnConfig>
@Arun-Kumar this attributemap.get(“planResult”) is not working
Hi @sayandeep_zurich ,
Go to the “Debug” page and select the “Provisioning Transaction” object. Then, choose any one of the available Provisioning Transactions. This will provide you with a better understanding of the data. Keep in mind that not all records will have the “planResult” and “errors” fields.
This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.