當前位置:首頁 » 編程軟體 » birt腳本

birt腳本

發布時間: 2022-05-16 09:05:54

⑴ 幾種流行BI的比較(轉)

�0�2�0�2�0�2�0�2�0�2�0�2 目前國內市場上的報表工具可謂五花八門,從各廠商的介紹來看,這些產品的功能有相當部分是重疊的,為了區分它們往往需要了解它們功能的實現機制和最終達到的效果以確定產品是否符合實際應用需要。一輛好的車子是駕駛者的延伸;一個好的報表工具是使用者的延伸。這個表述看似有點兒玄,其實很實在,要真正做到卻又非常難。報表工具的使用者與駕駛者有一個共通的地方,那就是他們中的大部分人都不是機械或電子專業出身的,他們需要一個得心應手的工具來幫助他們做想做的事情。報表工具如何才算得上得心應手?你可發現有很多回答,歸納起來,不外以下幾方面: 交互性:電子報表有別於傳統紙質報表的靈性,是報表服從於人、提高人的工作效率的關鍵; 易用性:報表開發工具的易用性和報表使用的容易程度是判別報表工具好壞的重要標准; 可擴展性:系統性能隨硬體增加而提升,是企業級報表系統與非企業系統的分水嶺; 安全性/可靠性:完善的許可權控制,標准化的數據安全介面,低故障率以及故障後的可恢復性; 完整性:能滿足各種信息展現要求,能覆蓋各種類型數據源和格式,能部署到各種應用環境。筆者挑選了在國內外市場上表現活躍且據代表性的幾個產品:Business Object (SAP) 的Crystal Report、Actuate、潤乾報表、Jasper Report來做一個深入的比較,幫助有興趣的讀者進一步地了解它們。上述產品均具不同的特性:Crystal Report的應用非常廣泛,在不同行業、規模的應用里都可以看到它的身影;Actuate是專業的企業報表工具,以e.Report為代表的一系列產品在國際上有很長的歷史,早期被廣泛應用於金融、電信、政府等較大規模的企業、組織,近來也開始關注中小型企業,推出了全新BIRT系列產品;潤乾報表是國內報表的後起之秀,在中式報表的支持上很有特色;Jasper Report則是一款開源產品,使用無需授權費。1.交互性�0�2�0�2�0�2�0�2�0�2�0�2 紙質報表所承載的信息是固定的,當人們想進一步了解報表上某些數據時,沒人會指望它會主動「開口」予以解答。單向、無反饋的信息傳播過程是紙制報表最大的軟肋,這使得人們不得不在查找數據上花費大量時間。電子報表工具產生初期,電子報表與紙質報表差別並不太大,只是用屏幕代替了紙張。隨著技術的進步,電子報表的交互性越來越強,擁有了能與用戶溝通的「智慧」。人們不再需要為查找某項數據就將整張報表翻遍;通過簡單操作就能重組、排列報表上的數據;並能通過創建圖表的形式把需要的數據展現在人們眼前。於是,在選擇電子報表工具時,人們慢慢地將交互性作為重要的考核指標,因為他們需要一份「活」的報表!基於Web的互動性給報表工具設計者帶來了很大的挑戰。很長一段時間里,瀏覽器應用的交互性遠遠不及桌面應用,因為用戶在瀏覽器界面的操作是由遠方的伺服器來響應的。互聯網的速度、伺服器的性能和當時的數據交換協議都難以勝任交互性很強的應用任務。但Web 2.0的出現大大改變了這種狀況,使得基於Web的應用也能帶有很強的交互性。對交互性的支持成為了報表產品炙熱的競爭焦點,特別是基於Web 2.0的交互性。「這是一個奇妙的良性循環過程:對報表軟體供應商而言,產品擁有更強的交互性就等於擁有更強的『人氣』;而客戶對產品更加『忠誠』,報表產品的市場競爭力也會相應提高,」業內流傳著這樣的看法。Crystal和Actuate的報表在交互性方面都有不錯的表現,但Actuate在對Web 2.0的支持上走在了前面。Actuate BIRT的互動式報表瀏覽界面能通過標准Web 2.0調用、嵌入到任何Web頁面,功能與Google地圖十分相似,而且Actuate BIRT的交互功能幾乎是不受限制的。而Crystal Report的交互功能則必須在報表設計時預定且不支持基於標準的調用,這是它與Actuate最大的區別。相比之下,其它兩個產品在交互性方面的開發尚未進入狀態,還不能提供類似的功能。這也是Crystal Report和Actuate作為兩家成熟的商業報表軟體供應商在技術上的優勢。2.易用性�0�2�0�2�0�2�0�2�0�2 大多數的電子報表用戶都沒有專業IT背景,他們面對電子報表的第一反應大概會與互聯網剛開始普及時,人們面對各類網站網頁不知所措的樣子差不多。對於企業來說,他們想要的報表工具是服務於全體員工甚至是客戶的。「怎麼能讓非專業人士在短期內掌握報表工具的使用?」,這一問題很大程度上取決於報表工具本身是否容易被掌握,也就是報表工具的易用性。報表工具的易用性主要包括報表設計、報表查看兩個層面。設計的易用性主要體現在:能很容易地創建數據源、數據集;能很方便地調用函數、過程處理數據;擁有多種將復雜數據資料展現在二維平面上的形式等方面。而查看的易用性是指報表用戶能不費周折地得到自己所需的信息。這里涉及到報表的設計合理性和展現工具的靈活性(如上一節所提及的交互性),因為如果報表工具不具有展現的靈活性,報表設計工作的難度會更高。Crystal Report在易用性方面相當具有優勢。在報表設計方面,Crystal Report有一款基於瀏覽器的報表設計工具:Web Intelligence,此外,Crystal Report還向用戶提供了一個報表設計向導,用戶可通過該向導按部就班地向報表內添加數據、圖表等元素。在對儀表盤的支持上,Crystal Report也下了不少功夫,它的Xcelsius線能讓用戶非常容易地使用儀表盤。總之,報表設計直觀明了且不需要過多專業培訓是Crystal Report的一大特點。在報表查看方面,Crystal Report可以支持互動式報表,這點之前已討論過了。與Crystal Report的「傻瓜相機」式設計理念相比,安訊的e.Report可謂是一台專業相機,能拍出別人拍不出的效果,但與此同時,它對使用者的要求也更高。e.Report的難用是業內有名的,不過仍有很多企業選擇e.Report的原因是因為它能做出別人做不到的排版效果。安訊最新的百靈報表(BIRT)則吸取了e.Report這方面的教訓。BIRT設計器的界面採用了Eclipse的風格,實現了「拖拽式」設計,可以完全不依賴編程。同時,提供了類似於Web Intelligence的Business Report Studio,用戶可在瀏覽器上設計報表或對報表結構、內容、格式進行調整。這種「全民皆兵」的設計方式不但較易被初學者掌握而且使得BIRT的使用者也能參與報表開發。此外,在中式報表方面,BIRT考慮到了國內用戶的實際需要,支持斜線表頭、信息回填等功能。在報表查看方面,安訊的BIRT系列報表可能是目前查看方式最完整的互動式報表。通過一個互動式報表瀏覽器,任何BIRT報表都可以「活」起來,該互動式報表瀏覽器還可通過Web 2.0的調用集成到任何Web頁面,這點是任何其它產品都沒有做到的。潤乾報表在易用性方面的表現主要集中在中式報表設計上。在斜線表頭方面,如果說BIRT的斜線表頭只能用圖片粘貼方式來完成的話,潤乾則將其進一步地功能化,用戶可在設計欄中找到斜線表頭的單獨選項。信息回填方面,用戶可從不同來源、等級的數據中找到相應元素並將其添入新報表,而且這種功能是不受聯機或離線的影響的。作為一個開源產品,Jasper Report在易用性方面的表現已是相當不錯的了。一般的報表設計問題,如創建數據源、設計表格、圖表、導出格式等,Jasper Report的設計器都能不錯地進行處理。不過,雖然它的易用性表現已相當不錯,Jasper Report在功能上仍遠遠不及其它幾款商業報表工具。3.可擴展性�0�2�0�2�0�2�0�2�0�2�0�2�0�2 所有企業都希望能購買到一套功能可滿足所有需要的報表工具。但幾乎沒有人能完全預知企業未來的擴展需求。這就涉及到了報表功能、性能的可擴展性問題。Crystal Report在功能擴展方面的特點是與.net平台的「聯手」,除其自帶功能外,用戶還可以利用.net平台上的其它功能。不過,除.net平台外,用戶基本上不能將其它應用軟體中的報表功能補充到Crystal Report之中,而Crystal Report的功能本身也沒有可擴展性,這點不足在中式報表應用上尤為突出。安訊百靈報表BIRT的前身是開源的Eclipse BIRT,它具備了一個可擴展性非常強的架構,預置了很多擴展介面(Extension Point),且支持腳本語言。用戶可以根據需要通過擴展介面和腳本向BIRT添加功能。這點對於OEM廠商以及項目開發者是非常有吸引力的,因為BIRT有很好的「可塑性」。除功能可擴展性外,報表產品性能的可擴展性也是很重要的一方面。報表系統必須能夠應付不斷增加的使用人數和報表。理想情況下,報表只需增加硬體設備就能完成對其性能的提升。但不是所有的工具都能做到這點,大部分的報表工具能用上兩、三個CPU就已很不錯了。安訊的報表平台iServer是業內公認的最具有可擴展性的平台。根據權威機構IBM Innovation Center的測試數據:「安訊iServer報表平台能夠從1台擴展到16台伺服器(共64個CPU),做到近乎線性的擴展。」目前在業內還沒有第二個產品能夠交出這樣的成績單。Crystal Report Enterprise和潤乾報表都支持集群,也能擴展到數千用戶的大級別的應用,但由於擴展的效率不如安訊平台,所以需要更多伺服器和CPU。Jasper Report作為一個免費的軟體,在性能方面沒有太多的優勢,能夠支持共線用戶已經足夠讓人滿意了。4.安全性/可靠性�0�2�0�2�0�2�0�2�0�2�0�2 安全性指的是信息不會丟失、不會落到沒有授權的人手裡,這點在企業應用中尤為重要,因為報表平台上的信息必須要做到有控制的共享。安全性存在於用戶終端和報表後台系統。前者往往易被忽略,因而也最容易出現問題。在用戶終端,安裝瀏覽器插件和改變瀏覽器安全配置都會對用戶端的安全性產生很大影響,因為它們都存在潛在的風險,會為「惡意程序」提供可乘之機。換句話說,不安裝插件、不改變用戶的安全設置,對用戶才是安全的。另一方面,報表後台系統的安全性主要體現在對用戶的許可權管理、對數據的加密及對數據訪問的控制。數據訪問控制涉及一個的寬窄度問題,指的是訪問權的授權單位的大小,比如說,最「寬」的許可權管理可能是控制用戶能否登錄系統;略窄一些則可能是控制用戶能否訪問特定目錄和文件;許可權再窄一點就可能是控制用戶能否訪問特定的數據行和報表頁了。Crystal Report Enterprise和Actuate iServer平台的安全機制是基於「用戶與角色的安全模型」,通過該安全模型控制系統內部的各種報表、程序、資源等的訪問權。此外,它們也提供與外部安全系統結合的介面,能把報表系統與環境的安全機制融為一體。而兩個產品最大的差別在於Crystal Report的數據訪問控制是基於數據行,而Actuate是基於報表頁或電子表格的單元,而基於頁的控制對用戶來講可能更直觀易用。潤乾報表的安全機制是基於用戶的,訪問權一般授予用戶,不支持更細化的數據訪問控制。Jasper Report的安全控制由部署環境實現。與安全性相比,可靠性的含義就更為直觀了。對用戶而言,可靠性就是系統能讓人更放心地使用。目前的計算機系統還不能保證100%不出問題,但一個好的系統應該很少出問題,就算有問題也不會是那種「惡性事故」,導致信息丟失、系統崩潰等難以挽回的局面。所以,系統出問題後,能夠盡快恢復才是最實際的。報表應用的可靠性不僅是一個軟體質量問題,還是一個架構問題。有的架構對環境和第三方依賴很大,「命運」不掌握在自己手上,就會存在不少外在的可靠性風險。Crystal Report與Actuate都已發展多年,在產品的研發方面都有極大的投入,兩個品牌在國際上也各自擁有很多大客戶。它們的產品經受住了時間的考驗,在可靠性方面是令人放心的。Crystal與Actuate都支持故障轉移,並能通過配備後備伺服器、硬碟的方式增加系統可靠性。相比之下,潤乾報表和Jasper Report還沒有太長的歷史,難以對它們的可靠性作出總結。而從系統架構來講,Jasper Report的部署需要第三方的應用伺服器,系統的可靠性有賴於所選的應用伺服器的可靠性。此外,Jasper Report 和潤乾報表都沒有自主的故障轉移能力,它們這部分的能力是依賴部署環境的,存在很大的局限性,發生問題時,很難辨別是報表系統本身的問題還是部署環境問題。5.完整性�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 報表工具的完整性主要體現在它是否具有強大的信息展現功能;能否覆蓋不同類型的數據源和格式;能否部署、集成在不同的運行平台和環境。大多數的主流報表工具都具有相當出色的完整性,因而才能夠在激烈的競爭中佔有一席之地。他們共通的方面,就不在此贅述,只就它們的差異,做一些說明:對Excel的支持:微軟Excel是最常用的數據分析、展現工具,因此兼容Excel成為了很多報表工具的追求。從兼容的效果來看,Actuate e.Spreadsheet可謂接近完美,除不能輸出靜態圖片外,幾乎能100%地支持Excel的功能。與之相比,其它系統對Excel的支持,只能做到數據層面,輸出的是一張「看上去像Excel」的表格,卻不能像e.Spreadsheet那樣做到輸出帶公式圖表的XLS文件。比如,潤乾報表的編輯界面看似Excel,但潤乾報表卻不真正兼容Excel。對Flash Object的支持:Flash Object能給報表頁面帶來生氣,在很多場合都能夠用得上。Crystal Report是最先實現Flash Object的,而較晚起步的Actuate BIRT支持的種類、式樣更多更全,大有青出於藍勝於藍的勢頭。其他的兩個工具還不具備對Flash Object的支持。對儀表盤的支持:儀表盤式的應用非常廣泛,市面上也已有許多專用儀表盤軟體。面對專用儀表盤軟體造成的沖擊,報表工具廠商也不得不加強對儀表盤的支持。經過努力,報表工具所支持的儀表盤仍然具有靈活性上的優勢。在這方面Crystal Xcelsius做的最為出色,能輕松的產生儀表盤報表。Actuate BIRT也具備了相當不錯的儀表盤支持,它擁有了最接近專用儀表盤軟體的功能設計。對腳本的支持:腳本是補充報表工具自帶功能不足的有效手段。高級報表設計人員往往能利用腳本,編制出一些富有創意的報表。對腳本的支持也是Actuate的傳統優勢,Actuate e.Report支持Basic作為腳本語言;Actuate BIRT支持java Script/Java作為腳本語言。而目前其它幾個報表工具對腳本的支持均遠沒有Actuate做得那麼完善。對集成的支持:潤乾報表,Jasper Report和Actuate的BIRT/e.Spreadsheet報表都能以「引擎」方式嵌入到第三方應用。在單獨部署時,他們都有J2EE的展現層,有基於標準的調用介面,能方便地集成到其它網路應用中,Actuate更是支持Web 2.0,使其能更為方便地集成到網頁上。相比之下,Crystal Report是個比較封閉的系統,它自成一體,必須整塊使用,集成非常有限而且沒有太多可個性化的東西供用戶應用。以上是筆者對國內市場上熱門報表應用產品:BO Crystal Report、Actuate、潤乾報表和Jasper Report之間比較的一點心得。雖然,這四個產品的很多功能是重疊的,但經過較為深入的比較可以看出,它們功能的實現質量和達到的效果還是存在著明顯的差別。如果讀者能從中領會到這些產品相異的地方,對選擇合適的報表工具必定會有幫助。

