1. 復(fù)合JavaBean數(shù)據(jù)源
1.1 說(shuō)明
在使用Eclipse BIRT進(jìn)行報(bào)表開發(fā)時(shí),會(huì)遇到使用復(fù)合型的JavaBean作為數(shù)據(jù)源的情況,例如Contact對(duì)象有一個(gè)Address類型的對(duì)應(yīng)address,而Address對(duì)象又具有兩個(gè)屬性,分別為addressId和addressName,在此種情況下應(yīng)該使用Eclipse BIRT提供的“Script Data Source”進(jìn)行數(shù)據(jù)源。如下將通過(guò)實(shí)例展現(xiàn)在Eclipse BIRT中如何使用復(fù)合JavaBean作為數(shù)據(jù)源。
所用環(huán)境說(shuō)明:
l IDE環(huán)境:birt-report-designer-all-in-one-2_2_1_1;、
l Tomcat:5.5.27;
l Eclipse BIRT版本:2.2.1
l birt-runtime-2_2_1_1。
1.2 開發(fā)實(shí)例
1.2.1 在Java工程中創(chuàng)建復(fù)合JavaBean類Contact.java
在集成了BIRT的Eclipse中建立Java工程:birtJavaProject,并建立amigo.report包,并在該包下建立復(fù)合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工程創(chuàng)建復(fù)合JavaBean的關(guān)聯(lián)JavaBean類Address.java
接下來(lái)在amigo.report包下建立Contact類關(guān)聯(lián)的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工程中創(chuàng)建數(shù)據(jù)工廠類ContactListFactory.java
在Java工程中還需要?jiǎng)?chuàng)建制造數(shù)據(jù)的工程類:ContactListFactory.java,該類的代碼如下所示:
package amigo.report;


