birt的各种对象,包括数据源(datasource)、数据集(dataset)及各种报表元素(report item)都可以添加eventhandler对象,实现对这些对象的事件的响应。eventhandler实现的方式有两种:JavaScript语言和Java语言。由于Java的可调试性,开发起来相对方便一些,我这里利用Java开发了dataset的一个eventhandler:
mport java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.birt.report.engine.api.script.IUpdatableDataSetRow;
import org.eclipse.birt.report.engine.api.script.ScriptException;
import org.eclipse.birt.report.engine.api.script.eventadapter.ScriptedDataSetEventAdapter;
import org.eclipse.birt.report.engine.api.script.instance.IDataSetInstance;
import com.tkxing.htmlparser.buss.report.model.BaseReportModel;
import com.tkxing.htmlparser.buss.report.model.SingleStockDataReportModel;
public class ScriptedDataSetEventHandler extends ScriptedDataSetEventAdapter {
Log log = LogFactory.getLog(ScriptedDataSetEventHandler.class);
private int num = 0;
private int total = 0;
private List dataList;
@Override
public void open(IDataSetInstance dataSet) {
// TODO Auto-generated method stub
super.open(dataSet);
BaseReportModel reportModel = new SingleStockDataReportModel();
dataList = (List) reportModel.getModel();
this.total = dataList.size();
}
@Override
public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) {
// TODO Auto-generated method stub
try {
if (num >= total) {
return false;
}
String[] dataRow = (String[]) this.dataList.get(num);
for (int i = 1; i <= dataRow.length; i++) {
row.setColumnValue(i, dataRow[i - 1]);
System.out.println(i + " = " + dataRow[i - 1]);
}
num++;
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
// return super.fetch(dataSet, row);
}
}
数据模式reportModel代码如下:
import java.util.ArrayList;
import java.util.List;
public class SingleStockDataReportModel extends BaseReportModel {
private List dataList;
public SingleStockDataReportModel() {
// TODO Auto-generated constructor stub
this.dataList = new ArrayList();
for(int i=0;i<10;i++)
{
String []rowData = new String[3];
for(int j=0;j<rowData.length;j++)
{
rowData[j] = new String(new Integer(i*10+j).toString());
}
this.dataList.add(rowData);
}
}
public List getDataList() {
/*
this.dataList = new ArrayList();
for(int i=0;i<10;i++)
{
String []rowData = new String[3];
for(int j=0;j<rowData.length;j++)
{
rowData[j] = new String(new Integer(i*10+j).toString());
}
dataList.add(rowData);
}
*/
return (dataList);
}
public void setDataList(List dataList) {
this.dataList = dataList;
}
@Override
public Object getModel() {
// TODO Auto-generated method stub
return this.dataList;
}
}
利用birt的ReportEngine输出报表或者通过URL访问报表,在相应的位置设置断点,就可以实现对eventhandler的调试了。
测试的report.rptdesign如下:
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.15" id="1">
<data-sources>
<script-data-source name="ScriptedDataSource" id="5"/>
</data-sources>
<data-sets>
<script-data-set name="ScriptedDataSet" id="6">
<property name="eventHandlerClass">com.tkxing.htmlparser.presentation.report.ScriptedDataSetEventHandler</property>
<list-property name="resultSetHints">
<structure>
<property name="position">1</property>
<property name="name">rs1</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">rs2</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">3</property>
<property name="name">rs3</property>
<property name="dataType">string</property>
</structure>
</list-property>
<list-property name="columnHints">
<structure>
<property name="columnName">rs1</property>
</structure>
<structure>
<property name="columnName">rs2</property>
</structure>
<structure>
<property name="columnName">rs3</property>
</structure>
</list-property>
<property name="dataSource">ScriptedDataSource</property>
</script-data-set>
</data-sets>
<styles>
<style name="crosstab" id="2">
<property name="borderBottomColor">#CCCCCC</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">1pt</property>
<property name="borderLeftColor">#CCCCCC</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">1pt</property>
<property name="borderRightColor">#CCCCCC</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">1pt</property>
<property name="borderTopColor">#CCCCCC</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">1pt</property>
</style>
<style name="crosstab-cell" id="3">
<property name="borderBottomColor">#CCCCCC</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">1pt</property>
<property name="borderLeftColor">#CCCCCC</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">1pt</property>
<property name="borderRightColor">#CCCCCC</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">1pt</property>
<property name="borderTopColor">#CCCCCC</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">1pt</property>
</style>
</styles>
<page-setup>
<simple-master-page name="Page Master" id="4"/>
</page-setup>
<body>
<table name="table" id="7">
<property name="width">100%</property>
<property name="dataSet">ScriptedDataSet</property>
<list-property name="boundDataColumns">
<structure>
<property name="name">rs1</property>
<expression name="expression">dataSetRow["rs1"]</expression>
</structure>
<structure>
<property name="name">rs2</property>
<expression name="expression">dataSetRow["rs2"]</expression>
</structure>
<structure>
<property name="name">rs3</property>
<expression name="expression">dataSetRow["rs3"]</expression>
</structure>
</list-property>
<column id="26"/>
<column id="27"/>
<column id="28"/>
<header>
<row id="8">
<cell id="9">
<label name="rs1" id="10">
<text-property name="text">rs1</text-property>
</label>
</cell>
<cell id="11">
<label name="rs2" id="12">
<text-property name="text">rs2</text-property>
</label>
</cell>
<cell id="13">
<label name="rs3" id="14">
<text-property name="text">rs3</text-property>
</label>
</cell>
</row>
</header>
<detail>
<row id="15">
<cell id="16">
<data name="data_rs1" id="17">
<property name="resultSetColumn">rs1</property>
</data>
</cell>
<cell id="18">
<data name="data_rs2" id="19">
<property name="resultSetColumn">rs2</property>
</data>
</cell>
<cell id="20">
<data name="data_rs3" id="21">
<property name="resultSetColumn">rs3</property>
</data>
</cell>
</row>
</detail>
<footer>
<row id="22">
<cell id="23"/>
<cell id="24"/>
<cell id="25"/>
</row>
</footer>
</table>
</body>
</report>
测试的结果如图:
rs1 rs2 rs3
0 1 2
10 11 12
20 21 22
分享到:
相关推荐
BIRT 在Eclipse中以透视图(perspective )的方式显示。 使用Eclipse主菜单的(Window )选项打开它。 选择“打开透视图”(Open Perspective), 然后是“报表设计”(Report Design)。 如果“报表设计”(Report ...
java web项目集成Birt4.4.2 非maven 项目
初学者的视频,eclipse自带开发birt的报表开发,用于报表开发的学习,可以尽快了解birt报表的开发,快速设计,java开发初学者的资源
百灵报表(BIRT)是一个非常实用的开源报表工具,它不仅能满足商业智能领域报表设计的一般需求,还可以通过与 Java 语言相结合,来实现一些更为丰富的个性化报表样式。
它主要是用在基于Java与J2EE的Web应用程序上。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。BIRT同时也提供一个图形报表制作引擎。 使用BIRT,能制作出多样化的报表到你的...
1.BIRT 目录下为BIRT报表学习指南 2.My Reports 目录下为根据这个学习指南完成的报表项目
Java birt和echarts整合。 该demo整合echarts和birt,下载后,可将报表文件里面echarts的路径改成你的路径,然后直接运行就能看到效果 birt echarts
BIRT(Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 JavaEE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署...
java做报表(birt).rarjava做报表(birt).rar
javaWeb调用Birt的api直接生成文档,不使用它的展示,因为它的展示耗内存,给出实现代码文档,保证速度没有问题,并且可以解决birt的动态文档的名称,多个文档(批量下载),生成zip等一系列问题
讲述了Birt报表调用java类的具体操作
Java 报表工具BIRT完全入门初级版 ●高清中文PDF版 ●清晰易懂,图文并茂,内容丰富 ●入门必备,必有收获 ●内附插件下载地址和说明(readme.txt) ●请用winrar3.x或以上版本解压后使用 ●经诺顿检测无毒无广告
包括全面的birt制作讲解,以及脚本使用! 对于学习birt的朋友不可错过!
birt api 帮助文档。 对于使用birt开发报表的开发人员绝对有帮助。
以 Birt4.4.2 为例,手把手教你如何将 Birt 开源报表 集成到已有JavaWeb 项目当中。
如何构建Birt应用程序详解 从官方教材上翻译的,比较详细。
BIRT Business Intelligence and Reporting Tools 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统 特别之处在于它是以 Java 和 JavaEE 为基础 BIRT 有两个主要组件:基于 Eclipse 的报表设计器 以及部署到应用...
关于Birt报表xml数据源的配置以及报表配置
基于BIRT的报表开发,夏俊,邹仕洪,BIRT是一个基于Eclipse 的开放源代码报表系统,主要用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个基于Eclipse的报表设计��
Eclipse-based reporting system that integrates with your Java EE application to produce compelling reports. BIRT is the only top-level Eclipse project focused on business intelligence. BIRT provides ...