⑵ 在birt中如何編寫腳本使默認全部查詢

查詢參數帶進去的時候直接默認百分號%即可

⑶ brit 在java中怎麼調試

Birt 中的通過Script加入調試輸出sql語句代碼

用Brit製作報表時可通過在Script腳本中加入以下代碼輸出所執行的SQL語句。
在Script的 BeforeOpen 事件中加入
importPackage( Packages.java.io );
out = new PrintWriter( new FileWriter("c:/debuginfo.txt", true ) );
out.println("queryText:--$amp;>quot;$+ this.queryText);
out.close();

⑷ 基於eclipse的birt報表能進行斷點調試嗎

birt中的js腳本不能用alert直接彈出提示,也沒有辦法用斷點跟蹤進行調整。如果你要用birt進行調試的話,有一個簡單的方法:列印,在腳本里寫上

importPackage(Packages.java.lang);
System.out.println("test===");

就可以在控制台里列印出來,進行簡單的調試了,但是報表必須部署在tomcat下才能列印。如果你想要進行斷點調試的話,據說finereport可以。

⑸ 如何在birt4.2.1中添加日歷控制項

CSDN上搜到的,,你試試..雖然不建議在birt上添加日歷,,沒什麼太大的意義啊. 一個用來展示的東西你不應該賦予他太多的功能,完全可以在進入birt之前把需要的參數定義好!!

http : / / download . csdn.net/download/xxgcxyweijun/2182507

birt 日歷控制項已經實現 。
1、首先需要引入一個Calendar.js腳本,將此腳本放置於WebRoot>webcontent>birt>ajax>utility下
2、先在FramesetFragment.jsp中對梅花雨控制項進行引用.
<script src="birt/ajax/utility/Calendar.js" type="text/javascript"></script>
3、修改TextBoxParameterFragment.jsp
在textbox中加入onclick事件
<%if (encodedParameterName.indexOf("Time")>=0) {%>
onclick="calendar()"
<%} %>
因為我不知如何判斷它是否為日期型,所以只好在判斷它的name中是否包括『Time』。在命名參數時再加以限制。

⑹ birt報表和潤乾報表使用上的比較

我理想中的報表工具(或:報表選擇注意五個過程)
最近兩個項目實在是被報表頭都搞大,我們在項目中一直用birt作為報表工具(這里感謝安訊把birt開源了),BIRT是一個Eclipse-based開放源代碼報表系統。它主要是用在基於Java與J2EE的Web應用程序上。BIRT主要由兩部分組成:一個是基於Eclipse的報表設計和一個可以加到你應用服務的運行期組件。BIRT同時也提供一個圖形報表製作引擎。
它具有如下優點:
1)操作界面友好大方,各種提示信息直觀清晰,界面,圖標都很漂亮:尤其是對報表的開發布局劃分的很科學,一般的報表工具只有設計和預覽兩個界面,BIRT有正常主頁,XML源,布局,預覽,腳本多個設計布局。
2)集成在Eclipse中,不用再開啟別的報表開發工具窗口。
3)BIRT的本地化做的很好,安裝以後操作界面就是中文的。
4)開源的報表產品,降低開發成本,一些報表開發工具價格相當昂貴。
但是birt存在如下缺點;
1)如果遇到問題,只能藉助互聯網。雖然可以找安訊,但是感覺不劃算,認為都開源了,還要給安訊交錢,不如自己多花時間研究研究,說不定就能解決。(呵呵,這里不要笑話我這種程序員,死腦筋!)
2)birt沒有填報(或者表單功能),常見系統不光要展現數據還要錄入數據。於是我們要在錄入數據上花大量時間去做開發。
3)由於birt使用條帶的報表模型,很多中國復雜報表做不了。幾次在項目中,我們不能使用birt做出來客戶要求的報表,不但要向客戶多次解釋,而且最終鬧得有些不愉快,大大降低客戶滿意度。
4)滿足個性化需求是社會趨勢,但是使用birt,基本上讓客戶自定義報表不可能,(雖然我知道用戶可能最終定製報表數量有限,但是我個人覺得當用戶能自定義簡單的報表是應該的)遇到困難怎麼辦,不能抱怨了,要想辦法解決,向同行咨詢,問客戶意見,發現購買商業報表一種可行方案。
經過多方取證和調查,我感覺應該從一下五個方面來考察報表價值,如果有不足希望大家批評指正:
1. 報表合同價格。報錶行業購買方式一般是按照伺服器來授權,細微區別可能在按功能或者並發來確定價格高低。如果按照伺服器授權方式,個人感覺價格應該在五萬以下,當然具有報表之外的功能,可以適當加價。但是如果光一個報表模塊就報價幾十萬,感覺基本沒有談必要,特別遇到要部署幾十個伺服器的大項目。感覺基本沒有談的必要,無論怎麼打折,都很難達到理性價格。如果,用戶付費,為報表這個模塊就要付出這么大代價,用戶可能選擇競爭對手的方案,如果軟體開發公司付費,我看不如自己投人力改造開源報表,
2. 報表產品易用性。購買報表產品目的是加快開發進度,減少報表維護量,增加客戶滿意度。如果報表設計過程中,報表設計器沒有充分考慮設計者,比方設置一個報表背景圖片,報表只保存圖片相對路徑,如果移動報表那麻煩就大了,這些方面建議報表公司向excel學習,比方製作報表需要編寫大量表達式,一個簡單功能還要寫一行表達式,不能通過拖拽來生成,這方面建議報表工具可以向dreamweaver學習。在那些報表數量比較大項目中,要特別注意報表易用性,否則設計者會瘋了,還不如去coding了。
3. 使用報表過程中享受報表公司的服務。我感覺如果遇到報表公司的銷售人員不懂技術,一定要謹慎,很可能出現收錢人(態度好),幫忙解決問題的人(另外一個態度)。
作為銷售人員,應該是懂技術好,有問題,直接找銷售人員就可以解決(當然比較復雜問題,肯定還是要聯系報表公司的技術人員)。如果銷售人員不懂技術,我想可能有一下幾個原因:
1)公司人員流動性比較大,剛進來,還沒有熟悉產品,要找個技術人員陪同。
2)產品過於復雜,難以理解,讓銷售人員沒有辦法學會自己產品。
3)可能銷售人員把心思放在通過手段來推銷產品,而不是幫助客戶解決所有問題這種方式來銷售。
打聽公司服務可以通過以下幾種方式:
1)向朋友打聽,看看他們對各個報表公司評價。
2)通過網路調查,自從進入web2.0時代後,網上能搜多關於報表公司評價,比方:it公司速查手冊,技術人員blog。
3)去報表公司官方平台上,看報表公司有沒有和客戶互動活動(互動活動說明這個公司比較關心客戶體驗),去論壇看幫助其他用戶解決問題速度,如果一個公司連論壇都沒有或者不維護,說明報表公司不想通過一種免費方式幫助客戶解決問題,通俗點可能被試用客戶整煩了。
4)休息時間給公司打電話,如果有人接電話,可能意味著這個公司戰鬥力強,也可能他們在幫助客戶解決問題(做項目的客戶加班是常事)。

