润乾报表 动态改变数据源

Posted personal-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了润乾报表 动态改变数据源相关的知识,希望对你有一定的参考价值。

经常会遇到一些报表需要根据不同的情况(参数)连接不同的数据源从而完成相应的数据的展现,也就是经常说的动态数据源报表。

实现动态数据源有多种方法:具体说两种使用过的方法:
第一种:使用脚本集算器法

使用集算脚本编辑工具完成计算脚本,并为报表输出计算后结果集:

技术分享图片 

 A1:根据参数dbname参数值决定数据源

 A2:编写查询SQL

    A3:执行sql取数

    A4:关闭连接

    A5:将结果集返回报表 

优点:开发简单,理解方便。缺点:必须 集算器授权

第二种:TAG标签
1、导包

 

1 <%@ page import="com.raqsoft.report.usermodel.Context"%>
2 <%@ page import="com.raqsoft.report.view.*"%>
3 <%@ page import="com.raqsoft.report.util.*"%>
4 <%@ page import="com.raqsoft.report.model.ReportDefine"%>
5 <%@ page import="com.raqsoft.report.usermodel.DataSetMetaData"%>
6 <%@ page import="com.raqsoft.report.usermodel.DataSetConfig"%>

 

 

2.编写更换数据源的方法

 1 <%!
 2     public static ReportDefine changeDataSource(String filePath, String dataSourceName){
 3         ReportDefine rd = null;
 4         try{
 5             rd = (ReportDefine)ReportUtils.read(filePath);//读取报表
 6             DataSetMetaData dsmd = rd.getDataSetMetaData(); //取数据集元数据
 7             for(int i=0; i<dsmd.getDataSetConfigCount(); i++){//遍历数据集
 8                 DataSetConfig dsc = dsmd.getDataSetConfig( i );//数据集配置 数据集的抽象定义
 9                 dsc.setDataSourceName( dataSourceName );//设置数据集引用到的数据源名称
10                 dsmd.setDataSetConfig( i, dsc);//修改数据集配置
11             }
12             rd.setDataSetMetaData(dsmd);//设置数据集元数据
13             ReportUtils.write(filePath, rd);//保存修改后的rd文件
14         }catch(Exception e){
15          return null;
16         }
17         return rd;
18     }
19 %>

 

3.调用换取数据源方法

 1     //获取数据源名称
 2     String dbname = request.getParameter("dbname");
 3     
 4     //动态设置报表中数据集的数据源
 5     String reportPath = request.getRealPath("/WEB-INF/reportFiles/"+report);
 6     ReportDefine rd = changeDataSource(reportPath, dbname);
 7     
 8     //把 ReportDefine 放在Request 中,方便取用
 9     String rptName = "RPT_"+Double.toString(Math.random());
10     request.setAttribute(rptName,rd);

 

 4.发布报表

使用defineBean方式发布报表,有参数模版包括参数模版

 1 <report:param name="form1" 
 2     srcType="defineBean"
 3     beanName="<%=paramsFileName%>"
 4     needSubmit="no"
 5     params="<%=param.toString()%>"
 6     hiddenParams="<%=param.toString()%>"
 7     needImportEasyui="no"
 8     resultContainer="reportContainer"
 9     resultPage="<%=resultPage%>"
10 />
11 
12 <report:html name="report1" 
13     srcType="defineBean"
14     beanName="<%=rptName%>"
15     funcBarLocation="no"
16     needScroll="<%=scroll%>"
17     generateParamForm="no"
18     params="<%=param.toString()%>"
19     exceptionPage="/reportJsp/myError2.jsp"
20     appletJarName="/raqsoftReportApplet.jar"
21     scrollWidth="100%" 
22     scrollHeight="100%"
23     needImportEasyui="no"
24     printedRaq="<%=exportReportName%>"
25 />

 

优点:只使用报表即可 缺点:编写复杂,不易懂

以上实测有效。以下为了解方法,未实践。

第三种:使用API方式

参考连接地址:http://blog.sina.com.cn/s/blog_8910bc4f0100ugyd.html

第四种:润乾报表实现(官方论坛方法)

参考地址:http://bbs.raqsoft.com.cn/portal.php?mod=view&aid=394



以上是关于润乾报表 动态改变数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何动态改变报表的行高列宽

润乾报表基础知识

如何制作动态层分组报表

润乾报表的附件上传?

润乾报表工具用数据集查询时怎么将符合某一列相同的项合并

润乾报表大数据量展现报错内存溢出怎么办呀?