posts - 297,  comments - 1618,  trackbacks - 0
 

1.    复合JavaBean数据源

1.1 说明

在使用Eclipse BIRT进行报表开发时,会遇到使用复合型的JavaBean作为数据源的情况,例如Contact对象有一个Address类型的对应address,而Address对象又具有两个属性,分别为addressIdaddressName,在此种情况下应该使用Eclipse BIRT提供的“Script Data Source”进行数据源。如下将通过实例展现在Eclipse BIRT中如何使用复合JavaBean作为数据源。

所用环境说明:

IDE环境:birt-report-designer-all-in-one-2_2_1_1;、

Tomcat5.5.27

Eclipse BIRT版本:2.2.1

birt-runtime-2_2_1_1

1.2 开发实例

1.2.1 Java工程中创建复合JavaBeanContact.java

在集成了BIRTEclipse中建立Java工程:birtJavaProject,并建立amigo.report包,并在该包下建立复合JavaBean的类:Contact.java,该类的代码如下所示:

package amigo.report;

public class Contact {

    
private String firstName;

    
private String lastName;

    
private String phoneNum;

    
private Address address;

    
public Contact(

         String firstName, String lastName,

         String phoneNum, Address address)
{

        
this.firstName = firstName;

        
this.lastName = lastName;

        
this.phoneNum = phoneNum;

        
this.address = address;

    }


    
// 省略getter/setter方法

}

 

1.2.2 Java工程创建复合JavaBean的关联JavaBeanAddress.java

接下来在amigo.report包下建立Contact类关联的JavaBean类,代码如下所示:

package amigo.report;

public class Address {

    
private String addressId;

    
private String addressName;

    
public Address(String addressId, String addressName) {

        
this.addressId = addressId;

        
this.addressName = addressName;

    }


    
// 省略getter/setter方法

}



1.2.3 Java工程中创建数据工厂类ContactListFactory.java

Java工程中还需要创建制造数据的工程类:ContactListFactory.java,该类的代码如下所示:

package amigo.report;

/**

 * 数据制造工厂类.

 * 
@author AmigoXie(xieingxing1121@126.com)

 
*/


