润乾报表 动态改变数据源

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

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

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

 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

原文地址:https://www.cnblogs.com/personal-blog/p/9343105.html

时间: 2024-08-29 02:37:07

润乾报表 动态改变数据源的相关文章

润乾报表使用EXCEL数据源的方法及改进

Excel作为一种常见的文件格式广泛存在,很多报表的数据来源于Excel.由于报表一般都带有参数,经常需要对原始数据进行分组.过滤等,都需要再编写程序代码才能满足有参数报表的查询需求. 润乾报表使用Excel数据源,需要用Java程序处理文件,通过自定义数据集为报表提供数据源支持.这里通过一个实例说明润乾报表实现过程,以及改进方式. 报表描述 基金公司将股票信息以每月一个Excel存储,命名方式为:stock_yyyyMM.xls.包括每只股票的股票编码.交易日期和收盘价,现报表参数为起始年月和

润乾报表使用json数据源的方法改进

JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见.润乾报表使用json数据源需要在自定义数据集中通过Java程序解析json文件后将结果集返回给报表,这里介绍润乾报表的实现方式以及改进方法. 报表需求 学生成绩在应用中以json文件存在,现需要根据学科参数查询指定科目学生成绩,并按学生成绩降序排列.报表样式如下: 润乾报表实现 自定义数据集 润乾报表中需要通过自定义数据集完成json文件的读取,实现过程如下: 1.  准备json解析依赖包 Java程

润乾报表实现无数据源的规则报表及改进

某报表系统中有部分报表需要按照一定规则显示数据,如:显示查询日期范围内的奇数日数据,要求数据库中即使无记录该日期也显示(内容为空). 本文重点来实现奇数日期序列,数据区不是重点,故置空. 以上述报表需求为例,这里来看一下润乾报表的实现过程,以及改进方法. 润乾报表实现 以下为润乾报表的实现方式,考虑跨年和跨月份的情况: 使用时要对辅助列A列进行隐藏,以及对第2行进行条件隐藏,偶数的日期不显示.所以报表工具实现要依靠大量隐藏行列. 报表工具实现需要借助隐藏行格完成,主要原因是数据计算和报表呈现混在

润乾报表实现动态数据源报表及改进

经常会遇到一些报表需要根据不同的情况(参数)连接不同的数据源从而完成相应的数据的展现,也就是经常说的动态数据源报表.报表工具通常的做法有两种,一是不同的情况加载不同的数据源连接参数,如:url.driver.username.password等:二是利用已配置的多个连接池,根据不同情况选择.这里通过一个实例,说明润乾报表的实现过程及改进方案. 报表说明 应用中需要通过参数控制报表连接的数据源,当参数flag为1时连接数据源一(db1),否则连接数据源二(db2). 润乾报表实现 首先根据flag

集算报表与润乾报表处理动态报表时的异同

集算报表继承了润乾报表的宏机制来处理动态报表,对于简单的动态报表使用宏实现非常方便.对于一些复杂的动态报表,集算报表还提供了脚本数据集来处理动态报表,适合宏无法实现的场景,而润乾报表中要实现复杂动态报表时则需要编写自定义数据集来完成.下面通过几个例子来详细比较一下集算报表和润乾报表在处理动态报表时的相同与不同点. 相同点 集算报表和润乾报表都提供了宏,使用方式几乎完全一致,且都包含普通宏和动态宏.         普通宏常用于静态内容替换,如在员工表中同时只希望查看薪金或奖金,开发两张报表显然是

润乾报表 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定:

一.润乾报表错误内容 产生数据工厂: com.runqian.report4.dataset.SQLDataSetFactory 失败 错误来源:: 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定: 二.解决方法 同事做的润乾报表.我来整合到系统中,在调试运行的时候都是用的同一个数据库,数据库链接也是开启的,但是就是连不上. 这个时候需要在配置菜单->数据集,如下图 重新选择一下数据源,然后保存,问题得到解决. 估计是因为用的不同的环境的,所以js中

润乾报表

集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简,其中报表函数也做了适当优化,这里就常见计算来比较一下二者函数语法之间的差异. 对比函数一览表 1.数据集函数 1.1.ds.group() 润乾报表: datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGroupExp}}}}}}) 集算报表: datasetName.group(<selectExp

集算报表与润乾报表的函数语法对照

集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简.当中报表函数也做了适当优化,这里就常见计算来比較一下二者函数语法之间的差异.         对照函数一览表 1.数据集函数 1.1.ds.group()         润乾报表: datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGroupExp}}}}}})         集算报表: data

润乾报表实现跨行组运算报表及改进

跨行组计算类报表在报表开发中非常常见,如常见的同期比.环比计算.移动平均值计算等.这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表实现并不轻松.润乾报表在实现时需要借助层次坐标和位移坐标,辅以条件表达式和"$"运算符完成.下面通过一个实例说明润乾报表的实现方式. 报表需求 根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比.报表样式如下: 这里应该注意的是比去年同期是指与去年同月份的比值,无对应月份则为空:要求只显示本年数据. 润