4.項目上線之後能否提高客戶滿意度。如果沒有達到這個目的,就沒有購買商業軟體的價值。比方,能滿足客戶簡單自定義報表需求,能提高報表展現時間速度,能把客戶想到報表都能設計出來。
5.第一次購買之後合作價格。由於軟體付費中有很大一部分是軟體服務成本,我想隨著對軟體越來越熟練,報表廠商的服務成本會越來越低,所以以後軟體購買價格最好不要高於第一次購買價格,當然如果價格漲幅沒有超過cpi指數也是可以接受。

以上是我想到的報表選擇中注意事項,

附上,現在我司在用finereport

⑺ 關於birt 報表結合 web項目,採用script數據源的問題

我4月份剛開發完了一個BIRT項目。我也用的是BIRT 4.2,然後我有很多birt報表用的也是script datasource。

你用的什麼伺服器?我用的tomcat和jboss,兩個都可以順利跑在windows和linux環境,絕對沒有java heap space。

1.首先你的服務類,就是從資料庫讀數據的java class絕對不應該放在WEB-INF\lib下面。你apps打包打得對嗎?

2.至於你的頁面跑不出來,我想問數據量多少?在sql裡面跑那個query要用多久?

3.你留個郵箱我可以給你例子。

⑻ birt的onrender怎麼輸出html標簽

