1. 復合JavaBean數據源
1.1 說(shuō)明
在使用Eclipse BIRT進(jìn)行報表開(kāi)發(fā)時(shí),會(huì )遇到使用復合型的JavaBean作為數據源的情況,例如Contact對象有一個(gè)Address類(lèi)型的對應address,而Address對象又具有兩個(gè)屬性,分別為addressId和addressName,在此種情況下應該使用Eclipse BIRT提供的“Script Data Source”進(jìn)行數據源。如下將通過(guò)實(shí)例展現在Eclipse BIRT中如何使用復合JavaBean作為數據源。
所用環(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 開(kāi)發(fā)實(shí)例
1.2.1 在Java工程中創(chuàng )建復合JavaBean類(lèi)Contact.java
在集成了BIRT的Eclipse中建立Java工程:birtJavaProject,并建立amigo.report包,并在該包下建立復合JavaBean的類(lèi):Contact.java,該類(lèi)的代碼如下所示:
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 )建復合JavaBean的關(guān)聯(lián)JavaBean類(lèi)Address.java
接下來(lái)在amigo.report包下建立Contact類(lèi)關(guān)聯(lián)的JavaBean類(lèi),代碼如下所示:
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 )建數據工廠(chǎng)類(lèi)ContactListFactory.java
在Java工程中還需要創(chuàng )建制造數據的工程類(lèi):ContactListFactory.java,該類(lèi)的代碼如下所示:
package amigo.report;
/** *//**
* 數據制造工廠(chǎng)類(lèi).
* @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)編寫(xiě)完畢,余下的工作是做報表編程。
1.2.4 創(chuàng )建報表工程
在開(kāi)發(fā)環(huán)境中選擇“New”-> “Project”,如下所示:
在彈出對話(huà)框選擇“Bussiness Intelligence…” -> “Report Project”,如下圖所示:
而后點(diǎn)擊“Next >”,在彈出對話(huà)框中輸入報表工程的名稱(chēng)“birtreport”后,點(diǎn)擊“Finish”按鈕完成報表工程的創(chuàng )建。
1.2.5 創(chuàng )建報表
選擇報表工程“birtreport”后點(diǎn)擊右鍵,選擇“New” –> “Report”,如下圖所示:
在彈出窗口中輸入報表的名稱(chēng):helloBirt.rptdesign,點(diǎn)擊“Finish”按鈕完成報表的創(chuàng )建。
1.2.6 創(chuàng )建Scripted數據源
使用JavaBean作為數據源,需要創(chuàng )建Script數據源。首先打開(kāi)“Data Explorer”視圖,(若該視圖被關(guān)閉,請使用“Show View”打開(kāi))。在“Data Explorer”中選擇“Data Sources”->“New Data Source”,如下圖所示:
創(chuàng )建數據源的彈出窗口如下圖所示:
在上述窗口中選擇“Scripted Data Source”,在“Data Source Name”中輸入數據源的名字,例如“Data Source”,點(diǎn)擊“Finish”按鈕完成數據源的創(chuàng )建。
1.2.7 創(chuàng )建數據集
在“Data Explorer”視圖中點(diǎn)擊“Data Sets”->“New Data Set”,彈出窗口如下所示:
在“Data Set Name”中輸入數據集的名稱(chēng),例如“Data Set”,在“Data Source”中選擇剛才創(chuàng )建的Scripted數據源,而后點(diǎn)擊“Next >”按鈕,輸入列名和顯示名稱(chēng)等信息,窗口如下所示:
1.2.8 編寫(xiě)數據訪(fǎng)問(wèn)腳本
打開(kāi)“helloBirt.rptdesign”,切換到“Script”,在“Data Explorer”視圖中選擇剛才創(chuàng )建的數據集,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,簡(jiǎn)單的將我們建立的data set 拖到報表視圖中即可,完成這步以后可以在preview中查看預覽效果了。
1.2.10 部署與瀏覽
將birt-runtime-2_2_1_1目錄下的WebViewerExample工程拷貝到Tomcat的webapps下面,并將helloBirt.rptdesign報表文件拷貝到Tomcat根目錄/webapps/WebViewerExample工程下。
接著(zhù)在:Tomcat根目錄/webapps/WebViewerExample/WEB-INF目錄下建立classes子目錄,存放Java工程中的三個(gè)類(lèi)文件對應的class文件,將birtJavaProject/bin下的amigo目錄整個(gè)拷貝到Tomcat根目錄/webapps/WebViewerExample/WEB-INF/classes目錄,完成報表文件的部署。
訪(fǎng)問(wèn)地址為:
http://localhost:8080/WebViewerExample/frameset?__report=helloBirt.rptdesign在瀏覽器的運行效果圖如下所示:
2. 對JavaBean數據源的數據進(jìn)行分組
2.1 說(shuō)明
在復合JavaBean作為數據源的實(shí)例中,展示了如何進(jìn)行復合JavaBean數據的展示,但是在某些情況下,需要對JavaBean進(jìn)行分組顯示,本實(shí)例將展示如何對JavaBean數據源進(jìn)行分組顯示。
2.2 開(kāi)發(fā)實(shí)例
2.2.1 創(chuàng )建報表
在報表工程中創(chuàng )建報表groupByReport.rptdesign,創(chuàng )建方式與上例一樣。
2.2.2 創(chuàng )建數據源和數據集
因為該實(shí)例的數據源和數據集與上例相同,只需要在“Data Explorer”視圖中將數據源和數據集拷貝到本實(shí)例即可,編寫(xiě)的數據訪(fǎng)問(wèn)腳本和設計的報表也與上例一樣。
2.2.3 對數據進(jìn)行分組
接下來(lái)將向讀者展示如何按照addressId對數據進(jìn)行分組,首先在“Layout”中選擇table后,點(diǎn)擊右鍵,選擇“Insert Group”-> “Above”,如下所示:
彈出的新建分組的窗口如下所示,在窗口中輸入分組的名稱(chēng),例如:addressIdGroup,在“Group on”中選擇“addressId”,在“Interval”中選擇“Interval”,在“Range”中輸入1,如下圖所示:
在上圖中點(diǎn)擊“OK”按鈕完成分組的創(chuàng )建。
2.2.4 部署與瀏覽
部署的方法與上例相似,訪(fǎng)問(wèn)地址為:
http://localhost:8080/WebViewerExample/frameset?__report=groupByReport.rptdesign運行效果如下圖所示:
3. 將BIRT集成到現有Web項目中
3.1 說(shuō)明
在上面的實(shí)例中,將報表和相關(guān)的類(lèi)文件放在BIRT對應的Web項目WebViewerExample中來(lái)進(jìn)行報表的查看和瀏覽,但是在實(shí)際的開(kāi)發(fā)過(guò)程中,已經(jīng)有Web項目,將報表的部分部署到WebViewerExample項目,而其它的部分部署到另一個(gè)Web項目,顯然不太合適,本實(shí)例講解如何將BIRT集成到現有的Web項目中,并進(jìn)行報表的查看。
參考文章:http://blog.csdn.net/bjd14/archive/2006/12/25/1458947.aspx
3.2 集成實(shí)例
3.2.1 新建項目的Web工程
在MyEclipse新建一個(gè)Web Project,名為reportintegration,將上例中的amigo.report包以及其下的所有三個(gè)類(lèi)(Contact.java、Address.java和ContactListFactory.java)拷貝到src目錄下。并將helloBirt.rptdesign和groupByReport.rptdesign兩個(gè)報表文件拷貝到WebRoot目錄下。
3.2.2 拷貝BIRT的Web項目WebViewerExample的文件
打開(kāi)Tomcat下的WebViewerExample項目,其目錄結構如下圖所示:
將該目錄下的兩個(gè)子目錄report和webcontent拷貝到工程的WebRoot目錄下。
接下來(lái)進(jìn)入WebViewerExample"WEB-INF目錄,目錄結構如下所示:
將lib、platform和tlds三個(gè)子目錄拷貝到Web工程的WebRoot"WEB-INF目錄,并拷貝server-config.wsdd、viewer.properties和web.xml三個(gè)文件。到此所有文件都拷貝完畢。Web工程的結構如下圖所示:
lib目錄的結構如下圖所示:
3.2.3 部署與瀏覽
部署reportintegration到Tomcat下,啟動(dòng)成功后,訪(fǎng)問(wèn)路徑類(lèi)似如下所示:
http://localhost:8080/reportintegration/frameset?__report=groupByReport.rptdesign運行效果與上例一樣,不再贅述。
3.2.4 訪(fǎng)問(wèn)參數說(shuō)明
在訪(fǎng)問(wèn)時(shí),路徑實(shí)例如下所示:
http://localhost:8080/reportintegration/frameset?__report=groupByReport.rptdesign其中”__report”表示訪(fǎng)問(wèn)的報表文件的路徑,若將groupByReport.rptdesign報表文件拷貝到WebRoot/report目錄下,則訪(fǎng)問(wèn)路徑變成:
http://localhost:8080/reportintegration/frameset?__report=report/groupByReport.rptdesign其它訪(fǎng)問(wèn)參數的說(shuō)明如下所示:
選項
說(shuō)明
__format
報表輸出格式:html或pdf,缺省是html。對于frameset不起作用。
__isnull
指明一個(gè)參數是null,常用于字符串類(lèi)型。如果提供參數且值為空: - 對于日期和數字類(lèi)型,BIRT會(huì )將它們當作null處理。 - 對于字符串,BIRT會(huì )將它作為空字符串。因此,為了說(shuō)明某個(gè)字符串是null,通常寫(xiě)為:__isnull=參數。
__locale
本地化選項,缺省是jvm的locale。
__report
報表設計文件路徑。
報表參數
報表參數參數值對,形式:參數名=參數值。對于frameset,直接在地址欄中輸入參數名=參數值后回車(chē),不會(huì )影響報表結果。雖然,此時(shí)選擇"運行報表"時(shí),彈出的參數值已經(jīng)改變。
posted on 2009-05-03 12:11