??? 隨著Internet技術的飛速發(fā)展,基于Web的應用軟件正逐步取代傳統(tǒng)的C/S模式軟件成為當今應用軟件的主流。原來C/S模式下簡單的報表問題,在Web軟件中卻成了瓶頸。如何適應網(wǎng)絡技術,讓報表工具在信息傳輸迅速的Internet上發(fā)揮更大的作用。成為了報表工具新的發(fā)展方向。
??? 本文基于Crystal Report 報表工具提供的底層Java SDK 接口函數(shù)" title="接口函數(shù)">接口函數(shù),分析了基于web的報表的具體應用,設計了一個Web報表工具。具體實現(xiàn)了輸出格式轉化;報表數(shù)據(jù)的在線查詢;圖表展示以及報表的定制;Email發(fā)送;報表打印等功能。
2 Crystal Report報表工具簡介
??? Crystal Report報表工具是一個被廣泛使用的企業(yè)級的報表設計,報表輸出的工具。它提供了數(shù)據(jù)的報告、分析、信息傳遞以及與客戶的交互式功能。
2.1 Crystal Report簡介
??? Crystal Report主要有Crystal Report設計器,Crystal Report應用服務器" title="應用服務器">應用服務器,Crystal Report分析器,Crystal Report Java API接口。
??? 設計器:設計器支持絕大多數(shù)數(shù)據(jù)庫,包括 SQL Server、Oracle、DB2等;能連結任何數(shù)據(jù)源并使用各種ADO與OLE DB連結功能。設計器支持簡單圖表與圖案以及多層嵌套子報表、交叉報表等各種類型報表。 同時可以自行設定報表的外觀,如加上圖片、改變形式、色彩或字型等??梢宰屢话愕膱蟊碇谱魅缗判蚝瓦^濾等工作變得更快更容易。還支持報表打印??梢詫崿F(xiàn)復雜的報表計算、篩選、排序等功能。設計器可以生成各種圖表,還可以自定義擴充函數(shù)和變量來滿足報表分析的要求。
??? 應用服務器:是Web報表的執(zhí)行核心,將所設計的報表與Web應用程序的緊密集成。主要用于報表和客戶端" title="客戶端">客戶端的交互。應用服務器負責解析報表數(shù)據(jù)以及報表模板和底層數(shù)據(jù)庫的信息轉化。同時還提供了許多的JAVA API用于客戶端的開發(fā)。
2.2 Crystal Report的體系結構
????Crystal Report的體系結構能夠很好的反映出報表的設計和開發(fā)過程Crystal Report報表工具的開發(fā)步驟如下:
首先在設計器里用JDBC/ODBC創(chuàng)建與相應數(shù)據(jù)庫的連接,設置數(shù)據(jù)源和查詢語句,顯示并預覽取得的數(shù)據(jù)。
接著在設計器里設計報表模板,對表頭,表尾,數(shù)據(jù)區(qū)的具體設置。將預先取得的數(shù)據(jù)與報表模板進行綁定。
將設計好的報表以.rpt文件存儲在指定目錄里,這是也可以將其轉化為別的文件形式,如xml,pdf,work等。
最后在Web上發(fā)布所設計的報表,啟動RAS用于解釋報表的執(zhí)行。
??? 其體系結構如圖 1 所示:
?
3 We3??? Web報表管理器的設計與實現(xiàn)" title="設計與實現(xiàn)">設計與實現(xiàn)
Web報表????管理器采用Crystal Report報表應用服務器提供的Java SDK接口函數(shù),具體實現(xiàn)了輸出格式轉化;數(shù)據(jù)的布爾查詢;圖表展示以及報表的定制;Email發(fā)送;報表打印等功能。在具體實現(xiàn)上,用jsp+javabean結合RAS Java SDK技術實現(xiàn)? 術整個WEB報表工具設計。
3.3 Web報表功能的設計與實現(xiàn)
Web報表功能是基于WEB的報表在展示上的不同功能的實現(xiàn),這些功能都是基于Web/Java來實現(xiàn)的。功能的設計是基于Crystal Report 報表工具提供的底層Java SDK 接口函數(shù)。首先對Crystal Report應用服務器的Java SDK結構進行分析。
3.3.1 RAS Java SDK分析
報表應用服務器Java JDK提供了實現(xiàn)基于WEB的報表設計功能,從簡單的報表生成,報表修改,到復雜的報表定制功能。Crystal Report報表應用服務器本身就是一個c/s結構的系統(tǒng),它有RAS 服務器(報表應用服務器)和SDK組成。SDK提供與RAS服務器交互的接口。RAS服務器則與Web應用服務器通信。下圖是RAS Java JDK 的結構圖。