public class ContactListFactory {

    
public Contact[] createContactList(){

        Contact[] c 
= new Contact[10];

        Address address1 
= new Address("1""address1");

        Address address2 
= new Address("2""address2");

        Address address3 
= new Address("3""address3");

        Address address4 
= new Address("4""address4");

        c[
0= new Contact("stavros""kounis""2310886269", address1);

        c[
1= new Contact("dimitris""kounis""2310888270", address2);

        c[
2= new Contact("dimitris""adamos""2310998417", address3);

        c[
3= new Contact("nikos""koufotolis""2321013770", address4);

        c[
4= new Contact("""星星""1399998383", address1);

        c[
5= new Contact("""蜜果""13535353", address1);

        c[
6= new Contact("test0""test00""1388996969", address1);

        c[
7= new Contact("test1""test11""33333", address3);

        c[
8= new Contact("test2""test22""44444", address2);

        c[
9= new Contact("test3""test33""66666", address3);

        
return c;

    }


}



截至此步,Java源码已经编写完毕,余下的工作是做报表编程。

1.2.4 创建报表工程

在开发环境中选择“New-> Project”,如下所示:


在弹出对话框选择“Bussiness Intelligence… -> Report Project”,如下图所示:

 


而后点击“Next  >,在弹出对话框中输入报表工程的名称“birtreport”后,点击“Finish”按钮完成报表工程的创建。

1.2.5 创建报表

         选择报表工程“birtreport”后点击右键,选择“New –> Report”,如下图所示:


 

在弹出窗口中输入报表的名称:helloBirt.rptdesign,点击“Finish”按钮完成报表的创建。

1.2.6 创建Scripted数据源

使用JavaBean作为数据源,需要创建Script数据源。首先打开“Data Explorer”视图,(若该视图被关闭,请使用“Show View”打开)。在“Data Explorer”中选择“Data Sources->New Data Source”,如下图所示:
     

创建数据源的弹出窗口如下图所示:


 

在上述窗口中选择“Scripted Data Source”,在“Data Source Name”中输入数据源的名字,例如“Data Source”,点击“Finish”按钮完成数据源的创建。

1.2.7 创建数据集

在“Data Explorer”视图中点击“Data Sets->New Data Set”,弹出窗口如下所示:


 

在“Data Set Name”中输入数据集的名称,例如“Data Set”,在“Data Source”中选择刚才创建的Scripted数据源,而后点击“Next >”按钮,输入列名和显示名称等信息,窗口如下所示:


 

1.2.8 编写数据访问脚本

打开“helloBirt.rptdesign”,切换到“Script”,在“Data Explorer”视图中选择刚才创建的数据集,open对应的脚本如下所示:

count = 0;

cf = new Packages.amigo.report.ContactListFactory();

c = cf.createContactList();

对应图形如下所示:


 

在“Script”的下拉框中选择“fetch”,对应的脚本如下所示:

if (count <= c.length - 1){

    row["firstName"] = c[count].getFirstName();

    row["lastName"] = c[count].getLastName();

    row["phoneNum"] = c[count].getPhoneNum();

    row["addressId"] = c[count].getAddress().getAddressId();

    row["addressName"] = c[count].getAddress().getAddressName();

    count ++;

    return true;

}

1.2.9 设计报表视图

视图中选择layout,简单的将我们建立的data set 拖到报表视图中即可,完成这步以后可以在preview中查看预览效果了。

1.2.10 部署与浏览

birt-runtime-2_2_1_1目录下的WebViewerExample工程拷贝到Tomcatwebapps下面,并将helloBirt.rptdesign报表文件拷贝到Tomcat根目录/webapps/WebViewerExample工程下。

接着在:Tomcat根目录/webapps/WebViewerExample/WEB-INF目录下建立classes子目录,存放Java工程中的三个类文件对应的class文件,将birtJavaProject/bin下的amigo目录整个拷贝到Tomcat根目录/webapps/WebViewerExample/WEB-INF/classes目录,完成报表文件的部署。

访问地址为:

http://localhost:8080/WebViewerExample/frameset?__report=helloBirt.rptdesign

在浏览器的运行效果图如下所示:

2.    JavaBean数据源的数据进行分组

2.1 说明

在复合JavaBean作为数据源的实例中,展示了如何进行复合JavaBean数据的展示,但是在某些情况下,需要对JavaBean进行分组显示,本实例将展示如何对JavaBean数据源进行分组显示。

2.2 开发实例

2.2.1 创建报表

在报表工程中创建报表groupByReport.rptdesign,创建方式与上例一样。

2.2.2 创建数据源和数据集

因为该实例的数据源和数据集与上例相同,只需要在“Data Explorer”视图中将数据源和数据集拷贝到本实例即可,编写的数据访问脚本和设计的报表也与上例一样。

2.2.3 对数据进行分组

接下来将向读者展示如何按照addressId对数据进行分组,首先在“Layout”中选择table后,点击右键,选择“Insert Group-> Above”,如下所示:

弹出的新建分组的窗口如下所示,在窗口中输入分组的名称,例如:addressIdGroup,在“Group on”中选择“addressId”,在“Interval”中选择“Interval”,在“Range”中输入1,如下图所示:


 

         在上图中点击“OK”按钮完成分组的创建。

2.2.4 部署与浏览

         部署的方法与上例相似,访问地址为:

http://localhost:8080/WebViewerExample/frameset?__report=groupByReport.rptdesign

         运行效果如下图所示:


 

3.    BIRT集成到现有Web项目中

3.1 说明

         在上面的实例中,将报表和相关的类文件放在BIRT对应的Web项目WebViewerExample中来进行报表的查看和浏览,但是在实际的开发过程中,已经有Web项目,将报表的部分部署到WebViewerExample项目,而其它的部分部署到另一个Web项目,显然不太合适,本实例讲解如何将BIRT集成到现有的Web项目中,并进行报表的查看。

         参考文章:http://blog.csdn.net/bjd14/archive/2006/12/25/1458947.aspx

3.2 集成实例

3.2.1 新建项目的Web工程

         MyEclipse新建一个Web Project,名为reportintegration,将上例中的amigo.report包以及其下的所有三个类(Contact.javaAddress.javaContactListFactory.java)拷贝到src目录下。并将helloBirt.rptdesigngroupByReport.rptdesign两个报表文件拷贝到WebRoot目录下。

3.2.2 拷贝BIRTWeb项目WebViewerExample的文件

         打开Tomcat下的WebViewerExample项目,其目录结构如下图所示:


 

         将该目录下的两个子目录reportwebcontent拷贝到工程的WebRoot目录下。

         接下来进入WebViewerExample"WEB-INF目录,目录结构如下所示:


 

         libplatformtlds三个子目录拷贝到Web工程的WebRoot"WEB-INF目录,并拷贝server-config.wsddviewer.propertiesweb.xml三个文件。到此所有文件都拷贝完毕。Web工程的结构如下图所示:


         lib目录的结构如下图所示:


3.2.3 部署与浏览

         部署reportintegrationTomcat下,启动成功后,访问路径类似如下所示:

http://localhost:8080/reportintegration/frameset?__report=groupByReport.rptdesign

运行效果与上例一样,不再赘述。

3.2.4 访问参数说明

在访问时,路径实例如下所示:

http://localhost:8080/reportintegration/frameset?__report=groupByReport.rptdesign

其中”__report”表示访问的报表文件的路径,若将groupByReport.rptdesign报表文件拷贝到WebRoot/report目录下,则访问路径变成:

http://localhost:8080/reportintegration/frameset?__report=report/groupByReport.rptdesign

其它访问参数的说明如下所示:

选项

说明

__format

报表输出格式:htmlpdf,缺省是html。对于frameset不起作用。

__isnull

指明一个参数是null,常用于字符串类型。如果提供参数且值为空: - 对于日期和数字类型,BIRT会将它们当作null处理。 - 对于字符串,BIRT会将它作为空字符串。因此,为了说明某个字符串是null,通常写为:__isnull=参数。

__locale

本地化选项,缺省是jvmlocale

__report

报表设计文件路径。

报表参数

报表参数参数值对,形式:参数名=参数值。对于frameset,直接在地址栏中输入参数名=参数值后回车,不会影响报表结果。虽然,此时选择"运行报表"时,弹出的参数值已经改变。

posted on 2009-05-03 12:11 阿蜜果 阅读(14784) 评论(11)  编辑  收藏 所属分类: Eclipse BIRT


FeedBack:
# re: Eclipse BIRT问题解决汇总(不断更新)
2009-05-04 10:30 | 谷百优
谷百优支持你  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)[未登录]
2009-05-04 13:01 | james
真麻烦,做个报表要写这么多代码...
  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)
2009-05-05 10:16 | 谷百优
顶。。。。。。。。  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)[未登录]
2009-05-07 00:08 | fantasybei
mm,好久不见你写blog阿,呵呵  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)
2009-05-13 17:01 | 导导
你叫谢星星?  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)[未登录]
2009-05-21 14:13 | 1
好像不对啊
报错
我最近才开始学习birt  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)
2009-06-02 09:34 | sgwood
还有个close方法没写  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)[未登录]
2009-09-03 10:20 | Glen
支持 條理清晣的詳盡實用教學。  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)[未登录]
2009-09-03 10:32 | Glen
May I ask how can I calculate subtotal quantity of productA for each page. Should I use IntervalGroup ? If so, How can I make use of it?

Detail as follow:

Page1
Product_1 --> 3 Pcs
Product_2 --> 4 Pcs
Product_3 --> 5 Pcs
....
....
....

Subtotal = 12 Pcs

Page2

Product_5 --> 6 Pcs
Product_6 --> 6 Pcs
Product_7 --> 6 Pcs

Subtotal = 18 Pages

--> Final Page
Total = 30 Pcs




  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)
2010-01-15 16:52 | arrick
if (count <= c.length - 1){

row["firstName"] = c[count].getFirstName();

row["lastName"] = c[count].getLastName();

row["phoneNum"] = c[count].getPhoneNum();

row["addressId"] = c[count].getAddress().getAddressId();

row["addressName"] = c[count].getAddress().getAddressName();

count ++;

return true;

}

return false; 这里少复制了一句return false; 结果 总是报错. 不清楚是什么原因. 因为刚刚接触birt. 不了解script数据库 所以耽误了很多时间... 希望大家引以为戒.
当前报表的script的下拉close事件里面 加上cf = null; c = null;
  回复  更多评论
  
# re: Eclipse BIRT问题解决汇总(不断更新)
2013-06-25 18:47 | 路过
试过了,我这两天开始学的,看到这个初学不错。但是有些问题里面
我用的事4.2版本
1)需要把java工程下的那个编译好的包copy到eclipse下的plugins\org.eclipse.birt.report.viewer_4.2.2.v201302041142\birt\WEB-INF\classes下面,否侧是报表时会报错误的。
2)按地址分组时候,我按图设置了interval,报错。不需要设置这项  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2279382
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