第九章 BIRT嵌套报表以及参数的传递
来源:互联网 发布:智能电视ktv软件 编辑:程序博客网 时间:2024/06/05 10:41
9.1 表内的嵌套
我们新建报表MasterDetailOneReport_A.rptdesign,空白模板,示例数据库,sql选择查询数据集。
新建数据集Orders:
select *
from orders
新建数据集SingleOrderDetail
select *
from orderdetails
where ordernumber = ?
数据集参数默认值为10101。
新建静态文本报表参数ordernumber,默认值:10101
在报表编辑器中插入2行5列的表,在第一行分别拖入Orders数据集中如下的数据列:
合并第二行的前四列,在第五列中插入一个1行5列的表,分别拖入SingleOrderDetail的数据集:
作适当的美化,布局,最终如下:
选中表,编辑数据集绑定:
绑定数据集SingleOrderDetail参数至row["ORDERNUMBER"]
这样就完成了一个内嵌的报表,预览如下:
9.2 表外的嵌套
同上例子,我们新建报表MasterDetailOneReport_B.rptdesign,空白模板,示例数据库,sql选择查询数据集。
新建数据集Orders:
select *
from orders
新建数据集SingleOrderDetail
select *
from orderdetails
where ordernumber = ?
数据集参数默认值为10101。
新建静态文本报表参数ordernumber,默认值:10101
我们插入两个2行1列的网格:
第一个网格,第一行插入文本:
这个案例用于描述怎么从一个数据项,外嵌产生另一个报表,传入一个参数,方法如下:
reportContext.setGlobalVariable("ordernum", dataSetRow["ORDERNUMBER"]);
dataSetRow["ORDERNUMBER"]
第二行插入一个1行5列的表,分别拖入Orders数据集的数据列:
其中ordernumber数据项用的表达式生成器,输入
reportContext.setGlobalVariable("ordernum", dataSetRow["ORDERNUMBER"]);
dataSetRow["ORDERNUMBER"]
第二个网格,第一行输入文本:
这个表格用于从环境标量中获取参数,用于表的数据集的参数,方法如下:
reportContext.getGlobalVariable("ordernum");
第二行插入1行5列的表,分别拖入SingleOrderDetail数据集的数据列:
编辑表的绑定:
输入表达式生成器文本:reportContext.getGlobalVariable("ordernum");
预览,效果如下:
9.3 参数的传递
一、第一种方法:
1、在jsp的URL里面添加所要传递的参数:
http://localhost:8080/birt-web/frameset?__report=test.rptdesign&sample=parameter
2、在报表当中添加同名报表参数sample,数据集带有占位符参数,然后可以添加data set参数关联到报表参数sample,这样data set参数就可以得到从jsp页面传递过来的参数从而作为查询条件。
二、第二种方法:
1、在jsp的URL里面添加所要传递的参数:
http://localhost:8080/birt-web/frameset?__report=test.rptdesign&id=3
2、在报表当中添加同名报表参数id
3、点击 Date Sets,在点中间的"Script"标签,选择BeforeOpen,写上
var id = params["id"].value;
if(id!=null){
this.queryText=this.queryText+" where id='"+id+"'";
}
三、第三种方法:
BIRT VIEWER本身虽然支持在里面书写java code,但不宜用于request setParameter,getParameter,或者session的方法,但提供了一个接口在jsp或者servelet中通过AppContextKey和AppContextValue键值对来传递,BIRT viewer能自动识别出。
Map<String, String> map=new HashMap<String, String>();
String name=request.getParameter("name");
String stime =request.getParameter("stime ");
String age=request.getParameter("age");
String sex=request.getParameter("sex");
HashMap appContext = new HashMap( );
appContext.put("stime",stime);
appContext.put("name",name);
appContext.put("age",age);
appContext.put("sex",sex);
request.getSession().setAttribute( "AppContextKey","numberWhere");
request.getSession().setAttribute("AppContextValue", appContext);
request.getRequestDispatcher( "/frameset?__report=testreport.rptdesign").forward(request,response);
在report中用beforeOpen中取出即可:
var name=numberWhere.get("name");
var age=numberWhere.get("age");
var sex=numberWhere.get("sex");
说明:前两种,当传递中文参数的时候,可能会出现字符串长度超限,或者传递了encode之后的代码,这个时候需要进行如下的处理unescape(params["OrderNumber"].value):
如果参数中被添加了括号,则需要更复杂的处理,比如去掉前后方括号:
BirtStr.trim(unescape(params["trandate"].value).replace("[","").replace("]",""))
至于脚本的书写,后文再详细介绍。
- 第九章 BIRT嵌套报表以及参数的传递
- 第九章 BIRT嵌套报表以及参数的传递 .
- 第九章 BIRT嵌套报表以及参数的传递 .
- 第九章 BIRT嵌套报表以及参数的传递
- Birt 报表参数的使用
- birt报表引擎-将参数传递到数据集的查询条件
- Ireport子报表的实现以及参数的传递
- Birt报表的学习计划
- 嵌套类的参数传递
- birt关于在url传递中文参数的解决方法
- WEB程序和BIRT间的参数传递问题
- 被低估的BIRT报表(六):报表参数与模糊查询
- Birt API 实现动态参数列报表
- birt报表从session中取参数
- java 代码设置birt报表参数
- Birt API 实现动态参数列报表
- BIRT:基于 Eclipse 的报表
- BIRT:基于 Eclipse 的报表
- 邮件的发送
- 各种经典博客收藏
- 系统调用跟我学(1)
- 216个Web安全颜色
- Hadoop Hive与Hbase整合
- 第九章 BIRT嵌套报表以及参数的传递
- IOS学习笔记40——苹果推送机制APNs(一)
- 用wxformbuilder设计wxwidgets GUI 界面
- Rotated array related program. 和旋转数组相关的几个程序
- 系统调用跟我学(2)
- Linux 入门命令
- [SQL-码农]SQL server 无法打开数据库 'msdb'。恢复操作已将该数据库标记为 SUSPECT
- 金正恩给朝儿童发糖果庆生
- MongoDB 入门教程