birt的話不是很清楚,而且也沒有找到類似的資料,只能和題主講下我用的finereport的方法了,題主可以作為參考,應該是差不多的。

新建一個空白html,在裡面添加一個按鈕和一個iframe,其中iframe指向工程中的某張填報報表。

onclick="document.getElementById('reportFrame').contentWindow.contentPane.()"

⑼ birt腳本如何操作結果集

實現起來比較麻煩,不推薦用。還是用用FineReport吧,絕對的報表軟體NO.1

birt動態SQL實現有三種方式:拼接SQL、綁定變數和讓應用程序拼接,birt得到返回結果集方式。

1.拼接SQL方式
在數據集中寫SQL,如下:

select id ,code,name,type
from type

選中數據集,點script方式,在beforeOpen事件中寫如下SQL:

var type = reportContext.getParameterValue("type");
var name = reportContext.getParameterValue("name");
var query = this.queryText;
if(type!=null){
query = query + " and type = "+type;
}
if(name!=null&&name!=""){
query = query + " and name = '"+name+"'";
}
this.queryText = query;

然後就可以了,當然,也可以不寫第一步,直接所有的SQL都在beforeOpen中拼接。

但是,拼接SQL方式不僅復雜容易錯,還會導致SQL注入風險。

2.綁定變數方式
在數據集的SQL中寫如下SQL

