使用计算监听类保存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,输入相应参数后,以后每次访问时均是该条件下的结果。