• 润乾报表 动态改变数据源


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

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

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

     

     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

  • 相关阅读:
    pom.xml配置
    Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
    jar文件运行打断点
    prim算法
    Kruscal algorithm
    递归程序设计思想(看图思考2小时)
    广义表的实现(法二)
    广义表的实现
    有错误的地宫寻宝问题
    写一个数的所有加法算式
  • 原文地址:https://www.cnblogs.com/personal-blog/p/9343105.html
Copyright © 2020-2023  润新知