百灵报表(BIRT)是一个非常实用的开源报表工具它不仅能满足商业智能领域报表设计的一般需求还可以通过与 Java 语言相结合来实现一些更为丰富的个性化报表样式本文通过一个简单的实例在 Eclipse 中创建一个单一工程使用 Java 语言实现百灵报表(BIRT)的事件响应处理程序引导读者在短时间内对百灵报表(BIRT)有一个初步了解并掌握使用 Java 语言创建百灵报表(BIRT)事件响应处理程序的基本步骤和调试方法
概述
在新近发布的 Eclipse Ganymede 软件包站点上提供了一个新的软件包 Eclipse IDE for Java and Report Developers(图一)它来自 Eclipse 社区的顶级项目 BIRT(Business Intelligence and Reporting Tools参见参考资料中获得产品和技术一栏)
图 Eclipse Ganymede 软件包站点
这是一个具有强大功能的商业智能报表开发工具它有一个很好听的中文名字叫百灵报表到本文撰写时为止按照 Eclipse 系列划分该软件包的最新版本是按照百灵报表(BIRT)的系列划分它的最新版本是这也就是说该软件包是由的 Eclipse 平台与的百灵报表(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 包
图 建立工程
启动百灵报表(BIRT)在主菜单中选择 File > New > Project…… 菜单项打开 New Project 对话框
图 New Project 对话框
在 New Project 对话框中选择 Java > Java Project 项目单击 Next 按钮打开 New Java Project 对话框
图 New Java Project 对话框
在 Project name 处输入BirtWithJava作为项目名称单击 Next 按钮打开 Java Settings 对话框
图 Java Settings 对话框
在 Java Settings 对话框中选择 Libraries 页面单击 Add External JARs…… 按钮
图 Libraries 页面
选择 <百灵报表(BIRT)根目录>/plugins/orgeclipsebirtreportengine_vjar 文件添加为工程类库这个 JAR 包文件是百灵报表(BIRT) 的 Engine API对于不同版本的百灵报表(BIRT)该文件的文件名中所附带的版本信息是不一样的
图 引入 Engine API
单击 Finish 按钮当系统提示 Open Associated Perspective? 时单击 Yes 按钮如下结构的 Java 工程被创建出来
图 BirtWithJava 工程
导入样例报表
按照如下步骤导入一个样例报表
图 打开 Show View 对话框
在主菜单中选择 Window > Show View > Other…… 菜单项打开 Show View 对话框
图 Show View 对话框
在 Show View 对话框中选择 Report and Chart Design > Report Examples 项目单击 OK 按钮打开 Report Examples 窗口
图 Report Examples 窗口
在 Report Examples 窗口的 Sample Reports 列表中选择 Reporting Feature Examples > Cross tab > CrosstabSampleRevenuerptdesign 项目这是一个样例报表它采用交叉表格式来展示一份商品销售情况报告其数据来自百灵报表(BIRT)内嵌的一个样例数据库交叉表的具体用法较为复杂本文不做过多讨论选择好样例报表后单击窗口右上角的导入按钮打开 Project Name 对话框
图 Project Name 对话框
在 Project Name 对话框中输入 BirtWithJava单击 OK 按钮系统显示 Project Exists 提示框
图 Project Exists 提示框
在 Project Exists 提示框中单击 Proceed 按钮将选择的样例报表 CrosstabSampleRevenuerptdesign 导入到本文的示例工程 BirtWithJava 中导入成功后此报表被自动打开
图 样例报表
单击报表 CrosstabSampleRevenuerptdesign 的 Preview 页面预览此报表
系统显示处理状态表示正在生成报表这可能需要等待几十秒钟的时间
图 预览报表
当系统处理完成后报表被显示出来这是一份商品销售报告显示的是每类商品的季度销售额以及累计情况接下来我们尝试用 Java 创建一个事件响应处理类把每季度销售额在万美元以上的数据用红色标示出来
创建 Java 类
按照如下步骤用 Java 创建百灵报表(BIRT)的事件响应处理程序
图 创建 Java 类
在主菜单中选择 File > New > Class 菜单项打开 New Java Class 对话框
图 New Java Class 对话框
在 New Java Class 对话框的 Name 处输入 DataItemEventHandler 作为该事件响应处理类的名字单击 Browse…… 按钮打开 Superclass Selection 对话框选择或直接输入 orgeclipsebirtreportengineapiscripteventadapterDataItemEventAdapter 作为父类
单击 Finish 按钮一个名称为 DataItemEventHandlerjava 的文件被创建出来在这个文件里输入如下代码
清单 报表事件响应处理类
import orgeclipsebirtreportengineapiscriptIReportContext;
import orgeclipsebirtreportengineapiscripteventadapterDataItemEventAdapter;
import orgeclipsebirtreportengineapiscriptinstanceIDataItemInstance;
public class DataItemEventHandler extends DataItemEventAdapter {
public void onRender(IDataItemInstance data IReportContext reportContext) {
superonRender(data reportContext);
if (((Double) datagetValue())doubleValue() > ) {
datagetStyle()setColor(red);
}
}
}
在上面这段代码中我们重写了 DataItemEventHandler 类的 onRender 方法该方法带有两个参数其中 data 就是当前我们要操作的数据实例在这里我们通过条件判断来把大于万美元的数据设置为红色另外一个参数 reportContext 则是一个全局的上下文对象利用这个上下文对象可以在不同的事件响应处理类中传递信息
确认无误后存盘报表事件响应处理类创建完成
Java 类与报表关联
按照如下步骤将创建好的 Java 事件响应处理类和样例报表关联起来
图 打开报表属性页面
切换到报表 Layout 页面在主菜单中选择 Window > Show View > Other 菜单项打开 Show View 对话框
图 Show View 对话框
在 Show View 对话框中选择 Report Design > Property Editor 项目单击 OK 按钮打开 Property Editor 窗口
图 Property Editor 窗口
选中报表设计区中的第一个 revenue 数据项这就是我们要操作的季度销售数据
在 Property Editor Data 窗口左侧选择 Event Handler 页面
在 Event Handler 页面中单击 Browse…… 按钮打开 Class Selection 对话框
图 Class Selection 对话框
在 Class Selection 对话框中选择 DataItemEventHandler 类单击 OK 按钮完成报表数据项和 Java 事件响应处理类的关联
图 关联 Java 类
单击报表的 Preview 页面可以看到万美元以上的季度销售数据(不包括累计数据)都被标示为红色了这表明我们定制的 Java 事件响应处理类已经和报表成功关联起来
图 预览报表
调试 Java 类
对于任何一个开发工作调试都是不可避免的百灵报表(BIRT)提供了一个调试器开发者可以利用这个调试器对定制的 Java 事件响应处理类进行调试
在 Java 类 DataItemEventHandle 中设置断点
图 设置断点
在主菜单中选择 Run > Debug Configurations…… 菜单项打开 Debug Configurations 对话框
图 Debug Configurations 对话框
在 Debug Configurations 对话框中选择 Report 列表项目单击鼠标右键在弹出菜单中选择 New 菜单项创建一个新的调试环境配置 New_configuration
图 配置调试环境
在 Main 页面中选择 Debug type 为 Java并选中 Output 中的 Open generated file when finished
单击 Classpath打开 Classpath 页面
图 Classpath 页面
在 Classpath 页面中选中 User Entries 项目单击 Add Projects…… 按钮打开 Project Selection 对话框
图 Project Selection 对话框
在 Project Selection 对话框中选择 BirtWithJava 工程项目单击 OK 按钮回到 Debug Configurations 对话框
图 Debug Configurations 对话框
在 Debug Configurations 对话框中 单击 Debug 按钮开始调试
系统准备进入调试状态这可能需要几十秒钟的时间当提示 Confirm Perspective Switch 对话框时单击 Yes 按钮进入调试画面
图 开始调试
系统运行停留在断点处开始调试调试完成后去除断点单击 Resume (F) 按钮继续运行最终生成的报表在外部浏览器中被打开
图 运行结果
结束语
众所周知 Java 语言具有良好的结构性和丰富的程序资源利用本文所提供的方法可以充分提高报表事件响应处理程序的算法复杂性实现普通设计手段难以达到的效果但需要注意的是当设计好的报表被部署到 WEB 时采用 Java 实现的事件响应处理类是在百灵报表(BIRT)的服务器端被加载和运行的因此除非能够保证客户端和服务器端总是运行在同一台计算机上否则任何试图利用本文所描述的方法在客户端与用户进行交互的尝试都有可能导致失败