IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Open source | Java technology  >

在 Eclipse 中用 Java 实现百灵报表(BIRT)的事件处理

创建更为丰富的商业智能报表

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 高级

李 忠波 (leigh@vip.sina.com), 资深软件开发师, 安讯(Actuate)上海研发中心

2008 年 8 月 07 日

百灵报表(BIRT)是一个非常实用的开源报表工具,它不仅能满足商业智能领域报表设计的一般需求,还可以通过与 Java 语言相结合,来实现一些更为丰富的个性化报表样式。本文通过一个简单的实例,在 Eclipse 中创建一个单一工程,使用 Java 语言实现百灵报表(BIRT)的事件响应处理程序。引导读者在短时间内对百灵报表(BIRT)有一个初步了解,并掌握使用 Java 语言创建百灵报表(BIRT)事件响应处理程序的基本步骤和调试方法。

概述

在新近发布的 Eclipse Ganymede 软件包站点(参见参考资料中“获得产品和技术”一栏) 上,提供了一个新的软件包 Eclipse IDE for Java and Report Developers(图一),它来自 Eclipse 社区的顶级项目 BIRT(Business Intelligence and Reporting Tools,参见参考资料中“获得产品和技术”一栏)。


图 1. Eclipse Ganymede 软件包站点
Eclipse Ganymede 软件包站点

这是一个具有强大功能的商业智能报表开发工具,它有一个很好听的中文名字,叫百灵报表。到本文撰写时为止,按照 Eclipse 系列划分,该软件包的最新版本是3.4.0,按照百灵报表(BIRT)的系列划分,它的最新版本是2.3.0。这也就是说,该软件包是由3.4.0的 Eclipse 平台与2.3.0的百灵报表(BIRT)插件的集成而成。本文以下所提到的百灵报表(BIRT)和百灵报表(BIRT)设计器,均指该软件包。

作为一个专门的报表设计工具,开发者使用百灵报表(BIRT)设计器,可以完成大多数商业智能领域的数据模型组建和报表布局设计。但是,在实践中经常会遇到一些比较特殊的个性化需求,很难用一般的设计手段来实现。这往往需要开发者定制相应的报表事件响应处理程序来解决。百灵报表(BIRT)设计器提供了一个 JavaScript 的开发和调试环境,开发者可以很方便地使用 JavaScript 来实现报表的事件响应处理程序。同时,百灵报表(BIRT)也具有直接调用 Java 编写的事件响应处理类的机制,尽管与 JavaScript 相比,使用 Java 来完成这一工作显得有些复杂,但对于习惯使用 Java 语言、或者希望利用丰富的 Java 资源的开发者来说,这种办法是一个相当好的选择。

本文接下来就通过一个简单的实例,在 Eclipse 中创建一个单一工程,引入样例报表,使用 Java 语言实现报表事件响应处理程序。引导读者在短时间内对百灵报表(BIRT)有一个初步了解,并掌握使用 Java 语言创建百灵报表(BIRT)事件响应处理程序的基本步骤和调试方法。本文结尾处提供了示例工程和操作演示的下载

准备

首先在 Eclipse Ganymede 软件包站点(参见参考资料中“获得产品和技术”一栏) 下载百灵报表(BIRT - Eclipse IDE for Java and Report Developers) ,下载之后解压缩到系统,即完成安装。

建立工程

按照如下步骤,建立一个Java工程,同时引入BIRT Engine API JAR 包。


图 2. 建立工程
建立工程

1. 启动百灵报表(BIRT),在主菜单中选择 File -> New -> Project... 菜单项,打开 New Project 对话框。


图 3. New Project 对话框
New Project 对话框

2. 在 New Project 对话框中选择 Java -> Java Project 项目,单击 Next 按钮,打开 New Java Project 对话框。


图 4. New Java Project 对话框
New Java Project 对话框

3. 在 Project name 处输入“BirtWithJava”作为项目名称,单击 Next 按钮,打开 Java Settings 对话框。


图 5. Java Settings 对话框
Java Settings 对话框

4. 在 Java Settings 对话框中选择 Libraries 页面,单击 Add External JARs... 按钮.


图 6. Libraries 页面
Libraries 页面

5. 选择 “<百灵报表(BIRT)根目录>/plug-ins/org.eclipse.birt.report.engine_2.3.0.v20080616.jar“ 文件,添加为工程类库。这个 JAR 包文件是百灵报表(BIRT) 的 Engine API。对于不同版本的百灵报表(BIRT),该文件的文件名中所附带的版本信息是不一样的。


