当处理的数据量较多,逻辑比较复杂时,报表可能会超时。为了解决这个问题,Reinhard一直使用SrsReportDataProviderPreProcess来做预处理报表。它会在调用SSRS前,在AX会话中处理数据。预处理过的数据存储在常规表中,该表是所有用户会话共享的,通过会话id标识。这样的方法在多用户并发时,会有瓶颈。
在Dynamics AX 2012 R2中,其实还有一个类,SrsReportDataProviderPreProcessTempDB,他可以使用临时表,来持有跨会话(从数据处理会话到SSRS数据获取会话)的报表数据。
其他部分的开发方式与之前SrsReportDataProviderPreProcess报表的开发方式一样,但需要注意以下两点:
- 使用临时表,而不是常规表。
- 在返回临时表前,加上这样一句:
tmpTable.setConnection(this.parmUserConnection());