实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景。常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改数据源来满足实际需要。

下面通过一个使用JAVA程序修改集算报表数据源SQL的例子说明使用过程。

编辑报表模板:

由于不同数据源的字段不同,因此这里使用动态表达式ds1.fname()获取字段名,ds1.field()获取字段值。此外,第一行和第一列为辅助行列,设置其隐藏。

编写代码:

1.读入报表

String reportPath = request.getRealPath("/reportFiles/demo.rpx");

ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);

2.更改报表数据源

DataSetMetaData dsmd=new DataSetMetaData();   //构造数据集元数据

SQLDataSetConfig sdc=new SQLDataSetConfig();   //构造数据集定义

sdc.setName("ds1");   //设置数据集名

Stringsql = "";

//根据不同参数,为报表设置不同数据源SQL,实际使用中可以从配置文件中读取

switch(Integer.parseInt(type)){

case 1:

sql="select * from EMPLOYEE";

break;

case 2:

sql="select * from PERFORMANCE";

break;

default:sql="select * from CUSTOMER";

}

sdc.setSQL(sql);    //设置 sql语句

dsmd.addDataSetConfig(sdc);   //把数据集定义添加到数据集元数据

rd.setDataSetMetaData(dsmd);   //把数据集元数据赋给ReportDefine

3.      将ReportDefine存入request后使用defineBean方式发布报表

rd.setDataSetMetaData(dsmd);   //把数据集元数据赋给ReportDefine

request.setAttribute("reportDefine",rd);

<report:html name="report1"

srcType="defineBean"

beanName="reportDefine"

exceptionPage="/reportJsp/jsp/myError.jsp"

/>

实现效果:

当type=1时显示employee表数据:

当type=2时显示PERFORMANCE表数据:

【附】changeds.jsp完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib uri="/WEB-INF/raqsoftReport.tld"prefix="report" %>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.raqsoft.report.usermodel.Context"%>
<%@ page import="com.raqsoft.report.model.ReportDefine"%>
<%@ page import="com.raqsoft.report.util.ReportUtils"%>
<%@page import="com.raqsoft.report.usermodel.SQLDataSetConfig"%>
<%@page import="com.raqsoft.report.usermodel.DataSetMetaData"%>
  
  
<html>
<link type="text/css"href="css/style.css" rel="stylesheet"/>
<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<%
    request.setCharacterEncoding("GBK");
    String type = request.getParameter("type");
    String reportPath = request.getRealPath("/WEB-INF/reportFiles/test.rpx"); 
    ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath); 
    DataSetMetaData dsmd=new DataSetMetaData();   
    SQLDataSetConfig sdc=new SQLDataSetConfig();   
    sdc.setName("ds1");   
    String sql = "";
    switch(Integer.parseInt(type)){
       case 1:
           sql="select * from EMPLOYEE";
           break;
       case 2:
           sql="select * from PERFORMANCE";
           break;
       default:sql="select * from CUSTOMER";
    }
    sdc.setSQL(sql);   
    dsmd.addDataSetConfig(sdc);   
    rd.setDataSetMetaData(dsmd);  
   String rptName = "RPT_"+Double.toString(Math.random());
    request.setAttribute(rptName,rd);
     
%>  
<jsp:include page="toolbar.jsp"flush="false" />
<table id="rpt"align="center" width=100% height=100%>
    <tr><td align=center valign=top height=100%>
       <report:html name="report1" 
           srcType="defineBean"
            beanName="<%=rptName%>"
  contextName="myContext"
           exceptionPage="/reportJsp/jsp/myError.jsp"
  /> 
    </td></tr>
</table>
  
</body>
</html>


