posts - 297,  comments - 1618,  trackbacks - 0
           

          1.    復(fù)合JavaBean數(shù)據(jù)源

          1.1 說明

          在使用Eclipse BIRT進(jìn)行報表開發(fā)時,會遇到使用復(fù)合型的JavaBean作為數(shù)據(jù)源的情況,例如Contact對象有一個Address類型的對應(yīng)address,而Address對象又具有兩個屬性,分別為addressIdaddressName,在此種情況下應(yīng)該使用Eclipse BIRT提供的“Script Data Source”進(jìn)行數(shù)據(jù)源。如下將通過實例展現(xiàn)在Eclipse BIRT中如何使用復(fù)合JavaBean作為數(shù)據(jù)源。

          所用環(huán)境說明:

          IDE環(huán)境: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 開發(fā)實例

          1.2.1 Java工程中創(chuàng)建復(fù)合JavaBeanContact.java

          在集成了BIRTEclipse中建立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)JavaBeanAddress.java

          接下來在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工程中還需要創(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)編寫完畢,余下的工作是做報表編程。

          1.2.4 創(chuàng)建報表工程

          在開發(fā)環(huán)境中選擇“New-> Project”,如下所示:


          在彈出對話框選擇“Bussiness Intelligence… -> Report Project”,如下圖所示:

           


          而后點擊“Next  >,在彈出對話框中輸入報表工程的名稱“birtreport”后,點擊“Finish”按鈕完成報表工程的創(chuàng)建。

          1.2.5 創(chuàng)建報表

                   選擇報表工程“birtreport”后點擊右鍵,選擇“New –> Report”,如下圖所示:


           

          在彈出窗口中輸入報表的名稱:helloBirt.rptdesign,點擊“Finish”按鈕完成報表的創(chuàng)建。

          1.2.6 創(chuàng)建Scripted數(shù)據(jù)源

          使用JavaBean作為數(shù)據(jù)源,需要創(chuàng)建Script數(shù)據(jù)源。首先打開“Data Explorer”視圖,(若該視圖被關(guān)閉,請使用“Show View”打開)。在“Data Explorer”中選擇“Data Sources->New Data Source”,如下圖所示:
               

          創(chuàng)建數(shù)據(jù)源的彈出窗口如下圖所示:


           

          在上述窗口中選擇“Scripted Data Source”,在“Data Source Name”中輸入數(shù)據(jù)源的名字,例如“Data Source”,點擊“Finish”按鈕完成數(shù)據(jù)源的創(chuàng)建。

          1.2.7 創(chuàng)建數(shù)據(jù)集

          在“Data Explorer”視圖中點擊“Data Sets->New Data Set”,彈出窗口如下所示:


           

          在“Data Set Name”中輸入數(shù)據(jù)集的名稱,例如“Data Set”,在“Data Source”中選擇剛才創(chuàng)建的Scripted數(shù)據(jù)源,而后點擊“Next >”按鈕,輸入列名和顯示名稱等信息,窗口如下所示:


           

          1.2.8 編寫數(shù)據(jù)訪問腳本

          打開“helloBirt.rptdesign”,切換到“Script”,在“Data Explorer”視圖中選擇剛才創(chuàng)建的數(shù)據(jù)集,open對應(yīng)的腳本如下所示:

          count = 0;

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

          c = cf.createContactList();

          對應(yīng)圖形如下所示:


           

          在“Script”的下拉框中選擇“fetch”,對應(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è)計報表視圖

          視圖中選擇layout,簡單的將我們建立的data set 拖到報表視圖中即可,完成這步以后可以在preview中查看預(yù)覽效果了。

          1.2.10 部署與瀏覽

          birt-runtime-2_2_1_1目錄下的WebViewerExample工程拷貝到Tomcatwebapps下面,并將helloBirt.rptdesign報表文件拷貝到Tomcat根目錄/webapps/WebViewerExample工程下。

          接著在:Tomcat根目錄/webapps/WebViewerExample/WEB-INF目錄下建立classes子目錄,存放Java工程中的三個類文件對應(yīng)的class文件,將birtJavaProject/bin下的amigo目錄整個拷貝到Tomcat根目錄/webapps/WebViewerExample/WEB-INF/classes目錄,完成報表文件的部署。

          訪問地址為:

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

          在瀏覽器的運(yùn)行效果圖如下所示:

          2.    JavaBean數(shù)據(jù)源的數(shù)據(jù)進(jìn)行分組

          2.1 說明

          在復(fù)合JavaBean作為數(shù)據(jù)源的實例中,展示了如何進(jìn)行復(fù)合JavaBean數(shù)據(jù)的展示,但是在某些情況下,需要對JavaBean進(jìn)行分組顯示,本實例將展示如何對JavaBean數(shù)據(jù)源進(jìn)行分組顯示。

          2.2 開發(fā)實例

          2.2.1 創(chuàng)建報表

          在報表工程中創(chuàng)建報表groupByReport.rptdesign,創(chuàng)建方式與上例一樣。

          2.2.2 創(chuàng)建數(shù)據(jù)源和數(shù)據(jù)集

          因為該實例的數(shù)據(jù)源和數(shù)據(jù)集與上例相同,只需要在“Data Explorer”視圖中將數(shù)據(jù)源和數(shù)據(jù)集拷貝到本實例即可,編寫的數(shù)據(jù)訪問腳本和設(shè)計的報表也與上例一樣。

          2.2.3 對數(shù)據(jù)進(jìn)行分組

          接下來將向讀者展示如何按照addressId對數(shù)據(jù)進(jìn)行分組,首先在“Layout”中選擇table后,點擊右鍵,選擇“Insert Group-> Above”,如下所示:

          彈出的新建分組的窗口如下所示,在窗口中輸入分組的名稱,例如:addressIdGroup,在“Group on”中選擇“addressId”,在“Interval”中選擇“Interval”,在“Range”中輸入1,如下圖所示:


           

                   在上圖中點擊“OK”按鈕完成分組的創(chuàng)建。

          2.2.4 部署與瀏覽

                   部署的方法與上例相似,訪問地址為:

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

                   運(yùn)行效果如下圖所示:


           

          3.    BIRT集成到現(xiàn)有Web項目中

          3.1 說明

                   在上面的實例中,將報表和相關(guān)的類文件放在BIRT對應(yīng)的Web項目WebViewerExample中來進(jìn)行報表的查看和瀏覽,但是在實際的開發(fā)過程中,已經(jīng)有Web項目,將報表的部分部署到WebViewerExample項目,而其它的部分部署到另一個Web項目,顯然不太合適,本實例講解如何將BIRT集成到現(xiàn)有的Web項目中,并進(jìn)行報表的查看。

                   參考文章: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項目,其目錄結(jié)構(gòu)如下圖所示:


           

                   將該目錄下的兩個子目錄reportwebcontent拷貝到工程的WebRoot目錄下。

                   接下來進(jìn)入WebViewerExample"WEB-INF目錄,目錄結(jié)構(gòu)如下所示:


           

                   libplatformtlds三個子目錄拷貝到Web工程的WebRoot"WEB-INF目錄,并拷貝server-config.wsddviewer.propertiesweb.xml三個文件。到此所有文件都拷貝完畢。Web工程的結(jié)構(gòu)如下圖所示:


                   lib目錄的結(jié)構(gòu)如下圖所示:


          3.2.3 部署與瀏覽

                   部署reportintegrationTomcat下,啟動成功后,訪問路徑類似如下所示:

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

          運(yùn)行效果與上例一樣,不再贅述。

          3.2.4 訪問參數(shù)說明

          在訪問時,路徑實例如下所示:

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

          其中”__report”表示訪問的報表文件的路徑,若將groupByReport.rptdesign報表文件拷貝到WebRoot/report目錄下,則訪問路徑變成:

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

          其它訪問參數(shù)的說明如下所示:

          選項

          說明

          __format

          報表輸出格式:htmlpdf,缺省是html。對于frameset不起作用。

          __isnull

          指明一個參數(shù)是null,常用于字符串類型。如果提供參數(shù)且值為空: - 對于日期和數(shù)字類型,BIRT會將它們當(dāng)作null處理。 - 對于字符串,BIRT會將它作為空字符串。因此,為了說明某個字符串是null,通常寫為:__isnull=參數(shù)。

          __locale

          本地化選項,缺省是jvmlocale

          __report

          報表設(shè)計文件路徑。

          報表參數(shù)

          報表參數(shù)參數(shù)值對,形式:參數(shù)名=參數(shù)值。對于frameset,直接在地址欄中輸入?yún)?shù)名=參數(shù)值后回車,不會影響報表結(jié)果。雖然,此時選擇"運(yùn)行報表"時,彈出的參數(shù)值已經(jīng)改變。

          posted on 2009-05-03 12:11 阿蜜果 閱讀(14952) 評論(11)  編輯  收藏 所屬分類: Eclipse BIRT


          FeedBack:
          # re: Eclipse BIRT問題解決匯總(不斷更新)
          2009-05-04 10:30 | 谷百優(yōu)
          谷百優(yōu)支持你  回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)[未登錄]
          2009-05-04 13:01 | james
          真麻煩,做個報表要寫這么多代碼...
            回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)
          2009-05-05 10:16 | 谷百優(yōu)
          頂。。。。。。。。  回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)[未登錄]
          2009-05-07 00:08 | fantasybei
          mm,好久不見你寫blog阿,呵呵  回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)
          2009-05-13 17:01 | 導(dǎo)導(dǎo)
          你叫謝星星?  回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)[未登錄]
          2009-05-21 14:13 | 1
          好像不對啊
          報錯
          我最近才開始學(xué)習(xí)birt  回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)
          2009-06-02 09:34 | sgwood
          還有個close方法沒寫  回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)[未登錄]
          2009-09-03 10:20 | Glen
          支持 條理清晣的詳盡實用教學(xué)。  回復(fù)  更多評論
            
          # 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




            回復(fù)  更多評論
            
          # 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; 這里少復(fù)制了一句return false; 結(jié)果 總是報錯. 不清楚是什么原因. 因為剛剛接觸birt. 不了解script數(shù)據(jù)庫 所以耽誤了很多時間... 希望大家引以為戒.
          當(dāng)前報表的script的下拉close事件里面 加上cf = null; c = null;
            回復(fù)  更多評論
            
          # re: Eclipse BIRT問題解決匯總(不斷更新)
          2013-06-25 18:47 | 路過
          試過了,我這兩天開始學(xué)的,看到這個初學(xué)不錯。但是有些問題里面
          我用的事4.2版本
          1)需要把java工程下的那個編譯好的包copy到eclipse下的plugins\org.eclipse.birt.report.viewer_4.2.2.v201302041142\birt\WEB-INF\classes下面,否側(cè)是報表時會報錯誤的。
          2)按地址分組時候,我按圖設(shè)置了interval,報錯。不需要設(shè)置這項  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

                生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關(guān)注blog

          積分與排名

          • 積分 - 2296483
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 禄劝| 太谷县| 朝阳市| 广州市| 托里县| 鲁山县| 湖口县| 邛崃市| 木里| 临武县| 门源| 抚松县| 讷河市| 卫辉市| 华安县| 抚顺市| 浑源县| 辽源市| 连南| 赤水市| 淳安县| 无极县| 松原市| 沙湾县| 万安县| 明星| 汕尾市| 元朗区| 高唐县| 神农架林区| 全椒县| 武鸣县| 哈密市| 新绛县| 罗江县| 云阳县| 牟定县| 得荣县| 客服| 定西市| 吉木萨尔县|