Active employees of a department with their applications and related entitlements

Hello SailPoint developers,

I am trying to create a custom SailPoint 8.3 report will show all active employees of a department with their applications and related entitlements.

I have created the report but it is not retrieving the value for the Identity attribute.
Getting an error with respect to Data source type.

Below is the sample code for the report , Can some one check and update on same where is the issue.

<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition executor="sailpoint.reporting.LiveReportExecutor" name="VZ-TaskDefinition-RBAC-Application-and-Entitlement-Report" progressMode="Percentage" resultAction="RenameNew" subType="IAM Reports" template="true" type="LiveReport">
 <Attributes>
   <Map>
     <entry key="report">
       <value>
         <LiveReport title="Identity Attributes">
           <DataSource objectType="IdentityEntitlement" type="Filter">
             <QueryParameters>
               <Parameter defaultValue="true" property="correlated" valueClass="boolean"/>
               <Parameter argument="departmentID" property="extended9"/>
               <Parameter argument="departmentName" property="extended6"/>
               <Parameter argument="manager" property="id"/>
               <Parameter argument="inActive" defaultValue="false" property="inactive" valueClass="boolean"/>
   			<Parameter argument="applications" property="profiles.application.id">
                 <QueryScript>
                   <Source>
                     import sailpoint.object.*;

                     if (value != null) {
                     queryOptions.addFilter(Filter.in("profiles.application.id", value));
                     queryOptions.setDistinct(true);
                     }

                     return queryOptions;
                   </Source>
                 </QueryScript>
               </Parameter>
             </QueryParameters>
           </DataSource>
           <ReportForm>
             <Reference class="sailpoint.object.Form" name="VZ-Form-Report-Identity-Attribute"/>
           </ReportForm>
           <Columns>
             <ReportColumnConfig field="employeeID" header="Employee Number" property="name" sortable="true" width="110"/>
             <ReportColumnConfig field="displayName" header="Display Name" property="attributes.displayName" sortable="true" width="110"/>
   		  <ReportColumnConfig field="applications" header="Application Name" property="applications.name" sortable="true" width="110"/>
   		  <ReportColumnConfig field="entitlementvalue" header="Entitlement Value" property="value" sortable="true" width="110"/>
   		  <ReportColumnConfig field="attribute" header="Attribute" property="name" sortable="true" width="110"/>
   		  <ReportColumnConfig field="entitlementDisplayName" header="EntitlementDisplayName" property="id" sortable="true" width="110">
               <RenderScript>
                 <Source>
                   import sailpoint.object.*;
                   import java.util.*;
                   
                   IdentityEntitlement tempIdentEnt = context.getObjectById(IdentityEntitlement.class, value);
                   String appName = tempIdentEnt.getAppName();
                   String entValue = tempIdentEnt.getValue(); 

                   String entDisplayName = value;
                   QueryOptions queryOps = new QueryOptions();
                   Filter filter = Filter.and(Filter.eq("value",entValue), Filter.eq("application.name",appName));
                   queryOps.addFilter(filter);

                   List fields = new ArrayList();
                   fields.add("displayName");

                   Iterator iter = context.search(ManagedAttribute.class, queryOps, fields);
                   while (iter.hasNext()){      
                   entDisplayName=iter.next()[0];
                   }
                   
                   return entDisplayName;

                   
                 </Source>
               </RenderScript>
             </ReportColumnConfig>
   		  <ReportColumnConfig field="desc" header="Entitlement Description" property="attributes" sortable="true" width="110">
               <RenderScript>
                 <Source>
                   import sailpoint.object.*;
   				import java.util.*;
   				import sailpoint.tools.Util ;
   				import java.io.*;
                   
                   
              
   				if (value!= null &amp;&amp; value.get("sysDescriptions") !=null)
   					{
   					return value.get("sysDescriptions").get("en_US") ;
   					}		
                   </Source>
               </RenderScript>
             </ReportColumnConfig>
   		  <ReportColumnConfig field="itr name" header="ITR Name" property="name" sortable="true" width="110"/>
   		
           </Columns>
         </LiveReport>
       </value>
     </entry>
   </Map>
 </Attributes>
 <Description>
   This Report will provide all active employees of a department with their applications and related entitlement that can be used to file in the RBAC templates for departments.
 </Description>
 <RequiredRights>
   <Reference class="sailpoint.object.SPRight" name="FullAccessApplicationStatusReport"/>
 </RequiredRights>
 <Signature>
   <Inputs>
     <Argument multi="true" name="departmentID" type="string">
       <Prompt>Department ID</Prompt>
     </Argument>
     <Argument multi="true" name="departmentName" type="string">
       <Prompt>Department Name</Prompt>
     </Argument>
     <Argument multi="true" name="manager" type="Identity">
       <Prompt>Manager</Prompt>
     </Argument>
     <Argument name="inActive">
       <Prompt>InActive</Prompt>
     </Argument>
     <Argument multi="true" name="applications" type="Application">
       <Prompt>Applications</Prompt>
     </Argument>
   </Inputs>
 </Signature>