select id ,code,name,type
from location
where (type = ? or ? is null )
and ( name = ? or ? is null )

然後配置數據集的參數,如下圖:

最後一項是鏈接報表的參數。倒數第二項是默認值,填null

這種方式不會有SQL注入風險。

另外如果想要查看執行的SQL,可以在數據集的SCRIPT的beforeOpen事件寫如下腳本:

importPackage( Packages.java.io );
out = new PrintWriter( new FileWriter("c:/debuginfo.txt", true ) );
out.println("queryText:-->"+ this.queryText);
out.close();

第三種是在應該程序處理查詢,BIRT負責取出結果集展示,採用的是BIRT+SPRING+MYBATIS。

當然這里MYBATIS也可以是其它框架,思路一樣。

BirtBeanFactory.java
public class BirtBeanFactory {

private static BeanFactory ctx;

public synchronized static void setBeanFactory(BeanFactory beanFactory) {
ctx = beanFactory;
}

public static Object getBean(String str) {
return ctx.getBean(str);
}

public static <T> T getBean(Class<T> clazz) {
return ctx.getBean(clazz);
}
}

GlobalInitializer.java
public class GlobalInitializer implements InitializingBean ,BeanFactoryAware{

private BeanFactory beanFactory;

@Override
public void afterPropertiesSet() throws Exception {
BirtBeanFactory.setBeanFactory(beanFactory);
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}

}