润乾集算报表用Java动态修改报表数据源相关推荐

  1. 集算报表用Java动态修改报表数据源

    实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景.常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改 ...

  2. 润乾集算报表多样性数据源之动态SQL传递

    大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一 ...

  3. 润乾集算报表优化应用结构之混合数据源

    在报表项目中,报表源数据常常会来自于多种异构数据源.例如:关系型数据库(oracle.db2.mysql),nosql数据库(mongodb),http数据源,hadoop(hive.hdfs)甚至是 ...

  4. 润乾集算报表呈现输出之表头重复

    在报表展现或打印时为了便于查看数据,往往希望报表头在每页中重复出现.润乾集算报表除了可以实现每页均重复同样的表头外,还可以实现分组表头重复,即当分组出现在多页时显示同一分组表头.下面分别来看一下在集算 ...

  5. 润乾集算报表实现多数据集关联的示例

    多数据源混合的场景在报表开发中非常常见,如:数据来源于多个数据库.数据库和文件混合的场景.传统报表工具在处理这种问题时往往采用两种方式:1将数据统一到一个数据库中,来避免跨库查询或数据库文件混合查询: ...

  6. 润乾集算器与帆软报表集成 (直接通过 jdbc,类 DB 存储过程方式调用)

    集算器概述 集算器作为一种大数据计算工具,不仅在润乾产品体系中能发挥它的巨大作用,在其他绝大部分数据处理.数据计算领域的项目.产品中,也都有他助力计算的身影.比如传统的报表工具,报表项目中,80% 的 ...

  7. 润乾集算报表提升性能之可控缓存

    使用缓存能够提升报表性能是不争的事实,一般高端报表工具都会提供报表缓存的功能,用于将整个报表计算结果缓存到文件系统中,以便用户在下次訪问同參数报表时能够高速读取缓存结果进行报表展现,集算报表也具有这样 ...

  8. 报表没完没了怎么办? | 润乾集算器提效报表开发

    完整资料下载: 报表没完没了怎么办?| 报表提效方案

  9. 集算器协助Java处理结构化文本之条件过滤

    直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1.文件不是数据库,不能用SQL访问.当过滤条件变化时需要改写代码.如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值 ...

最新文章

  1. 丢失msvcr120d.dll、msvcr120.dll、msvcp120d.dll、msvcp120.dll问题解决方法
  2. Verilog 中输入输出信号的类型?
  3. 想通关「限流」?只要这一篇
  4. Agent admitted failure to sign using the key
  5. 用C语言扩展lua模块(入门)
  6. I2S和PCM区别(二十)
  7. 批量下载CSS中的图片
  8. oracle startup open ora 03113,解决oracle数据库ORA-03113问题
  9. 基于单片机的电热水器控制系统设计
  10. ISSCC 2017论文导读 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine
  11. fa常用脚本,资产类表的字段详解
  12. 微信小程序:热门表情包+头像+壁纸自动采集多分类微信小程序
  13. 机器学习之recall、precision、accuracy
  14. linux shell tr命令,shell脚本中的tr用法
  15. gawk 命令(转载:http://blog.sina.com.cn/s/blog_6238358c01012h1f.html)
  16. javascript var变量长度问题 --笔记
  17. CentOS 7 使用外部邮箱 发送邮件和附件—mail,mailx
  18. 卷积神经网络-猫狗识别(附源码)
  19. BCG网格控件单独设置颜色
  20. 神话还是谎言! 真实的GT-3是这样的!道翰天琼认知智能API接口平台为您揭秘。

热门文章

  1. 【小程序】使用WXSS编写样式介绍以及与CSS的区别
  2. (二十二)unity Shader——————非真实感渲染:上篇(卡通风格的渲染)
  3. 在 VUE中,动态加载JS文件
  4. 什么是单点登录?单点登录的三种实现方式
  5. BMI是根据体重测量健康的方式。通过以千克为单位的体重除以以米为单位的身高的平方计算出BMI。
  6. vue的mapstate和mapgetter
  7. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 栈内存创建 )
  8. linux防火墙状态查看/打开/关闭及端口/打开/关闭操作记录
  9. 梯度爆炸(Exploding Gradients)
  10. 产品经理学习资料——错题解析