快逸报表多数据源解决办法以及项目多数据源切换方法

数据源是报表中数据的来源。在集智数据平台报表系统中报表设计器中一个数据集只能设置一个数据源。如下面的需求该如何实现呢?一个公司在全国各个省份都有分公司,各个分公司的数据存放在各自的数据库中,但是表结构是一样的。总公司要用报表系统统计各个分公司的数据,因为设计器中每个数据集只能设置一个数据源,所以要为每个省份做一套报表,这样工作量太大了。简单的方法就是做一套报表,动态的设置数据集的数据源查询各个省份的数据。比如查询北京分公司的数据时就把数据集的数据源设置为北京的数据源;查询山东的数据时就把数据集的数据源设置为山东的数据源。下面就介绍一下如何在jsp中动态的设置数据集的数据源。

大致思路:

集智数据平台报表系统提供的API读取报表得到ReportDefine对象,再得到报表中数据集的数据源,然后遍历数据集,分别设置每个数据集的数据源,再把元数据设置到ReportDefine对象中,最后用Bean的方式发布报表。

这个过程只牵扯到jsp的写法,下面就列出jsp的内容

<%@ page contentType="text/html;charset=GBK" %>

<%@ taglib uri="/WEB-INF/runqianReport4.tld" prefix="report" %>

<%@ page import="java.util.*"%>

<%@ page import="com.runqian.report4.model.ReportDefine"%>

<%@ page import="com.runqian.report4.usermodel.DataSetMetaData"%>

<%@ page import="com.runqian.report4.usermodel.DataSetConfig"%>

<%@ page import="com.runqian.report4.util.ReportUtils"%>

<html>

<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>

<%

request.setCharacterEncoding( "GBK" );

String report = request.getParameter( "raq" );

//保证报表名称的完整性

int iTmp = 0;

if( (iTmp = report.lastIndexOf(".raq")) <= 0 ){

report = report + ".raq";

iTmp = 0;

}

 

//得到省份的简称

String province = request.getParameter("province");

//由省份的简称拼成该省份的数据源名(数据源名字根据自己的情况定)

String dataSource = province+"_DataSource";

 

//动态设置报表中数据集的数据源

String reportPath = request.getRealPath("/reportFiles/"+report);

ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);//读取报表

DataSetMetaData dsmd = rd.getDataSetMetaData(); //取数据集元数据

for(int i=0; i<dsmd.getDataSetConfigCount(); i++){ //遍历数据集

DataSetConfig dsc = dsmd.getDataSetConfig( i ); //数据集配置 数据集的抽象定义

dsc.setDataSourceName( dataSource );//设置数据集引用到的数据源名称

dsmd.setDataSetConfig( i, dsc); //修改数据集配置

}

rd.setDataSetMetaData(dsmd); //设置数据集元数据

String rptName = "RPT_"+Double.toString(Math.random());

request.setAttribute(rptName,rd);//把ReportDefine对象在request中保存

 

//获得参数

StringBuffer param = new StringBuffer();

Enumeration paramNames = request.getParameterNames();

if(paramNames!=null){

while(paramNames.hasMoreElements()){

String paramName = (String) paramNames.nextElement();

String paramValue=request.getParameter(paramName);

if(paramValue!=null){

//把参数拼成name=value;name2=value2;.....的形式

param.append(paramName).append("=").append(paramValue).append(";");

}

}

}

 

%>

<!-- 发布报表 -->

<table align=center>

<tr><td>

<report:html name="report1"

funcBarLocation="top"

needPageMark="no"

generateParamForm="no"

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

exceptionPage="/reportJsp/myError2.jsp"

srcType="defineBean"

beanName="<%=rptName%>"

/>

</td></tr>

</table>

</body>

</html>

以后遇到类似的问题就可以用上面的方法解决了。

更多了解各种复杂问题的处理,可以参考:数据统一访问授权控制方便易用地管理全部报表和数据资源

--------------------------------------------------------------------------------

1、用户选择库(spring.xml中配置两个数据源,其中一个为默认)后 将数据库key  如放入 session
2、过滤器 拦截用户请求
2.1 如果session中没有key  则将用户重定向到 选择库界面 选中
2.2 否则绑定key到ThreadLocal变量
2.3 请求结束 删除ThreadLocal
3、AbstractRoutingDataSource  根据ThreadLocal选择库