/** *//**

* 數(shù)據(jù)制造工廠類.

* @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源碼已經(jīng)編寫完畢,余下的工作是做報(bào)表編程。
1.2.4 創(chuàng)建報(bào)表工程
在開發(fā)環(huán)境中選擇“New”-> “Project”,如下所示:
在彈出對(duì)話框選擇“Bussiness Intelligence…” -> “Report Project”,如下圖所示:
而后點(diǎn)擊“Next >”,在彈出對(duì)話框中輸入報(bào)表工程的名稱“birtreport”后,點(diǎn)擊“Finish”按鈕完成報(bào)表工程的創(chuàng)建。
1.2.5 創(chuàng)建報(bào)表
選擇報(bào)表工程“birtreport”后點(diǎn)擊右鍵,選擇“New” –> “Report”,如下圖所示:
在彈出窗口中輸入報(bào)表的名稱:helloBirt.rptdesign,點(diǎn)擊“Finish”按鈕完成報(bào)表的創(chuàng)建。
1.2.6 創(chuàng)建Scripted數(shù)據(jù)源
使用JavaBean作為數(shù)據(jù)源,需要?jiǎng)?chuàng)建Script數(shù)據(jù)源。首先打開“Data Explorer”視圖,(若該視圖被關(guān)閉,請(qǐng)使用“Show View”打開)。在“Data Explorer”中選擇“Data Sources”->“New Data Source”,如下圖所示:
創(chuàng)建數(shù)據(jù)源的彈出窗口如下圖所示:
在上述窗口中選擇“Scripted Data Source”,在“Data Source Name”中輸入數(shù)據(jù)源的名字,例如“Data Source”,點(diǎn)擊“Finish”按鈕完成數(shù)據(jù)源的創(chuàng)建。
1.2.7 創(chuàng)建數(shù)據(jù)集
在“Data Explorer”視圖中點(diǎn)擊“Data Sets”->“New Data Set”,彈出窗口如下所示:
在“Data Set Name”中輸入數(shù)據(jù)集的名稱,例如“Data Set”,在“Data Source”中選擇剛才創(chuàng)建的Scripted數(shù)據(jù)源,而后點(diǎn)擊“Next >”按鈕,輸入列名和顯示名稱等信息,窗口如下所示:
1.2.8 編寫數(shù)據(jù)訪問(wèn)腳本
打開“helloBirt.rptdesign”,切換到“Script”,在“Data Explorer”視圖中選擇剛才創(chuàng)建的數(shù)據(jù)集,open對(duì)應(yīng)的腳本如下所示:
count = 0;
cf = new Packages.amigo.report.ContactListFactory();
c = cf.createContactList();
對(duì)應(yīng)圖形如下所示:
在“Script”的下拉框中選擇“fetch”,對(duì)應(yīng)的腳本如下所示:
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 設(shè)計(jì)報(bào)表視圖
視圖中選擇layout,簡(jiǎn)單的將我們建立的data set 拖到報(bào)表視圖中即可,完成這步以后可以在preview中查看預(yù)覽效果了。
1.2.10 部署與瀏覽
將birt-runtime-2_2_1_1目錄下的WebViewerExample工程拷貝到Tomcat的webapps下面,并將helloBirt.rptdesign報(bào)表文件拷貝到Tomcat根目錄/webapps/WebViewerExample工程下。
接著在:Tomcat根目錄/webapps/WebViewerExample/WEB-INF目錄下建立classes子目錄,存放Java工程中的三個(gè)類文件對(duì)應(yīng)的class文件,將birtJavaProject/bin下的amigo目錄整個(gè)拷貝到Tomcat根目錄/webapps/WebViewerExample/WEB-INF/classes目錄,完成報(bào)表文件的部署。
訪問(wèn)地址為:
http://localhost:8080/WebViewerExample/frameset?__report=helloBirt.rptdesign
在瀏覽器的運(yùn)行效果圖如下所示:

2. 對(duì)JavaBean數(shù)據(jù)源的數(shù)據(jù)進(jìn)行分組
2.1 說(shuō)明
在復(fù)合JavaBean作為數(shù)據(jù)源的實(shí)例中,展示了如何進(jìn)行復(fù)合JavaBean數(shù)據(jù)的展示,但是在某些情況下,需要對(duì)JavaBean進(jìn)行分組顯示,本實(shí)例將展示如何對(duì)JavaBean數(shù)據(jù)源進(jìn)行分組顯示。
2.2 開發(fā)實(shí)例
2.2.1 創(chuàng)建報(bào)表
在報(bào)表工程中創(chuàng)建報(bào)表groupByReport.rptdesign,創(chuàng)建方式與上例一樣。
2.2.2 創(chuàng)建數(shù)據(jù)源和數(shù)據(jù)集
因?yàn)樵搶?shí)例的數(shù)據(jù)源和數(shù)據(jù)集與上例相同,只需要在“Data Explorer”視圖中將數(shù)據(jù)源和數(shù)據(jù)集拷貝到本實(shí)例即可,編寫的數(shù)據(jù)訪問(wèn)腳本和設(shè)計(jì)的報(bào)表也與上例一樣。
2.2.3 對(duì)數(shù)據(jù)進(jìn)行分組
接下來(lái)將向讀者展示如何按照addressId對(duì)數(shù)據(jù)進(jìn)行分組,首先在“Layout”中選擇table后,點(diǎn)擊右鍵,選擇“Insert Group”-> “Above”,如下所示:
彈出的新建分組的窗口如下所示,在窗口中輸入分組的名稱,例如:addressIdGroup,在“Group on”中選擇“addressId”,在“Interval”中選擇“Interval”,在“Range”中輸入1,如下圖所示:
在上圖中點(diǎn)擊“OK”按鈕完成分組的創(chuàng)建。
2.2.4 部署與瀏覽
部署的方法與上例相似,訪問(wèn)地址為:
http://localhost:8080/WebViewerExample/frameset?__report=groupByReport.rptdesign
運(yùn)行效果如下圖所示:
3. 將BIRT集成到現(xiàn)有Web項(xiàng)目中
3.1 說(shuō)明
在上面的實(shí)例中,將報(bào)表和相關(guān)的類文件放在BIRT對(duì)應(yīng)的Web項(xiàng)目WebViewerExample中來(lái)進(jìn)行報(bào)表的查看和瀏覽,但是在實(shí)際的開發(fā)過(guò)程中,已經(jīng)有Web項(xiàng)目,將報(bào)表的部分部署到WebViewerExample項(xiàng)目,而其它的部分部署到另一個(gè)Web項(xiàng)目,顯然不太合適,本實(shí)例講解如何將BIRT集成到現(xiàn)有的Web項(xiàng)目中,并進(jìn)行報(bào)表的查看。
參考文章:http://blog.csdn.net/bjd14/archive/2006/12/25/1458947.aspx
3.2 集成實(shí)例
3.2.1 新建項(xiàng)目的Web工程
在MyEclipse新建一個(gè)Web Project,名為reportintegration,將上例中的amigo.report包以及其下的所有三個(gè)類(Contact.java、Address.java和ContactListFactory.java)拷貝到src目錄下。并將helloBirt.rptdesign和groupByReport.rptdesign兩個(gè)報(bào)表文件拷貝到WebRoot目錄下。
3.2.2 拷貝BIRT的Web項(xiàng)目WebViewerExample的文件
打開Tomcat下的WebViewerExample項(xiàng)目,其目錄結(jié)構(gòu)如下圖所示:
將該目錄下的兩個(gè)子目錄report和webcontent拷貝到工程的WebRoot目錄下。
接下來(lái)進(jìn)入WebViewerExample"WEB-INF目錄,目錄結(jié)構(gòu)如下所示:
將lib、platform和tlds三個(gè)子目錄拷貝到Web工程的WebRoot"WEB-INF目錄,并拷貝server-config.wsdd、viewer.properties和web.xml三個(gè)文件。到此所有文件都拷貝完畢。Web工程的結(jié)構(gòu)如下圖所示:
lib目錄的結(jié)構(gòu)如下圖所示:
3.2.3 部署與瀏覽
部署reportintegration到Tomcat下,啟動(dòng)成功后,訪問(wèn)路徑類似如下所示:
http://localhost:8080/reportintegration/frameset?__report=groupByReport.rptdesign
運(yùn)行效果與上例一樣,不再贅述。
3.2.4 訪問(wèn)參數(shù)說(shuō)明
在訪問(wèn)時(shí),路徑實(shí)例如下所示:
http://localhost:8080/reportintegration/frameset?__report=groupByReport.rptdesign
其中”__report”表示訪問(wèn)的報(bào)表文件的路徑,若將groupByReport.rptdesign報(bào)表文件拷貝到WebRoot/report目錄下,則訪問(wèn)路徑變成:
http://localhost:8080/reportintegration/frameset?__report=report/groupByReport.rptdesign
其它訪問(wèn)參數(shù)的說(shuō)明如下所示:
選項(xiàng)
|
說(shuō)明
|
__format
|
報(bào)表輸出格式:html或pdf,缺省是html。對(duì)于frameset不起作用。
|
__isnull
|
指明一個(gè)參數(shù)是null,常用于字符串類型。如果提供參數(shù)且值為空: - 對(duì)于日期和數(shù)字類型,BIRT會(huì)將它們當(dāng)作null處理。 - 對(duì)于字符串,BIRT會(huì)將它作為空字符串。因此,為了說(shuō)明某個(gè)字符串是null,通常寫為:__isnull=參數(shù)。
|
__locale
|
本地化選項(xiàng),缺省是jvm的locale。
|
__report
|
報(bào)表設(shè)計(jì)文件路徑。
|
報(bào)表參數(shù)
|
報(bào)表參數(shù)參數(shù)值對(duì),形式:參數(shù)名=參數(shù)值。對(duì)于frameset,直接在地址欄中輸入?yún)?shù)名=參數(shù)值后回車,不會(huì)影響報(bào)表結(jié)果。雖然,此時(shí)選擇"運(yùn)行報(bào)表"時(shí),彈出的參數(shù)值已經(jīng)改變。
|
posted on 2009-05-03 12:11
阿蜜果 閱讀(14936)
評(píng)論(11) 編輯 收藏 所屬分類:
Eclipse BIRT