</TaskDefinition>```

Hi Pankay,

Welcome to our developer community :slight_smile:

Can you share the exact error and maybe also edit your question. The report is not fully visable.

Please place a 3 times a ` before the <xml and also 3 times a ` after the /xml>
So it will show the complete report including the datasource type :wink:

Thanks,

– Remold

1 Like

@Remold - Please find the below error and I have edit the post now , You can see the code now.

sailpoint.tools.GeneralException: could not resolve property: correlated of: sailpoint.object.IdentityEntitlement

at sailpoint.persistence.HibernatePersistenceManager.countObjects(HibernatePersistenceManager.java:2753)

at sailpoint.persistence.ClassPersistenceManager.countObjects(ClassPersistenceManager.java:358)

at sailpoint.server.InternalContext.countObjects(InternalContext.java:918)

at sailpoint.reporting.datasource.ProjectionDataSource.getSizeEstimate(ProjectionDataSource.java:61)

at sailpoint.rest.ReportResource.getData(ReportResource.java:170)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)

at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)

at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)

at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)

at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)

at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)

at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)

at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)

at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)

at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)

at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)

at org.glassfish.jersey.internal.Errors.process(Errors.java:292)

at org.glassfish.jersey.internal.Errors.process(Errors.java:274)

at org.glassfish.jersey.internal.Errors.process(Errors.java:244)

at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)

at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)

at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)

at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)

at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)

at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)

at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)

at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at sailpoint.web.SailPointResponseFilter.doFilter(SailPointResponseFilter.java:76)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at sailpoint.rest.RestCsrfValidationFilter.doFilter(RestCsrfValidationFilter.java:61)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at sailpoint.rest.AuthenticationFilter.doFilter(AuthenticationFilter.java:109)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at sailpoint.web.SailPointContextRequestFilter.doFilter(SailPointContextRequestFilter.java:61)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at sailpoint.web.SailPointPollingRequestFilter.doFilter(SailPointPollingRequestFilter.java:151)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at sailpoint.web.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:63)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:748)

Caused by: org.hibernate.QueryException: could not resolve property: correlated of: sailpoint.object.IdentityEntitlement

at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:77)

at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:71)

at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyType(AbstractEntityPersister.java:5038)

at sailpoint.persistence.HQLAliasContextImpl.getPropertyInfo(HQLAliasContextImpl.java:214)

at sailpoint.persistence.HQLAliasContextImpl.parseProperty(HQLAliasContextImpl.java:242)

at sailpoint.persistence.HQLAliasContextImpl.substituteAlias(HQLAliasContextImpl.java:117)

at sailpoint.persistence.HQLAliasContextStack.substituteAlias(HQLAliasContextStack.java:101)

at sailpoint.persistence.HQLFilterVisitor.visitComparison(HQLFilterVisitor.java:1198)

at sailpoint.persistence.HQLFilterVisitor.visitComparison(HQLFilterVisitor.java:1187)

at sailpoint.persistence.HQLFilterVisitor.visitEQ(HQLFilterVisitor.java:1239)

at sailpoint.object.Filter$LeafFilter.accept(Filter.java:1024)

at sailpoint.persistence.HQLFilterVisitor.visitComposite(HQLFilterVisitor.java:1947)

at sailpoint.persistence.HQLFilterVisitor.visitAnd(HQLFilterVisitor.java:2035)

at sailpoint.object.Filter$CompositeFilter.accept(Filter.java:1141)

at sailpoint.persistence.HibernatePersistenceManager.visitHQLFilter(HibernatePersistenceManager.java:2246)

at sailpoint.persistence.HibernatePersistenceManager.countObjects(HibernatePersistenceManager.java:2731)

... 73 more

Below is the attached logs

sailpoint.tools.GeneralException: could not resolve property: correlated of: sailpoint.object.IdentityEntitlement
	at sailpoint.persistence.HibernatePersistenceManager.countObjects(HibernatePersistenceManager.java:2753)
	at sailpoint.persistence.ClassPersistenceManager.countObjects(ClassPersistenceManager.java:358)
	at sailpoint.server.InternalContext.countObjects(InternalContext.java:918)
	at sailpoint.reporting.datasource.ProjectionDataSource.getSizeEstimate(ProjectionDataSource.java:61)
	at sailpoint.rest.ReportResource.getData(ReportResource.java:170)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
	at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.SailPointResponseFilter.doFilter(SailPointResponseFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.rest.RestCsrfValidationFilter.doFilter(RestCsrfValidationFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.rest.AuthenticationFilter.doFilter(AuthenticationFilter.java:109)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.SailPointContextRequestFilter.doFilter(SailPointContextRequestFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.SailPointPollingRequestFilter.doFilter(SailPointPollingRequestFilter.java:151)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.QueryException: could not resolve property: correlated of: sailpoint.object.IdentityEntitlement
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:77)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:71)
	at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyType(AbstractEntityPersister.java:5038)
	at sailpoint.persistence.HQLAliasContextImpl.getPropertyInfo(HQLAliasContextImpl.java:214)
	at sailpoint.persistence.HQLAliasContextImpl.parseProperty(HQLAliasContextImpl.java:242)
	at sailpoint.persistence.HQLAliasContextImpl.substituteAlias(HQLAliasContextImpl.java:117)
	at sailpoint.persistence.HQLAliasContextStack.substituteAlias(HQLAliasContextStack.java:101)
	at sailpoint.persistence.HQLFilterVisitor.visitComparison(HQLFilterVisitor.java:1198)
	at sailpoint.persistence.HQLFilterVisitor.visitComparison(HQLFilterVisitor.java:1187)
	at sailpoint.persistence.HQLFilterVisitor.visitEQ(HQLFilterVisitor.java:1239)
	at sailpoint.object.Filter$LeafFilter.accept(Filter.java:1024)
	at sailpoint.persistence.HQLFilterVisitor.visitComposite(HQLFilterVisitor.java:1947)
	at sailpoint.persistence.HQLFilterVisitor.visitAnd(HQLFilterVisitor.java:2035)
	at sailpoint.object.Filter$CompositeFilter.accept(Filter.java:1141)
	at sailpoint.persistence.HibernatePersistenceManager.visitHQLFilter(HibernatePersistenceManager.java:2246)
	at sailpoint.persistence.HibernatePersistenceManager.countObjects(HibernatePersistenceManager.java:2731)
	... 73 more

Your report datasource object type is IdentityEntitlement and you have a Query Parameter for the correlated field which belongs to identities, not identity entitlements. You would need to adjust the following line:
<Parameter defaultValue="true" property="correlated" valueClass="boolean"/>
to this:
<Parameter defaultValue="true" property="identity.correlated" valueClass="boolean"/>

@patrickboston - Thanks for the response and I have tried the changes and now I am getting the error for Inactive Parameter

sailpoint.tools.GeneralException: could not resolve property: inactive of: sailpoint.object.IdentityEntitlement
	at sailpoint.persistence.HibernatePersistenceManager.countObjects(HibernatePersistenceManager.java:2753)
	at sailpoint.persistence.ClassPersistenceManager.countObjects(ClassPersistenceManager.java:358)
	at sailpoint.server.InternalContext.countObjects(InternalContext.java:918)
	at sailpoint.reporting.datasource.ProjectionDataSource.getSizeEstimate(ProjectionDataSource.java:61)
	at sailpoint.rest.ReportResource.getData(ReportResource.java:170)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
	at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.SailPointResponseFilter.doFilter(SailPointResponseFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.rest.RestCsrfValidationFilter.doFilter(RestCsrfValidationFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.rest.AuthenticationFilter.doFilter(AuthenticationFilter.java:109)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.SailPointContextRequestFilter.doFilter(SailPointContextRequestFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.SailPointPollingRequestFilter.doFilter(SailPointPollingRequestFilter.java:151)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at sailpoint.web.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.QueryException: could not resolve property: inactive of: sailpoint.object.IdentityEntitlement
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:77)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:71)
	at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyType(AbstractEntityPersister.java:5038)
	at sailpoint.persistence.HQLAliasContextImpl.getPropertyInfo(HQLAliasContextImpl.java:214)
	at sailpoint.persistence.HQLAliasContextImpl.parseProperty(HQLAliasContextImpl.java:242)
	at sailpoint.persistence.HQLAliasContextImpl.substituteAlias(HQLAliasContextImpl.java:117)
	at sailpoint.persistence.HQLAliasContextStack.substituteAlias(HQLAliasContextStack.java:101)
	at sailpoint.persistence.HQLFilterVisitor.visitComparison(HQLFilterVisitor.java:1198)
	at sailpoint.persistence.HQLFilterVisitor.visitComparison(HQLFilterVisitor.java:1187)
	at sailpoint.persistence.HQLFilterVisitor.visitEQ(HQLFilterVisitor.java:1239)
	at sailpoint.object.Filter$LeafFilter.accept(Filter.java:1024)
	at sailpoint.persistence.HQLFilterVisitor.visitComposite(HQLFilterVisitor.java:1947)
	at sailpoint.persistence.HQLFilterVisitor.visitAnd(HQLFilterVisitor.java:2035)
	at sailpoint.object.Filter$CompositeFilter.accept(Filter.java:1141)
	at sailpoint.persistence.HibernatePersistenceManager.visitHQLFilter(HibernatePersistenceManager.java:2246)
	at sailpoint.persistence.HibernatePersistenceManager.countObjects(HibernatePersistenceManager.java:2731)
	... 73 more

Same issue. Inactive is a property of identity objects, not identityentitlement objects.

1 Like

And the same for the other properties

The base is IdentityEntitlement, so the properties should be based on this using the . relationships :slight_smile:

– Remold

1 Like

Hi @pdjoshi

Please try using the following xml.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition created="1690213817097" executor="sailpoint.reporting.LiveReportExecutor" id="c0a8010489871477818988981b090289" modified="1690270582908" name="VZ-TaskDefinition-RBAC-Application-and-Entitlement-Report" progressMode="Percentage" resultAction="RenameNew" subType="IAM Reports" template="true" type="LiveReport">
  <Attributes>
    <Map>
      <entry key="report">
        <value>
          <LiveReport title="Identity Attributes">
            <DataSource objectType="sailpoint.object.IdentityEntitlement" type="Filter">
              <QueryParameters>
                <Parameter defaultValue="true" property="identity.correlated" valueClass="boolean"/>
                <Parameter argument="departmentID" property="identity.extended9"/>
                <Parameter argument="departmentName" property="identity.extended6"/>
                <Parameter argument="manager" property="identity.manager.id"/>
                <Parameter argument="inActive" defaultValue="false" property="identity.inactive" valueClass="boolean"/>
                <Parameter argument="application" property="application.id"/>
                <Parameter argument="name" defaultValue="assignedRoles" operation="NE" property="name"/>
                <Parameter argument="name" defaultValue="detectedRoles" operation="NE" property="name"/>
              </QueryParameters>
            </DataSource>
            <Columns>
              <ReportColumnConfig field="employeeID" header="Employee Number" property="identity.name" sortable="true" width="110"/>
              <ReportColumnConfig field="displayName" header="Display Name" property="identity.displayName" sortable="true" width="110"/>
              <ReportColumnConfig field="departmentName" header="Department Name" property="identity.extended6" sortable="true" width="110"/>
              <ReportColumnConfig field="application" header="Application Name" property="application.name" sortable="true" width="110"/>
              <ReportColumnConfig field="entitlementvalue" header="Entitlement Value" property="value" sortable="true" width="110"/>
              <ReportColumnConfig field="attribute" header="Attribute" property="name" sortable="true" width="110"/>
              <ReportColumnConfig field="entitlementDisplayName" header="Entitlement DisplayName" property="application" scriptArguments="name,value" sortable="true" width="110">
                <RenderScript>
                  <Source>
                            import sailpoint.api.ManagedAttributer;
                            import sailpoint.object.ManagedAttribute;
                            
                            ManagedAttribute managedAttribute = ManagedAttributer.get(context, value, scriptArgs.get("name"), scriptArgs.get("value"));
                            if(managedAttribute != null) {
                            return managedAttribute.getDisplayableName();
                            }
                            return null;
                            
                        </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="accountId" header="account_name" property="nativeIdentity" skipLocalization="true" sortable="true" width="110"/>
              <ReportColumnConfig field="accountDisplayName" header="account_display_name" property="displayName" skipLocalization="true" sortable="true" width="110"/>
            </Columns>
          </LiveReport>
        </value>
      </entry>
    </Map>
  </Attributes>
  <Description>
     This Report will provide all active employees of a department with their applications and related entitlement that can be used to file in the RBAC templates for departments.
 </Description>
  <RequiredRights>
    <Reference class="sailpoint.object.SPRight" id="c0a800697d9a115e817d9a428148004d" name="FullAccessApplicationStatusReport"/>
  </RequiredRights>
  <Signature>
    <Inputs>
      <Argument multi="true" name="departmentID" type="string">
        <Prompt>Department ID</Prompt>
      </Argument>
      <Argument multi="true" name="departmentName" type="string">
        <Prompt>Department Name</Prompt>
      </Argument>
      <Argument multi="true" name="manager" type="Identity">
        <Prompt>Manager</Prompt>
      </Argument>
      <Argument name="inActive">
        <Prompt>InActive</Prompt>
      </Argument>
      <Argument multi="true" name="application" type="Application">
        <Prompt>Applications</Prompt>
      </Argument>
    </Inputs>
  </Signature>
</TaskDefinition>

Please make sure to verify extended Attribute name for departmentID and departmentName as that mentioned in property in following line.

                <Parameter argument="departmentID" property="identity.extended9"/>
                <Parameter argument="departmentName" property="identity.extended6"/>

I have also removed ITR Name attribute since I was not sure which attribute it was referring to. You can make the necessary changes accordingly.

3 Likes

@Remold - Thanks for providing the update.

@Jarin_James - Thanks for providing the update for the xml , I have modified and almost it has work properly.

I need two additional attribute in the report as the output - ITR Name and ITR Exist.

ITR Name - it belong to the IT Role name and ITR Exist - It means whether in user profile IT role exist or not.

Can you help me on same.

I pass for the ITR Name but it is not giving me the output for the IT Role name , It is giving the entitlement value.

<ReportColumnConfig field="itr name" header="ITR Name" property="value" sortable="true" width="110"/>

Hi @pdjoshi

To get Roles remove the following lines from xml.

<Parameter argument="name" defaultValue="assignedRoles" operation="NE" property="name"/>
<Parameter argument="name" defaultValue="detectedRoles" operation="NE" property="name"/>

By removing these 2 lines you will get the Roles as well in the entitlement column.

@Jarin_James - I have removed those 2 lines but for IT Role name , I am getting the value same as that of entitlement value which should not be a case.

It should show the ITR name (IT Role name ) which is associated on user profile

Hi @pdjoshi

When you remove the 2 lines you will see IT Roles in different line with attribute value = assignedRoles /detectedRoles. In this case you don’t need different column to show IT Role name. The entitlement value column itself will show the IT Role Name.

If you want a different column for IT Role Name, try the below xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition created="1690213817097" executor="sailpoint.reporting.LiveReportExecutor" id="c0a8010489871477818988981b090289" modified="1690270582908" name="VZ-TaskDefinition-RBAC-Application-and-Entitlement-Report" progressMode="Percentage" resultAction="RenameNew" subType="IAM Reports" template="true" type="LiveReport">
  <Attributes>
    <Map>
      <entry key="report">
        <value>
          <LiveReport title="Identity Attributes">
            <DataSource objectType="sailpoint.object.IdentityEntitlement" type="Filter">
              <QueryParameters>
                <Parameter defaultValue="true" property="identity.correlated" valueClass="boolean"/>
                <Parameter argument="departmentID" property="identity.extended9"/>
                <Parameter argument="departmentName" property="identity.extended6"/>
                <Parameter argument="manager" property="identity.manager.id"/>
                <Parameter argument="inActive" defaultValue="false" property="identity.inactive" valueClass="boolean"/>
                <Parameter argument="application" property="application.id"/>
              </QueryParameters>
            </DataSource>
            <Columns>
              <ReportColumnConfig field="employeeID" header="Employee Number" property="identity.name" sortable="true" width="110"/>
              <ReportColumnConfig field="displayName" header="Display Name" property="identity.displayName" sortable="true" width="110"/>
              <ReportColumnConfig field="departmentName" header="Department Name" property="identity.extended6" sortable="true" width="110"/>
              <ReportColumnConfig field="itr name" header="ITR Name" property="value" scriptArguments="name,value,type" sortable="true" width="110">
                <RenderScript>
                  <Source>
                   import sailpoint.object.ManagedAttribute;
                   
                   String name = (String) scriptArgs.get("name");
                   ManagedAttribute.Type type = scriptArgs.get("type");
                   if(name.equals("detectedRoles")){
                     return value;
                   }
                   if(type != null &amp;&amp; (name.equals("assignedRoles") &amp;&amp; type.equals(ManagedAttribute.Type.Entitlement))){
                       return value;
                   }
                   return null;
                   
                  </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="application" header="Application Name" property="application.name" sortable="true" width="110"/>
              <ReportColumnConfig field="entitlementvalue" header="Entitlement Value" property="value" scriptArguments="name,value" sortable="true" width="110">
                <RenderScript>
                  <Source>
                  
                   String name = (String) scriptArgs.get("name");
                   if(!name.equals("assignedRoles") &amp;&amp; !name.equals("detectedRoles")){
                     return value;
                   } else {
                     return null;
                   }
                   
                  </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="attribute" header="Attribute" property="name" sortable="true" width="110"/>
              <ReportColumnConfig field="entitlementDisplayName" header="Entitlement DisplayName" property="application" scriptArguments="name,value" sortable="true" width="110">
                <RenderScript>
                  <Source>
                            import sailpoint.api.ManagedAttributer;
                            import sailpoint.object.ManagedAttribute;
                            
                            ManagedAttribute managedAttribute = ManagedAttributer.get(context, value, scriptArgs.get("name"), scriptArgs.get("value"));
                            if(managedAttribute != null) {
                            return managedAttribute.getDisplayableName();
                            }
                            return null;
                            
                        </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="accountId" header="account_name" property="nativeIdentity" skipLocalization="true" sortable="true" width="110"/>
              <ReportColumnConfig field="accountDisplayName" header="account_display_name" property="displayName" skipLocalization="true" sortable="true" width="110"/>
            </Columns>
          </LiveReport>
        </value>
      </entry>
    </Map>
  </Attributes>
  <Description>
     This Report will provide all active employees of a department with their applications and related entitlement that can be used to file in the RBAC templates for departments.
 </Description>
  <RequiredRights>
    <Reference class="sailpoint.object.SPRight" id="c0a800697d9a115e817d9a428148004d" name="FullAccessApplicationStatusReport"/>
  </RequiredRights>
  <Signature>
    <Inputs>
      <Argument multi="true" name="departmentID" type="string">
        <Prompt>Department ID</Prompt>
      </Argument>
      <Argument multi="true" name="departmentName" type="string">
        <Prompt>Department Name</Prompt>
      </Argument>
      <Argument multi="true" name="manager" type="Identity">
        <Prompt>Manager</Prompt>
      </Argument>
      <Argument name="inActive">
        <Prompt>InActive</Prompt>
      </Argument>
      <Argument multi="true" name="application" type="Application">
        <Prompt>Applications</Prompt>
      </Argument>
    </Inputs>
  </Signature>
</TaskDefinition>

@Jarin_James - thanks for the update , I have use the ITR Name in the different column as this is the requirement to have the ITR name.

I am not getting the value populated for the ITR name field.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition created="1690196723907" executor="sailpoint.reporting.LiveReportExecutor" id="c6126a6a896d178d8189879348c33547" modified="1690374601345" name="VZ-TaskDefinition-RBAC-Application-and-Entitlements-Report" progressMode="Percentage" resultAction="RenameNew" subType="IAM Reports" template="true" type="LiveReport">
  <Attributes>
    <Map>
      <entry key="report">
        <value>
          <LiveReport title="Identity Attributes">
            <DataSource objectType="IdentityEntitlement" type="Filter">
              <QueryParameters>
                <Parameter defaultValue="true" property="identity.correlated" valueClass="boolean"/>
                <Parameter argument="departmentID" property="identity.extended9"/>
                <Parameter argument="departmentName" property="identity.extended6" valueClass="boolean"/>
                <Parameter argument="manager" property="identity.manager.id"/>
                <Parameter argument="inActive" defaultValue="false" property="identity.inactive" valueClass="boolean"/>
                <Parameter argument="application" property="application.id"/>
              </QueryParameters>
            </DataSource>
            <ReportForm>
              <Reference class="sailpoint.object.Form" id="c6126a6a896d178d81898792eb553542" name="VZ-Form-Report-Identity-Attributes"/>
            </ReportForm>
            <Columns>
              <ReportColumnConfig field="employeeID" header="Employee Number" property="identity.name" sortable="true" width="110"/>
              <ReportColumnConfig field="displayName" header="Display Name" property="identity.displayName" sortable="true" width="110"/>
              <ReportColumnConfig field="departmentName" header="Department Name" property="identity.extended6" sortable="true" width="110"/>
              <ReportColumnConfig field="application" header="Application Name" property="application.name" sortable="true" width="110"/>
              <ReportColumnConfig field="entitlementvalue" header="Entitlement Value" property="value" scriptArguments="name,value" sortable="true" width="110">
                <RenderScript>
                  <Source>
                  
                   String name = (String) scriptArgs.get("name");
                   if(!name.equals("assignedRoles") &amp;&amp; !name.equals("detectedRoles")){
                     return value;
                   } else {
                     return null;
                   }
                   
                  </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="attribute" header="Attribute" property="name" sortable="true" width="110"/>
              <ReportColumnConfig field="entitlementDisplayName" header="Entitlement DisplayName" property="application" scriptArguments="name,value" sortable="true" width="110">
                <RenderScript>
                  <Source>
                            import sailpoint.api.ManagedAttributer;
                            import sailpoint.object.ManagedAttribute;
                            
                            ManagedAttribute managedAttribute = ManagedAttributer.get(context, value, scriptArgs.get("name"), scriptArgs.get("value"));
                            if(managedAttribute != null) {
                            return managedAttribute.getDisplayableName();
                            }
                            return null;
                            
              </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="desc" header="Entitlement Description" property="attributes" sortable="true" width="110">
                <RenderScript>
                  <Source>
                    import sailpoint.object.*;
					import java.util.*;
					import sailpoint.tools.Util ;
					import java.io.*;
                    
                    
               
					if (value!= null &amp;&amp; value.get("sysDescriptions") !=null)
						{
						return value.get("sysDescriptions").get("en_US") ;
						}		
                    </Source>
                </RenderScript>
              </ReportColumnConfig>
              <ReportColumnConfig field="itr name" header="ITR Name" property="value" scriptArguments="name,value,type" sortable="true" width="110">
                <RenderScript>
                  <Source>
                   import sailpoint.object.ManagedAttribute;
                   
                   String name = (String) scriptArgs.get("name");
                   ManagedAttribute.Type type = scriptArgs.get("type");
                   if(name.equals("detectedRoles")){
                     return value;
                   }
                   if(type != null &amp;&amp; (name.equals("assignedRoles") &amp;&amp; type.equals(ManagedAttribute.Type.Entitlement))){
                       return value;
                   }
                   return null;
                   
                  </Source>
                </RenderScript>
              </ReportColumnConfig>
            </Columns>
          </LiveReport>
        </value>
      </entry>
    </Map>
  </Attributes>
  <Description>
    This Report will provide all active employees of a department with their applications and related entitlement that can be used to file in the RBAC templates for departments.
  </Description>
  <RequiredRights>
    <Reference class="sailpoint.object.SPRight" id="4692e95262af855e0162af857458005b" name="FullAccessApplicationStatusReport"/>
  </RequiredRights>
  <Signature>
    <Inputs>
      <Argument multi="true" name="departmentID" type="string">
        <Prompt>Department ID</Prompt>
      </Argument>
      <Argument multi="true" name="departmentName" type="string">
        <Prompt>Department Name</Prompt>
      </Argument>
      <Argument multi="true" name="manager" type="Identity">
        <Prompt>Manager</Prompt>
      </Argument>
      <Argument name="inActive">
        <Prompt>InActive</Prompt>
      </Argument>
      <Argument multi="true" name="application" type="Application">
        <Prompt>Applications</Prompt>
      </Argument>
    </Inputs>
  </Signature>
</TaskDefinition>

Hi @pdjoshi

ITR Name column will have the IT Role Name. In your example IPI is an entitlement and hence ITR Name is blank. But if you scroll down and look for Roles (Attribute=assignedRoles /detectedRoles) you will see that Entitlement Name column will be blank and ITR Name column will be having value.

1 Like

This stuff is why I created the JDBC Reporting data source. So much effort for what amounts to like 500 characters of SQL.

@Jarin_James - Thanks for your input and help ITR Name is also getting populated.

Can you help me on last thing as we saw in report output not every users has IT Role associated on their profile , So i need to have one more column with name as IT Role Exist. How can i pass that in report column config field

@Jarin_James - IT Role Exist will display the value as yes/no

Hi @pdjoshi

You can add the following line to view whether IT Role exist or not.

<ReportColumnConfig field="itr exist" header="ITR Exist" property="identity" sortable="true" width="110">
  <RenderScript>
    <Source>
     import sailpoint.object.Identity;
     import sailpoint.object.Bundle;
      
     List detectedRoles = value.getDetectedRoles();
     if(detectedRoles.size() > 0){
      return "Yes";
     }
     
     List assignedRoles = value.getAssignedRoles();
     for(Bundle bundle:assignedRoles){
       if(bundle.getType().equals("it")){
         return "Yes";
       }
     }
     
     return "No";
     
    </Source>
  </RenderScript>
</ReportColumnConfig>

Note ; This column shows whether the User mentioned in the column has IT Role or not.

3 Likes