BirtDataFactory.java
public class BirtDataFactory {
private TestService manager = (TestService) BirtBeanFactory.getBean(TestService.class);

public List<Location> findListByDto(LocationDto dto){
return manager.findListByDto(dto);
}
}

spring配置文件配置下:
<bean id="globalInitializer" class="com.test.birt.core.GlobalInitializer"/>

這樣代碼層就完成了,
在birt中創建腳本數據源
創建腳本數據集,在數據集的open事件中寫這樣的方法:
importPackage(Packages.com.test.birt.core);
importPackage(Packages.com.test.birt.report.dto);
factory = new BirtDataFactory();
dto = new TestDto();
dto.setCreateTimeStart(reportContext.getParameterValue("createTimeStart"));
dto.setCreateTimeEnd(reportContext.getParameterValue("createTimeEnd"));

if(reportContext.getParameterValue("dcId")!=null){
dto.setDcId(reportContext.getParameterValue("dcId").longValue());
}
collectList=factory.findListByDto(dto);
iterator = collectList.iterator();

在fecth階段,寫這樣 的代碼:
if(iterator.hasNext() == false ){
return false;
} else{
var collectBean = iterator.next();
row["id"]=collectBean.getId();
row["name"] = collectBean.getName();

return true;
}

這樣就可以了。

熱點內容
介紹高德地圖如何查看電腦配置 發布:2024-04-20 23:03:37 瀏覽:994
演算法加運維 發布:2024-04-20 23:03:30 瀏覽:390
android匹配 發布:2024-04-20 22:58:33 瀏覽:168
string的長度java 發布:2024-04-20 22:46:20 瀏覽:136
網易我的世界監獄風雲的伺服器 發布:2024-04-20 22:35:41 瀏覽:186
linux服務自動重啟 發布:2024-04-20 22:34:54 瀏覽:962
編譯器最後的結果 發布:2024-04-20 22:30:38 瀏覽:821
安裝linuxoracle11g 發布:2024-04-20 22:29:02 瀏覽:533
android設置權重 發布:2024-04-20 22:20:08 瀏覽:725
什麼手機安卓系統80 發布:2024-04-20 21:37:29 瀏覽:380