使用计算监听类保存rat文件

需求背景

有客户希望实现这样一个需求:在参数模板中输入相应参数(如3月份),查询展现出该条件下的数据(3月份的数据),当以后每次使用该条件(3月份)查询时均显示第一次查询出的结果,无论数据库中(3月份)的数据如何变化。

问题分析

客户的这个需求可以简单理解为,保存第一次查询后的结果,以后相同条件下都使用这个结果。

目前润乾提供了rat的文件格式,即报表计算后的文件格式。现在要做的就是把第一次计算后的结果以rat文件格式输出。

计算监听类可以为我们提供很好的帮助,继承AbstractCalculateListener类,在afterCalculate()方法中取得的report对象即为计算后的报表,我们再将其保存成rat文件即可。

实现步骤

制作任意带有参数模板的报表。

计算监听类如下:

import java.io.File;

import com.runqian.report4.usermodel.AbstractCalculateListener;

import com.runqian.report4.util.ReportUtils;

public class SaveRatCaclListener extends AbstractCalculateListener{

public void afterCalculate() throws Exception {

String realPath = request. getRealPath (“”).replace(“\\”,“/”); //获取应用真实路径

String reportFileHome = context.getInitCtx().getMainDir(); //获取应用资源路径

String reportName = (String)request.getAttribute(“reportName”); //jsp中设置要保存rat文件名,与报表同名

String ratName = realPath+reportFileHome+File.separator+reportName+“.rat”;

ReportUtils.write(ratName, report);

System.out.println(“rat保存成功!输入路径为—->”+ratName);

}

}

发布报表的jsp代码片段:

1、 设置要保存的rat文件名为报表名,存到request中,以便在计算监听类中获取

request.setAttribute(“reportName”,report.substring(0,report.lastIndexOf(“.raq”)));

2、 检查是否有相应(与raq文件同名)的rat文件

String ratFile = report.substring(0,iTmp)+”.rat”;

File ratf=new File(application.getRealPath(reportFileHome+ File.separator +ratFile));

if(ratf.exists()){

System.out.println(“存在与该报表对应的rat文件>>>>>>>>>”+ratFile);

3、 如果有相应的rat文件,则发布rat文件

<report:html name=”report1″ reportFileName=”<%=ratFile%>”

funcBarLocation=”top”

needPageMark=”yes”

generateParamForm=”no”

exceptionPage=”/reportJsp/myError2.jsp”

appletJarName=”runqianReport4Applet.jar,dmGraphApplet.jar”

/>

4、 否则发布raq文件

<report:html name=”report1″ reportFileName=”<%=report%>”

funcBarLocation=”top”

needPageMark=”yes”

generateParamForm=”no”

params=”<%=param.toString()%>”

exceptionPage=”/reportJsp/myError2.jsp”

appletJarName=”runqianReport4Applet.jar,dmGraphApplet.jar”

calculateListener=”SaveRatCaclListener” //指定计算监听类名

/>

访问该jsp,输入相应参数后,以后每次访问时均是该条件下的结果。

热门文章