润乾 v2018 自定义生成缓存

 

在访问报表时,如果数据量较大或者计算复杂,访问报表时就会等待较长时间,用户希望能够提高报表的访问速度。

这种报表基本上都有固定条件,比如按照用户名登陆,这样的话就可以想办法先将报表计算出来,用户访问时直接取报表结果就行。

集算报表提供了缓存管理,当开始缓存时(配置文件中的 alwaysReloadDefine 值为 no),第一次访问报表时会进行计算,如果再次访问同一张报表,就会直接从缓存中取结果,能够提高报表访问速度,这种方式一般都是通过报表系统自行处理,针对用户的需求,报表提供了 api 方式,能够调用 api 自主对缓存进行控制,代码如下:

     long time=-1;//定义缓存有效时间,-1为一直有效

     for(int i=1;i<=5;i++){

     Context cxt = newContext();

      cxt.setParamValue("szzb",String.valueOf(i));//szzb为报表中定义的参数

      CacheManager manager =CacheManager.getInstance();

      ReportEntry entry =manager.getReportEntry("testhc.rpx");

     ReportCache cache =entry.getReportCache( cxt, time );

     IReport report =cache.getReport();

              }

可以在 jsp 中手动调用相应 api 代码,也可以在 web.xml 中增加个 listener,应用启动时直接调用。

注:1、如果是按照参数循环,Contextcxt = new Context(); 这个要写在循环的最内侧,否则数据集缓存会取错

    2、参数类型必须一致,比如报表中定义参数是字符串型,那么 api 中传入的必须是 string。

    3、报表名称和访问 url 上必须一致,有时 url 上会将报表名上加个斜线,也能正确访问报表,但是找缓存时要求保证严格一致。

    4、如果在 listener 中调用,web.xml 会有加载顺序,会先加载 listener,后加载 servlet,而此时报表的 servlet 还没加载,会导致找授权文件,报表路径等有问题,所以需要在 api 中增加个时间延迟,比如:Thread.currentThread().sleep(15000);,过段时间后再执行报表 api
更多集成部署类问题请看:集成部署分类导航
* 数据库密码中含有特殊字符润乾应用部署时 xml 怎么处理
* 轻松实现报表集成
* linux 操作系统安装润乾报表
* 润乾报表权限管理机制
* tomcat8 部署润乾 v2018 完整过程