RSA SDK 有許多包含接口和類的Java包組成。SDK的結構是一個MVC體系。圖中的 application packages 由controllers 類構成,用來管理數(shù)據(jù)。在application packages里還有ReportClientDocument對象。ReportClientDocument對象是RSA SDK 創(chuàng)建并修改的報表文檔。Data package和definition package用來定義model。View實現(xiàn)model里的數(shù)據(jù)展現(xiàn)功能。View 可以直接訪問數(shù)據(jù),也可以通過controllers 類來訪問。通過controllers 類來訪問數(shù)據(jù)可以實現(xiàn)數(shù)據(jù)的修改操作。
3.3.2功能的具體設計與實現(xiàn)
?? 通過RAS SDK提供的功能,Web報表功能主要實現(xiàn)輸出格式轉化;報表數(shù)據(jù)的在線查詢;圖表展示以及報表的定制;Email發(fā)送;報表打??;等功能。下面是詳細實現(xiàn):
輸出格式轉化:主要實現(xiàn)將Web上的以特定格式顯示的報表輸出為RTF,CSV,PDF,HTML,Excel, Word等格式。以便于報表文件的存儲和管理。在輸出格式轉化上用到的主要類有exportoptions 包下的ExportFormatOptions,ExportOptions以及ReportExportControl等。轉化為Word格式的實現(xiàn)為:(部分代碼)
//設置報表名和報表路徑
report =request.getParameter("rptName");
String rptPath = "C:\\Program Files\\Crystal Decisions\\Report Application Server 9\\Reports";
//創(chuàng)建RTFWordExportFormatOptions對象。
RTFWordExportFormatOptions? wordExpOpts;
wordExpOpts = new RTFWordExportFormatOptions();
//創(chuàng)建ExportOptions對象,設置word輸出選項及格式類型為word。
ExportOptions exOpts = new ExportOptions();
exOpts.setFormatOptions(wordExpOpts);
//創(chuàng)建ReportExportControl對象,加載" title="加載">加載報表文件。
? com.crystaldecisions.report.web.viewer.ReportExportControl expViewer ;
? expViewer= new com.crystaldecisions.report.web.viewer.ReportExportControl();
? expViewer.setReportSource(rptPath + "\\" + report);
? //加載ExportOptions對象。
? expViewer.setExportOptions(exOpts);
? //輸出并顯示word報表。
expViewer.processHttpRequest(request, response, getServletContext(), null);
? expViewer.dispose();
報表數(shù)據(jù)的在線查詢:主要有數(shù)據(jù)刷新和布爾查詢兩個部分。用到的類有application package; reportsource; lib等;其數(shù)據(jù)刷新和布爾查詢的實現(xiàn)如下:(部分代碼)
??? //與數(shù)據(jù)庫的交互要通過ReportServerControl對象。
serverControl.setReportSource(clientDoc.getReportSource());
serverControl.setEnableLogonPrompt(false);
serverControl.processHttpRequest(request, response, getServletConfig(). out);
//設置數(shù)據(jù)庫連接和讀取數(shù)據(jù)信息。
??? connInfos = new ConnectionInfos();
?connInfos = serverControl.getDatabaseLogonInfos();
?int size = connInfos.size();
?for (int x=0; x
? iConnInfo.setUserName(uid);??
iConnInfo.setPassword(pwd);??}
??? //創(chuàng)建viewer對象瀏覽刷新數(shù)據(jù)。
??? CrystalReportViewer htmlViewer = new CrystalReportViewer();
??? htmlViewer.setDisplayToolbar(true);
??? htmlViewer.setReportSource(serverControl.getReportSource());
htmlViewer.setDatabaseLogonInfos(connInfos);
//從客戶端得到查詢條件,設置查詢變量。
??? String newSelFormula = "{"+s1+"}" + " " + s2 + " " + "\""+s3+"\"";
??? htmlViewer.setSelectionFormula(newSelFormula);
htmlViewer.processHttpRequest(request, response, getServletConfig().out)
圖表展示:用于對報表中的數(shù)據(jù)通過各種圖表(par, line, bar)的形式進行形象化的描述,以便于更方便的對數(shù)據(jù)進行分析比較。其實現(xiàn)如下:(部分代碼)
//圖表顯示主要進行圖表條件字段和數(shù)據(jù)字段的設置。
??? //創(chuàng)建chartCondFlds對象和 chartDataFlds對象。
Fields chartCondFlds = new Fields();
Fields chartDataFlds = new Fields();
CDef.setConditionFields(chartCondFlds);
CDef.setDataFields(chartDataFlds);
//創(chuàng)建Chart對象并加載Cdef對象。
??? ChartObject Chart = new ChartObject();
??? Chart.setChartDefinition(CDef);
??? //加載圖表類型(par, line, bar)和位置(head, tail)等。
ChartStyleType = ChartStyleType.from_int(ChartStyleType._bar);
ChartPlacement = ChartPlacement.from_string(Placement);
??? ChartSection =(Section)Doc.getReportDefController().getReportDefinition()
??? Doc.getReportDefController().getReportObjectController()
add((IReportObject)Chart,(ISection)ChartSection,1);
報表的定制:主要用來實現(xiàn)對web報表的定制操作,如報表表頭,表尾的修改,text文本的修改,報表不同圖表的選擇修改等。Email功能的設計采用java提供的sendmail開發(fā)包設計;而打印功能則采用Crystal Report提供的打印工具包實現(xiàn)。
4 結束語
本文是基于Crystal Report 報表工具提供的底層Java SDK 接口函數(shù),分析了基于web的報表的具體應用,設計了一個Web報表工具。在Web報表工具的實現(xiàn)上還有一些方面沒有考慮到,如web頁面的表現(xiàn),負載均衡以及工具功能的完善問題等。下面的工作要進一步解決上述問題。
DESIGN AND IMPLEMENT OF THE REPORT TOOL BASED ON JAVA/ WEB
????????????????????????????????????? Liu Zhi-guo
(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang, Liaoning 110004)
Abstract: With the rapid development of the Internet. Applications based on the Web are taking place of the traditional applications based on the C/S, which takes the reports based on the web in trouble. This paper designs and implements a Web_based report tool by the Java SDK in the Crystal Report tools, which provides the format export, print, Email, query, chart and customizing report.
Key words: Crystal Report, Web Report, Java SDK, RAS
