`

利用Java写birt的eventhandler

阅读更多

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

 

0
0
分享到:
评论
2 楼 wlbaixue 2010-03-11  
把你的BaseReportModel类也贴上呗,呵呵
1 楼 gs80140 2010-01-11  
感谢楼主的分享....

相关推荐

    java报表 BIRT报表学习 指南

    BIRT 在Eclipse中以透视图(perspective )的方式显示。 使用Eclipse主菜单的(Window )选项打开它。 选择“打开透视图”(Open Perspective), 然后是“报表设计”(Report Design)。 如果“报表设计”(Report ...

    java Web项目集成Birt4.4.2.doc

    java web项目集成Birt4.4.2 非maven 项目

    eclipse 自带 java 的 birt报表

    初学者的视频,eclipse自带开发birt的报表开发,用于报表开发的学习,可以尽快了解birt报表的开发,快速设计,java开发初学者的资源

    在 Eclipse 中用 Java 实现BIRT的事件处理

    百灵报表(BIRT)是一个非常实用的开源报表工具,它不仅能满足商业智能领域报表设计的一般需求,还可以通过与 Java 语言相结合,来实现一些更为丰富的个性化报表样式。

    Birt报表开发JAVA

    它主要是用在基于Java与J2EE的Web应用程序上。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。BIRT同时也提供一个图形报表制作引擎。 使用BIRT,能制作出多样化的报表到你的...

    birt报表,很好的java报表插件

    1.BIRT 目录下为BIRT报表学习指南 2.My Reports 目录下为根据这个学习指南完成的报表项目

    Java birt和echarts整合

    Java birt和echarts整合。 该demo整合echarts和birt,下载后,可将报表文件里面echarts的路径改成你的路径,然后直接运行就能看到效果 birt echarts

    BIRT开发手册

    BIRT(Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 JavaEE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署...

    java做报表(birt).rar

    java做报表(birt).rarjava做报表(birt).rar

    javaWeb调用Birt的api直接生成文档,不使用它的展示

    javaWeb调用Birt的api直接生成文档,不使用它的展示,因为它的展示耗内存,给出实现代码文档,保证速度没有问题,并且可以解决birt的动态文档的名称,多个文档(批量下载),生成zip等一系列问题

    birt调用java

    讲述了Birt报表调用java类的具体操作

    Java 报表工具BIRT完全入门初级版(中文PDF版)

    Java 报表工具BIRT完全入门初级版 ●高清中文PDF版 ●清晰易懂,图文并茂,内容丰富 ●入门必备,必有收获 ●内附插件下载地址和说明(readme.txt) ●请用winrar3.x或以上版本解压后使用 ●经诺顿检测无毒无广告

    birt的学习资料,使用html格式编辑!

    包括全面的birt制作讲解,以及脚本使用! 对于学习birt的朋友不可错过!

    birt api 帮助文档

    birt api 帮助文档。 对于使用birt开发报表的开发人员绝对有帮助。

    Java Web项目集成开源报表工具BIRT

    以 Birt4.4.2 为例,手把手教你如何将 Birt 开源报表 集成到已有JavaWeb 项目当中。

    Birt Java 整合开发详解

    如何构建Birt应用程序详解 从官方教材上翻译的,比较详细。

    BIRT报表开发手册

    BIRT Business Intelligence and Reporting Tools 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统 特别之处在于它是以 Java 和 JavaEE 为基础 BIRT 有两个主要组件:基于 Eclipse 的报表设计器 以及部署到应用...

    Birt XML详解

    关于Birt报表xml数据源的配置以及报表配置

    论文研究-基于BIRT的报表开发 .pdf

    基于BIRT的报表开发,夏俊,邹仕洪,BIRT是一个基于Eclipse 的开放源代码报表系统,主要用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个基于Eclipse的报表设计��

    BIRT 3.7 Report Design

    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 ...

Global site tag (gtag.js) - Google Analytics