转载于:https://www.cnblogs.com/kaka-bing/archive/2013/04/28/3048623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
报表使用 在网上找个很多资料,也按着资料去尝试了多次,最终都以失败告终,也发现大部分文章都是拷贝粘贴来的,真不知道那些作者怎么想的,为什么不亲身测试后再贴到自己博客里呢,好了,废话少说,经过那么多次失败,最终亲测成功,特别整理发表,为那些刚接触报表的同胞们省去不必要浪费的时间. 一. 下载并安装报表软件工具 下载安装不需要过多赘述,跟安装日常软件没什么区别,值得提到的是必须先安装好环境, 先安装 JDK,还有Tomcat 相关的配置步骤网上很多资料,相信不会难倒读者.笔者使用报表版本为4.2.20,JDK1.5,Tomcat 6.0. 二. 报表设计 (1)关于授权 打开报表设计器,如果提示授权的话,你可以到安装目录下找到,笔者安装在了C盘, 所以目录如下C:\ProgramFiles\quieeReport\webapps\quiee\WEB-INF\classes 可以看到相关的授权. (2)配置数据 打开设计器之后, 安装后打开报表设计器,选择配置-数据-新建-关系数据库,开始配置数据,笔者用的是mysql,以mysql举例: 其中关键位置如下: 数据名称要记住,因为在部署的时候,配置数据库时名字要和这保持一致.数据库类型选择相应的类型,数据URL默认不是本机,需要修改,当然如果在其他机器上需要填写相应的IP地址,后面填写相应的数据库名字.下面填写数据用户名和密码.完成之后回到数据窗口,选择刚创建的数据,点击连接,数据变色说明连接成功。.关闭窗口. (3)配置数据集创建报表 选择文件-新建报表,打开新建报表向导,填写数据,下一步 注意数据的名字也要保持一致,点击 下一步,按着提示进行下一步就可以, 最后点击生成网格报表,报表就生成了. 报表的表头可以修改为中文 完成之后,启动报表的服务,将报表保存发布. 四个图标左边第三个是进行发布的,点击会提示进行保存报表,按提示进行保存.之后可以点击IE图标进行预览. 三. 在J2EE中部署报表 在已有的 J2EE 项目中使用刚才创建的报表,需要如下步骤: (1) 导入 jar 包和相关文件 (a)将报表安装目录\quieeReport\webapps\quiee\WEB-INF\lib中的 jar 包导入项目,并且导入所需要的mysql驱动包. (b)将\quieeReport\webapps\quiee\WEB-INF 目录下的 reportConfig.xml,runqianReport4.tld,runqianReportLog.properties 复制到项目的 WEB-INF 目录 (c)将\quieeReport\webapps\quiee 目录下的 j2re-1_4_1-windows-i586-i.exe,Myerror.jsp,myInputError.jsp, runqianReport4Applet.jar 和 images 目录(用于工具按 钮的图片可自选)复制到项目的 WebRoot 目录下。 (2) 修改web.xml文件 在 web.xml 文件中增加如下内容: <servlet> <servlet-name>SetContextServlet</servlet-name> <servlet-class>com.runqian.util.webutil.SetContextServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>reportServlet</servlet-name> <servlet-class>com.runqian.report4.view.ReportServlet</servlet-class> <init-param>     <param-name>configFile</param-name> <param-value>/WEB-INF/reportConfig.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>reportServlet</servlet-name> <url-pattern>/reportServlet</url-pattern> </servlet-mapping> (3) 创建jsp文件 可以直接使用\quieeReport\webapps\quiee\reportJsp目录下的 showReport.jsp和 toolbar.jsp 文件。其中 showReport.jsp 用于显示报表,toolbar.jsp 用于显示工具按钮。 (4) 在项目中导入报表文件 在上面发布报表的路径下找到报表文件,将生成的.raq 报表文件导入项目。 (5) 添加授权文件 复制quieeReport\webapps\quiee\WEB-INF\classes目录下的授权文件,根据使用的操作系统进行选择, 到项目的 WebRoot 目录, 可能需要修改 reportConfig.xml 文件中的部分内容. 如果你用的不是window系统,更改成与您对应的授权的文件.特别注意的是”/”反斜杠符号 ,拷贝过来的文件里原本是没有的 (6) 修改reportConfig.xml文件 在其中添加如下配置内容,主要用于数据库的连接,需要主要的地方是name参数,需要跟报表文件的数据名称一致. <!-- 配置加载数据时候的datasource --> <jdbc-ds-configs> <jdbc-ds-config> <name>mysql</name> <db-type>mysql</db-type> <connection-url> jdbc:mysql://localhost:3306/test </connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>123</password> <db-charset>gbk</db-charset> <client-charset>gbk</client-charset> <extend-properties></extend-properties> </jdbc-ds-config> </jdbc-ds-configs> 注意的地方: 这个地方一定要和制作报表时候的数据名字一致, (7) 访问报表 发布上述 J2EE 项目,启动 tomcat,访问报表的 url 地址 为: 项目名称/reportJsp/showReport.jsp?raq=/报表名称.raq 就可以看到我之前做的报表,这个时候很多人会发现出现找不到报表配置文件的错误,而且这个问题也困扰了我很久,网上找了资料,按其操作并没有解决,经过又查找资料,终于找到问题根,在于jar包的问题,其中一个很重要的jar包---webutil.jar,报表自身带的jar是不能用的,本人所用版本这个jar包为3.6kb,替换成一个网上找打一个新的4.05kb大小的webutil.jar后,问题解决了.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值