图 7. 引入 Engine API
引入 Engine API

6. 单击 Finish 按钮,当系统提示 “Open Associated Perspective?” 时,单击 Yes 按钮,如下结构的 Java 工程被创建出来。


图 8. BirtWithJava 工程
BirtWithJava 工程




回页首


导入样例报表

按照如下步骤,导入一个样例报表。


图 9. 打开 Show View 对话框
打开 Show View 对话框

1. 在主菜单中选择 Window -> Show View -> Other... 菜单项,打开 Show View 对话框。


图 10. Show View 对话框
Show View 对话框

2. 在 Show View 对话框中选择 Report and Chart Design -> Report Examples 项目,单击 OK 按钮,打开 Report Examples 窗口。


图 11. Report Examples 窗口
Report Examples 窗口

3. 在 Report Examples 窗口的 Sample Reports 列表中选择 Reporting Feature Examples -> Cross tab -> CrosstabSampleRevenue.rptdesign 项目。这是一个样例报表,它采用交叉表格式来展示一份商品销售情况报告,其数据来自百灵报表(BIRT)内嵌的一个样例数据库。交叉表的具体用法较为复杂,本文不做过多讨论。选择好样例报表后,单击窗口右上角的导入按钮,打开 Project Name 对话框。


图 12. Project Name 对话框
Project Name 对话框

4. 在 Project Name 对话框中输入 BirtWithJava,单击 OK 按钮,系统显示 Project Exists 提示框。


图 13. Project Exists 提示框
Project Exists 提示框

5. 在 Project Exists 提示框中单击 Proceed 按钮,将选择的样例报表 CrosstabSampleRevenue.rptdesign 导入到本文的示例工程 BirtWithJava 中。导入成功后,此报表被自动打开。


图 14. 样例报表
样例报表

6. 单击报表 CrosstabSampleRevenue.rptdesign 的 Preview 页面,预览此报表。

7. 系统显示处理状态,表示正在生成报表,这可能需要等待几十秒钟的时间。


图 15. 预览报表
预览报表

8. 当系统处理完成后,报表被显示出来。这是一份商品销售报告,显示的是每类商品的季度销售额以及累计情况。接下来,我们尝试用 Java 创建一个事件响应处理类,把每季度销售额在10万美元以上的数据用红色标示出来。





回页首


创建 Java 类

按照如下步骤,用 Java 创建百灵报表(BIRT)的事件响应处理程序。


图 16. 创建 Java 类
 创建 Java 类

1. 在主菜单中选择 File -> New -> Class 菜单项,打开 New Java Class 对话框。


图 17. New Java Class 对话框
New Java Class 对话框

2. 在 New Java Class 对话框的 Name 处输入 DataItemEventHandler ,作为该事件响应处理类的名字。单击 Browse... 按钮,打开 Superclass Selection 对话框。选择或直接输入 "org.eclipse.birt.report.engine.api.script.eventadapter.DataItemEventAdapter" 作为父类。

3. 单击 Finish 按钮,一个名称为 DataItemEventHandler.java 的文件被创建出来,在这个文件里输入如下代码:


清单 1. 报表事件响应处理类
import org.eclipse.birt.report.engine.api.script.IReportContext;
import org.eclipse.birt.report.engine.api.script.eventadapter.DataItemEventAdapter;
import org.eclipse.birt.report.engine.api.script.instance.IDataItemInstance;

public class DataItemEventHandler extends DataItemEventAdapter {

	public void onRender(IDataItemInstance data, IReportContext reportContext) {
		super.onRender(data, reportContext);

		if (((Double) data.getValue()).doubleValue() > 100000) {
			data.getStyle().setColor("red");
		}
	}
}
 

在上面这段代码中,我们重写了 DataItemEventHandler 类的 onRender 方法。该方法带有两个参数,其中 data 就是当前我们要操作的数据实例,在这里我们通过条件判断来把大于10万美元的数据设置为红色。另外一个参数 reportContext 则是一个全局的上下文对象,利用这个上下文对象,可以在不同的事件响应处理类中传递信息。

4. 确认无误后存盘,报表事件响应处理类创建完成。





回页首


Java 类与报表关联

按照如下步骤,将创建好的 Java 事件响应处理类和样例报表关联起来。


