If i added below code in custom report (access request status report) column config section is not working

Which IIQ version are you inquiring about?

Version 8.3

Share all details related to your problem, including any error messages you may have received.

No output generated in log

<ReportColumnConfig field="description" header="rept_lcm_request_status_col_entitlement_description" valueClass="java.lang.String" width="110">
                <RenderScript>
                  <Source>
                           System.out.println("---------------Testing Reporting  1 ------------");
                      </Source>
                </RenderScript>
              </ReportColumnConfig>

Hi @amanKsingh ,

I would suggest taking copy of the Task Definition and make changes on the new one. Since you are making changes to OTB report it might be overwritten during upgrade.

Have you made any other changes on the report? I have tested this in my local setup and there are no issues. Even the sysout statement is being printed.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition created="1626455346166" executor="sailpoint.reporting.LiveReportExecutor" id="7f0000017ab01aed817ab04b0bf6004c" modified="1704462452943" name="Access Request Status Report" progressMode="Percentage" resultAction="Rename" subType="Lifecycle Manager Reports" template="true" type="LiveReport">
  <Attributes>
    <Map>
      <entry key="auditEventTypes">
        <value>
          <List>
            <String>AccessRequest</String>
            <String>EntitlementsRequest</String>
            <String>RolesRequest</String>
          </List>
        </value>
      </entry>
      <entry key="report">
        <value>
          <LiveReport title="Access Request Status Report">
            <Chart title="rept_lcm_access_request_chart_title" type="pie">
              <Script>
                <Source>
                             
                                import sailpoint.object.*;
                                import java.util.*;

                                List data = new ArrayList();
                                System.out.println("underentry");
                                QueryOptions approvalStateOps = new QueryOptions(baseQueryOptions);
                                Filter filter = Filter.and( Filter.notnull("approvalState"),
                                    Filter.ne("identityRequest.executionStatus", IdentityRequest.ExecutionStatus.Terminated));

                                approvalStateOps.addFilter(filter);
                                approvalStateOps.addGroupBy("approvalState");

                                List fields = new ArrayList();
                                fields.add("count(*)");
                                fields.add("approvalState");

                                Iterator iter = context.search(IdentityRequestItem.class, approvalStateOps, fields);
                                while (iter.hasNext()){
                                    Object[] row = iter.next();
                                    Map val = new HashMap();
                                    val.put("category", row[1].toString());
                                    val.put("value", row[0]);
                                    data.add(val);
                                }

                                QueryOptions terminatedStateOps = new QueryOptions(baseQueryOptions);
                                filter = Filter.and( Filter.notnull("approvalState"),
                                    Filter.eq("identityRequest.executionStatus", IdentityRequest.ExecutionStatus.Terminated));
                                terminatedStateOps.addFilter(filter);

                                int terminatedCount = context.countObjects(IdentityRequestItem.class, terminatedStateOps);
                                if (terminatedCount > 0) {
                                    Map val = new HashMap();
                                    val.put("category", "identity_request_terminated");
                                    val.put("value", terminatedCount);
                                    data.add(val);
                                }

                                QueryOptions requestStateOps = new QueryOptions(baseQueryOptions);
                                requestStateOps.addFilter(Filter.isnull("approvalState"));
                                requestStateOps.addGroupBy("identityRequest.completionStatus");

                                fields = new ArrayList();
                                fields.add("count(*)");
                                fields.add("identityRequest.completionStatus");

                                iter = context.search(IdentityRequestItem.class, requestStateOps, fields);
                                while (iter.hasNext()){
                                    Object[] row = iter.next();
                                    Map val = new HashMap();
                                    if( IdentityRequest.CompletionStatus.Success.equals(row[1])) {
                                        val.put("category", "rept_lcm_request_status_col_status_pending_provision");
                                    } else {
                                        val.put("category", "rept_lcm_request_status_col_status_pending_completion");
                                    }

                                    val.put("value", row[0]);
                                    data.add(val);
                                }

                                return data;
                              
                           </Source>
              </Script>
            </Chart>
            <DataSource dataSourceClass="sailpoint.reporting.datasource.LcmIdentityRequestStatusJavaDataSource" objectType="sailpoint.object.IdentityRequestItem" type="Java"/>
            <ReportForm>
              <Reference class="sailpoint.object.Form" id="7f0000017ab01aed817ab04b0ba60045" name="Access Request Status Form"/>
            </ReportForm>
            <Columns>
              <ReportColumnConfig field="requestId" header="rept_lcm_request_status_col_request_id" property="requestId" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="requester" header="rept_lcm_request_status_col_requester" property="requester" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="requestedFor" header="rept_lcm_request_status_col_requested_for" property="requestedFor" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="owner" header="rept_lcm_request_status_col_owner" property="owner" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="created" header="rept_lcm_request_status_col_request_date" property="created" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="operation" header="rept_lcm_request_status_col_operation" property="operation" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="application" header="rept_lcm_request_status_col_app" property="application" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="account" header="rept_lcm_request_status_col_account" property="account" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="attribute" header="rept_lcm_request_status_col_entitlement" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="attributeValue" header="rept_lcm_request_status_col_entitlement_value" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="description" header="rept_lcm_request_status_col_entitlement_description" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="approvers" header="rept_lcm_request_status_col_approver" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="rejecters" header="rept_lcm_request_status_col_rejecter" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="status" header="rept_lcm_request_status_col_status" property="status" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig dateFormat="short" field="completionDateString" header="rept_lcm_request_status_col_completion_date" property="completionDateString" sortable="true" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="requestorComments" header="rept_lcm_request_status_col_requester_comments" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="workItemComments" header="rept_lcm_request_status_col_work_item_comments" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="completionComments" header="rept_lcm_request_status_col_completion_comments" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="attachmentsCount" header="rept_lcm_request_status_col_attachments_count" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="recommendation" header="rept_lcm_request_status_col_recommendation" property="recommendation" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="recommendationReasons" header="rept_lcm_request_status_col_recommendation_reasons" property="recommendationReasons" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="recommendationTimestamp" header="rept_lcm_request_status_col_recommendation_timestamp" property="recommendationTimestamp" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="classificationNames" header="rept_lcm_request_status_col_classifications" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="accessRecommendation" header="rept_col_access_request_recommendation" property="accessRecommendation" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="accessRecommendationReasons" header="rept_col_access_request_recommendation_reasons" property="accessRecommendationReasons" valueClass="java.lang.String" width="110"/>
              <ReportColumnConfig field="accessRecommendationTimestamp" header="rept_col_access_request_recommendation_timestamp" property="accessRecommendationTimestamp" valueClass="java.lang.String" width="110">
                <RenderScript>
                  <Source>
                           System.out.println("---------------Testing Reporting  1 ------------");
                      </Source>
                </RenderScript>
              </ReportColumnConfig>
            </Columns>
          </LiveReport>
        </value>
      </entry>
      <entry key="reportTitle" value="rept_lcm_entitlement_request_status_title"/>
    </Map>
  </Attributes>
  <Description>Displays information about access requests from LCM in detailed format.</Description>
  <RequiredRights>
    <Reference class="sailpoint.object.SPRight" id="7f0000017ab01a95817ab04aa81e0054" name="FullAccessEntitlementRequestStatusReport"/>
  </RequiredRights>
  <Signature>
    <Inputs>
      <Argument multi="true" name="applications" type="Application">
        <Description>rept_input_lcm_request_status_report_apps</Description>
      </Argument>
      <Argument multi="true" name="approvers" type="Identity">
        <Description>rept_input_lcm_request_status_report_approver</Description>
      </Argument>
      <Argument multi="true" name="requestors" type="Identity">
        <Description>rept_input_lcm_request_status_report_requester</Description>
      </Argument>
      <Argument multi="true" name="entitlements" type="sailpoint.object.IdentityItem">
        <Description>rept_input_lcm_request_status_report_entitlements</Description>
      </Argument>
      <Argument multi="true" name="roles" type="Role">
        <Description>rept_input_lcm_request_status_report_roles</Description>
      </Argument>
      <Argument multi="true" name="targetIdentities" type="Identity">
        <Description>rept_input_lcm_request_status_report_target_identity</Description>
      </Argument>
      <Argument name="status" type="string">
        <Description>rept_input_lcm_request_status_report_status</Description>
      </Argument>
      <Argument name="requestDateRange" type="daterange">
        <Description>rept_input_lcm_request_status_report_status</Description>
      </Argument>
      <Argument name="completionDateRange" type="daterange">
        <Description>rept_input_lcm_request_status_report_status</Description>
      </Argument>
    </Inputs>
  </Signature>
</TaskDefinition>

type or paste code here

I did not change any thing in code.I have also tested in my local via this but not working in my case.

Hi Aman,

Sorry, my bad. I have tested it against a different report. What I have noticed is that the render script is not working when the Data Source is Java, but it is working for Filter.

can you send me any reference how to use filter to print Sysout?

Reporting guy here!

Java reports are responsible for doing all of their own rendering, including invoking the RenderScript if needed. There are helper classes that expose this behavior, specifically DataSourceColumnHelper. However, you’re still responsible for invoking it per field, and constructing your own list of arguments.

I generally just do it myself, though, like this: src/main/java/com/identityworksllc/iiq/jdbcreporting/JDBCDataSource.java · main · pub / JDBC Reporting · GitLab

In your case, I’d probably write a new Java class that extends the OOTB report and implement the behavior you need.

1 Like

where can i get this jdbc reporting to extend ootb.

Then what we will be used in place of Render script when Data source type is java

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.