`
kobe学java
  • 浏览: 258444 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

利用Java写birt的eventhandler

    博客分类:
  • java
 
阅读更多

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

 

 

分享到:
评论

相关推荐

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

    结合Eclipse的强大开发环境,Java开发者可以充分利用现有的技能库,为BIRT报表注入更多创新和定制化功能。通过不断学习和实践,你可以熟练掌握在Eclipse中使用Java实现BIRT的事件处理,为你的报表应用增添无限可能。

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

    Java Web项目集成开源报表工具BIRT 本文将指导读者如何将BIRT开源报表工具集成到已有的Java Web项目中,以Birt4.4.2为例。下面是具体的步骤和知识点: 步骤1:下载BIRT 首先,读者需要下载BIRT的最新版本。在BIRT...

    java Web项目集成Birt4.4.2.doc

    Java Web项目集成Birt4.4.2是一个过程,用于将Birt开源报表系统整合到非Maven构建的Java Web应用程序中,以便在项目中利用Birt的强大报表生成能力。以下是一个详细的步骤指南: 1. **下载Birt4.4.2**: 首先,访问...

    java报表 BIRT报表学习 指南

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

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

    BIRT(Business Intelligence and Reporting Tools)是开源的Java...通过学习这个压缩包的内容,开发者不仅可以掌握BIRT的基本用法,还能了解到如何在实际项目中有效利用BIRT来提升数据分析和报告呈现的质量和效率。

    Java birt和echarts整合

    通过以上步骤,Java开发者可以利用BIRT和ECharts构建出具有高级数据可视化的报表系统。提供的"Java Birt和echarts整合.pdf"文档可能包含具体的整合步骤、示例代码或配置细节,对于理解和实践这个过程会有很大帮助。...

    eclipse 自带 java 的 birt报表

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

    java做报表(birt).rar

    Java做报表工具BIRT(Business Intelligence and Reporting Tools)是一个开源的报表系统,它为开发者提供了...通过掌握以上知识点,你将能够有效地利用Java和BIRT来创建高质量的报表,满足业务分析和决策支持的需求。

    权威java开源报表中文教程(百灵报表birt)

    百灵报表(BIRT)是一款基于Java的开源报表系统,由Eclipse基金会开发并维护,广泛应用于企业级的报表设计和生成。它提供了一个强大的、灵活的报告设计环境,能够生成各种复杂的数据可视化效果,包括列表、交叉表、...

    Birt报表开发JAVA

    BIRT报表开发是基于Java技术的一种强大的开源报表解决方案,主要应用于Eclipse平台,为J2EE的Web应用程序提供了全面的商业智能和报告工具。BIRT由两部分核心组件构成:一是Eclipse集成的报表设计器,允许开发者通过...

    BIRT开发手册

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

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

    BIRT(Business Intelligence and Reporting Tools)是开源的报表系统,由Eclipse基金会维护,主要用于生成动态的...通过系统地学习和实践,你将能够利用BIRT强大的功能,为你的企业或项目创建出专业、高效的报表系统。

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

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

    Birt Java 整合开发详解

    "Birt Java 整合开发详解" 本文将详细介绍如何构建一个 Birt 报表应用程序,从官方教材上翻译的,比较详细。 一、创建报表引擎 REPORT ENGINE 是 ReportEngine 类的一个实例,是任何报表应用程序的关键部分。首先...

    birt xml数据源

    BIRT是由Eclipse基金会维护的一个开源项目,旨在为Java和Web应用程序提供报表设计和展示功能。它支持多种数据源,包括关系型数据库、XML、Web服务等,使得开发人员能够轻松地集成报表到他们的应用中。 2. **XML...

    birt的jar包

    BIRT(Business Intelligence and Reporting Tools)是Eclipse基金会下的一个开源报表...开发者可以通过理解和利用这些jar包,将BIRT的强大功能整合进自己的Java应用程序中,为用户提供丰富的数据可视化和分析能力。

    code_report.rar_birt report java_开源技术

    【BIRT报告与Java结合应用】 BIRT(Business Intelligence and Reporting Tools)是Eclipse基金会下的一款开源报表系统,主要用于生成动态、交互式的报告。它集成了数据可视化、数据分析以及报告设计功能,支持Java...

    birt api动态创建表格

    本话题主要关注如何利用BIRT API动态创建表格,这是一个在数据可视化和业务智能应用中常见的需求。 在给定的资源中,我们有三个关键文件:`CreateTable.java`、`BirtEngine.java`和`createTable.jsp`。这些文件分别...

    birt公用CSS样式

    描述中提到,“自己写的birt报表公用Style样式,能应付一般的报表”。这表明这组CSS样式是个人或团队根据实际项目需求定制的,适用于各种常见类型的报表。其中包括了基本的排版、颜色搭配、字体设置等,满足日常报告...

Global site tag (gtag.js) - Google Analytics