图 18. 打开报表属性页面
打开报表属性页面

1. 切换到报表 Layout 页面,在主菜单中选择 Window -> Show View -> Other 菜单项,打开 Show View 对话框。


图 19. Show View 对话框
Show View 对话框

2. 在 Show View 对话框中选择 Report Design -> Property Editor 项目,单击 OK 按钮,打开 Property Editor 窗口。


图 20. Property Editor 窗口
Property Editor 窗口

3. 选中报表设计区中的第一个 revenue 数据项,这就是我们要操作的季度销售数据。

4. 在 Property Editor - Data 窗口左侧选择 Event Handler 页面。

5. 在 Event Handler 页面中,单击 Browse... 按钮,打开 Class Selection 对话框。


图 21. Class Selection 对话框
Class Selection 对话框

6. 在 Class Selection 对话框中选择 DataItemEventHandler 类,单击 OK 按钮,完成报表数据项和 Java 事件响应处理类的关联。


图 22. 关联 Java 类
关联 Java 类

7. 单击报表的 Preview 页面,可以看到10万美元以上的季度销售数据(不包括累计数据)都被标示为红色了。这表明我们定制的 Java 事件响应处理类已经和报表成功关联起来。


图 23. 预览报表
预览报表




回页首


调试 Java 类

对于任何一个开发工作,调试都是不可避免的。百灵报表(BIRT)提供了一个调试器,开发者可以利用这个调试器,对定制的 Java 事件响应处理类进行调试。

1. 在 Java 类 DataItemEventHandle 中设置断点。


图 24. 设置断点
设置断点

2. 在主菜单中选择 Run -> Debug Configurations... 菜单项,打开 Debug Configurations 对话框。


图 25. Debug Configurations 对话框
Debug Configurations  对话框

3. 在 Debug Configurations 对话框中,选择 Report 列表项目,单击鼠标右键。在弹出菜单中,选择 New 菜单项,创建一个新的调试环境配置 New_configuration。


图 26. 配置调试环境
配置调试环境

4. 在 Main 页面中,选择 Debug type 为 Java,并选中 Output 中的 “Open generated file when finished”。

5. 单击 Classpath,打开 Classpath 页面。


图 27. Classpath 页面
Classpath 页面

6. 在 Classpath 页面中,选中 User Entries 项目,单击 Add Projects... 按钮,打开 Project Selection 对话框。


图 28. Project Selection 对话框
Project Selection 对话框

7. 在 Project Selection 对话框中,选择 BirtWithJava 工程项目,单击 OK 按钮,回到 Debug Configurations 对话框。


图 29. Debug Configurations 对话框
Debug Configurations  对话框

8. 在 Debug Configurations 对话框中, 单击 Debug 按钮,开始调试。

9. 系统准备进入调试状态,这可能需要几十秒钟的时间。当提示 “Confirm Perspective Switch” 对话框时,单击 Yes 按钮,进入调试画面。


图 30. 开始调试
开始调试

10. 系统运行停留在断点处,开始调试。调试完成后,去除断点,单击 Resume (F8) 按钮继续运行,最终生成的报表在外部浏览器中被打开。


图 31. 运行结果
运行结果




回页首


结束语

众所周知, Java 语言具有良好的结构性和丰富的程序资源。利用本文所提供的方法,可以充分提高报表事件响应处理程序的算法复杂性,实现普通设计手段难以达到的效果。但需要注意的是,当设计好的报表被部署到 WEB 时,采用 Java 实现的事件响应处理类是在百灵报表(BIRT)的服务器端被加载和运行的。因此,除非能够保证客户端和服务器端总是运行在同一台计算机上,否则任何试图利用本文所描述的方法,在客户端与用户进行交互的尝试,都有可能导致失败。






回页首


下载

描述名字大小下载方法
本文用到的示例工程birt_with_java.zip7KBHTTP
本文的操作演示birt_with_java.swf1588KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术

讨论


关于作者

作者照片

李忠波是一名中国软件设计师, Sun 公司认证 Java 程序员(SCJP)和开发师(SCJD),Eclipse 开源社区提交者。他有15年以上的软件开发经验,目前专门从事百灵报表(BIRT)设计器的研发工作。 业余爱好自行车、游泳、法律和古典文学。




对本文的评价










回页首


第 1 段商标声明。 第 2 段商标声明。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款