1. 程式人生 > >將執行時資料裝入水晶報表 (Crystal Reports)

將執行時資料裝入水晶報表 (Crystal Reports)

引用地址:http://www.ibm.com/developerworks/cn/rational/07/0717_bajaj/index.html


2007 年 9 月 17 日

本系列中的第 4 部分手把手地指導您在 Web 應用程式中,使用 IBM® Rational® 嵌入水晶報表 (Crystal Reports)。在前面的文章中,曾介紹過使用 Report Page Viewer 元件,或者 Java™ Reporting Component (JRC) 程式碼,設計水晶報表 (Crystal Reports)並將其嵌入到 JavaServer™ Pages。最為重要的是,報表是用真實的資料來設計,並且需要 Crystal Report designer 在設計的時候連線到資料庫表。然後編寫 JRC 程式碼,建立真實資料來源,以便在執行時裝入報表。使用範例資料設計報表的好處是,當不能夠連線到資料庫,或者環境配置不正確,或者嵌入的設計器不支援連線資料庫平臺的 Java™ Database Connectivity API (JDBCDatabase Connectivity API (JDBC™)時,您還可以靈活使用嵌入的 Crystal Report。
開發場景範例

本文介紹了使用 Rational Application Developer 在 Web 應用程式中將執行時資料裝入 Crystal 報表時所需的主要步驟:

使用 Rational Application Developer 獲取範例資料。
使用包含 水晶報表 的 JavaServer Page™ (JSP™) 建立新的 Web 專案。
在 JSP 中使用 Rational Application Developer 的 Java™ Reporting Component (JRC)程式碼,通過程式設計的方式把執行時資料裝入 水晶報表,然後在伺服器上執行。
不使用 Java™ Database Connectivity API (JDBC™),而使 用Java™ Naming and Directory Interface (JNDI)來將執行時資料裝入 Crystal Report。
此範例是基於 Rational Application Developer Version 6.0.1.1的,預設安裝 Crystal Reports V XI 特性。大多數讀者,包括 Rational Application Developer 試用版本的使用者,都可以接觸到 IBM® WebSphere® Version 6 測試環境。因而,文章的 Web 應用程式範例執行在 WebSphere V6.0.2.5 測試環境中,而不是 V5.1。另外,它也使用 IBM® DB2® Universal Database V8.1,其中包含了用來生成報表的範例資料庫。

想了解水晶報表 (Crystal Reports)的更多資訊,請查閱 Rational Application Developer Help 文件(Help > Help Contents > Developing Web Applications > Crystal Reports > Creating Reports))。如果想下載這些產品的免費試用版本,請留意本文末端的參考資源部分。您可以在 Rational Application Developer Support 頁面的 Crystal Reports FAQs連結,找到 Rational Application Developer 中水晶報表 (Crystal Reports)工具有關許可、升級等的資訊。

步驟1:使用 Rational Application Developer 資料工具獲取範例資料

使用 Rational Application Developer 資料庫工具建立與後端資料庫之間的連線。如步驟 2 所示,設計 Crystal Report。

在 Rational Application Developer 工作空間中,轉換到 Data 檢視(Window > Open Perspective > Data)。
在 Database Explorer 檢視中右鍵單擊,然後選擇 New Connection。
選擇 Choose a Database Manager and JDBC Driver (如圖1)所示。

圖1. New Database Connection 對話方塊



單擊 Next。
在 New Database Connection 對話方塊中,輸入如圖2所示的值,然後單擊 Test Connection。

圖2. 指定連線引數的對話方塊



如果測試連線工作,單擊 OK (圖3)。

圖3. 測試連線工作


JDBC 連線問題錯誤分析

如果您遇到任何 JDBC 連線問題,以下是一些可採用的解決方案:

檢查資料庫產品文件。
從參考資源中檢視 DB2 InfoCenter 連結。
• 從命令列執行一個Java程式,測試JDBC連線。檢查在不使用Rational Application Developer Data透檢視的情況下,是否可以連線到資料庫(檢視參考資源)中的 JDBC Test)
通過檢視參考資源中的 Business Objects' Supported Platforms,檢查 Business Objects 是否支援您的開發平臺(資料庫、作業系統,等)。


在 New Database Connection 對話方塊單擊 Finish,完成資料的連線。嚮導將在 Database Explorer 檢視中展示 Con1的連線步驟。
在 Database Explorer 檢視中右鍵單擊 Department 表,然後單擊 Sample Contents,如圖4所示。

圖4. Database Explorer 檢視



如果您的資料庫安裝正確,那麼,DB Output 檢視將會在 Results 選項卡展示 Department 表的內容,如(圖5)所示。

圖5. DB Output 檢視



現在,轉換到 Web 透檢視(Window > Open Perspective > Web)。在 Web 透檢視,開啟 DB Output 檢視(Window > Show View > Other > Data > DB Output),這樣,您就可以在建立 Crystal Report 的時候參考 Department 表的範例資料。
步驟 2:使用包含 Crystal Reports 的 JavaServer Page 建立一個新的 Web 專案。

在這一步中,使用 JSP 頁建立一個新的 Web 專案。不需要連線到任何資料庫,就可以建立一個新的 Crystal Report,因為這個 Crystal Report 是基於一個數據定義檔案的。該資料定義檔案是一個以.ttx為副檔名的、有標記界限的文字檔案,良好地展現了表結構。TTX 檔案的每一行包括欄位名、資料型別、長度(如果資料型別是字串),以及一段範例資料,如上一步 DB Output 檢視(圖5) 所示。

建立一個新 Web 專案,請按以下步驟進行:

在 Rational Application Developer 工作空間中,選擇 File > New > Dynamic Web Project,建立一個新的動態的 Web 專案。
按照 New Dynamic Web Project 嚮導進行,在 Dynamic Web Project 對話方塊中,設定如圖6所示的值。
說明:
在本範例中,請確保,servlet 版本是 2.4,Target Server 是 IBM® WebSphereIBM® Application Server V6.0,如圖6所示。


圖6. New Dynamic Web Project 對話方塊



單擊 Next,然後在 Features 對話方塊中選擇 Crystal Reports features,如圖7所示。

圖7. Web project Features 對話方塊



單擊 Finish。
在您的 Web 專案中,右鍵單擊 WebContent 資料夾,然後選擇 New > Crystal Report。
在 New Crystal Report 嚮導中,輸入圖8所示的值。

圖8. New Crystal Report Wizard



單擊 Finish。
在 Crystal Reports Gallery 對話方塊中,選擇 Report Wizard 選項(圖9)。

圖9. Crystal Reports Gallery 對話方塊



單擊 OK.
在 Standard Report Creation Wizard 對話方塊中,單擊 Create New Connection > Field Definitions Only(如 圖10)。

圖10. Standard Report Creation Wizard



在 Field Definitions Only 對話方塊(圖11),單擊 Create File,建立新的資料定義檔案。或許,您也可以單擊按鈕 labeled... 展開檔案系統,選擇既有的資料定義檔案。本例中,單擊 Create File,建立一個新的資料定義檔案。

圖11. Field Definitions Only 對話方塊



參照步驟 1的圖5,然後在 Database Definition Tool 對話方塊(如圖12)的第一列(DeptNo)提供詳細資訊,然後單擊 Add,將這個欄位新增到您的資料定義檔案。

圖12. Database Definition Tool 對話方塊



現在,與之前的步驟類似,參照 表1,一步一步,為需要新增的每一列提供詳細資訊。
然後,在 Database Definition Tool 對話方塊中單擊 Add。

表1:Crystal Report 需要新增的欄位
Field Name Field Type Length Sample Data
DeptName String 30 Spiffy Computer Service Div.
MgrNo String 6 000010
AdmrDept String 3 A00


新增完所有列的時候,Database Definition Tool 對話方塊如圖13所示。

圖13. 資料庫定義工具(Database Definition Tool)顯示了所有的列設定



單擊 Database Definition Tool 對話方塊右上方的交叉按鈕,關閉該對話方塊。
然後在對話方塊(Figure 14)單擊 Yes,將所作更改儲存在 WebContent 資料夾的 Department_dataDefinition.ttx 檔案中(圖15)。

圖14. 儲存資料定義檔案的更改



圖15. 將更改儲存在 WebContent 資料夾。



在上述對話方塊中單擊 Save後,轉回到了 Field Definitions Only 對話方塊,文字中顯示出 Department_dataDefinition.ttx 資料定義檔案的完整路徑(圖16),然後單擊 Finish。

圖16. Field Definition File 對話方塊



在 Standard Report Creation Wizard 的 Data 對話方塊,從 Field Definitions Only結點選擇您新建立的資料定義檔案,然後單擊按鈕 labeled >,將該資料定義檔案移到 Selected Tables(圖17)。
然後,單擊 Next。

圖17. Standard Report Creation Wizard 的 Data 對話方塊



在 Fields 對話方塊(圖18),選擇想要在 Crystal Report 中顯示的所有欄位,並單擊 Next。

圖18. Fields 對話方塊



在接下來的兩個對話方塊,Grouping 和 Record Selection圖19 和 圖20)保持預設選擇,單擊 Next。
在 Report Style 對話方塊(圖21)保持預設選擇,然後單擊 Finish。

圖19. Grouping 對話方塊



圖20. Record Selection 對話方塊



圖21. Report Style 對話方塊



接下來,右鍵單擊 WebContent 資料夾,並單擊 Refresh。Department_dataDefinition.ttx 檔案出現在了 WebContent 資料夾。
可選的,您可以雙擊 Department_dataDefinition.ttx 檔案,開啟並確認其內容與圖22是否一致。

圖22. Department_dataDefinition.ttx 檔案的內容






回頁首



步驟 3:通過程式設計的方式地建立資料 ResultSet,並在執行時將它裝入 Crystal Reports。

在這一步中,編寫 Java Reporting Component (JRC)程式碼,以建立資料 ResultSet,並在執行時將它裝入 Crystal Reports。

如果需要完整的程式碼列表,請從下載步驟下載SampleWebApplication.zip 檔案,並將其解壓:
SampleWebEAR.ear: 包括本文需要的所有檔案(JSP、Crystal Report、data definition file 等)。您可以使用 File > Import > EAR file,匯入 Rational Application Developer 工作空間,然後根據需要修改程式碼。
jrc_set_resultset_datasource.jsp: 如果您已經成功完成了文章前面介紹過的兩個步驟,那麼,您可能就不需要完整的 SampleWebEAR.ear 檔案。這個 jrc_set_resultset_datasource.jsp 檔案僅包含從步驟 3開始的相關 JRC 原始碼。
現在,編輯 jrc_set_resultset_datasource.jsp 檔案,使之適用於之前在步驟 2建立的 Crystal Report (setResultsetDatasource.rpt)。
將 reportName 變數值改變為您的 Crystal Report。因為之前建立的 setResultsetDatasource.rpt 檔案處於 WebContenty 資料夾中,所以 reportName 的值應當是 setResultsetDatasource.rpt如列表1所示。

列表1. 改變 reportName 變數值

final String reportName = "setResultsetDatasource.rpt";



改變 WebProjectName 您的 Web 專案名,如列表2所示。

列表2. 將 WebProjectName 改為您的 Web 專案名

final String WebProjectName = "SampleWeb";



jrc_set_resultset_datasource.jsp 檔案列表3中程式碼片段使用 BusinessObjects 的 Java Reporting Component API 建立一個 reportClientDocument 物件,然後指向 setResultsetDatasource.rpt 檔案。

列表3. 建立 reportClientDocument 物件的程式碼

//---------- Create a ReportClientDocument -------------
ReportClientDocument reportClientDocument = new ReportClientDocument();
//---------- Set the path to the location of the report soruce -------------
//Open report.
reportClientDocument.open(reportName, 0);



列表4中的程式碼片段顯示了一段 SQL 查詢,該 SQL 查詢是建立 ResultSet 的基礎。

列表4. SQL 查詢

//SQL query that can be used can be obtained by first creating a report
directly off the desired data source, and then
//in Crystal Reports, open the 'Database' > 'Show SQL Query' to see
the SQL generated for the report.

String query= "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT FROM DEPARTMENT ";



呼叫 getResultSetFromJDBC(...) 函式來獲得包含資料的 ResultSet(如列表5所示)。

列表5. 獲取包含資料的 ResultSet

//Call simple utility function that obtains Java Result set that will be
//pushed into the report.
ResultSet resultSet = getResultSetFromJDBC(query,
ResultSet.TYPE_SCROLL_INSENSITIVE);



列表6是 getResultSetFromJDBC(...)函式的程式碼。這是一段簡單的連線到 DB2 資料庫的 JDBC 程式碼。參照參考資源的 JDBC Test連結或資料庫供應商產品文件,查詢您具體資料庫提供商的相關設定(特別是 jdbcurl 和 jdbcdriver 的值)。

列表6. getResultSetFromJDBC(...) 函式程式碼

private ResultSet getResultSetFromJDBC(String query, int scrollType)
throws SQLException, ClassNotFoundException {
//provide your username and password here
String username = "<Database-Username>";
String password = "<Password>";
// jdbc driver and jdbc url for db2 versions 7.1 and 8.1
//change the jdbcurl=jdbc:db2:<Database-Name> to point to your
database
String jdbcdriver = "COM.ibm.db2.jdbc.app.DB2Driver";
String jdbcurl = "jdbc:db2:sample";

// loads the jdbcdriver class
Class.forName(jdbcdriver);

//Construct connection to the DSN.
java.sql.Connection connection = DriverManager.getConnection(jdbcurl,
username,password);

//retrieve the Statement from the connection object
Statement statement = connection.createStatement(scrollType,
ResultSet.CONCUR_READ_ONLY);

//Execute query and return result sets.
return statement.executeQuery(query);
}



What the code samples up until next subhead do and what kind they are vs. next subhead

列表7中的程式碼用於獲取資料庫表,因為執行時資料將會裝入到這個表。然後,通過使用 DatabaseController 物件的 setDataSource() 方法,將 java.sql.ResultSet 資料裝入資料庫表。


列表7. 需要程式碼描述標題

String tableName = reportClientDocument.getDatabaseController().getDatabase().getTables()
.getTable(0).getName();

//Push the Java Resultset into the report. This will then become the
//datasource of the report when the report itself is generated.
reportClientDocument.getDatabaseController().setDataSource(resultSet,
tableName , "resultTbl");



說明:
列表7的程式碼片段將資料裝入第一個表。假設名為 resultSet 的 java.sql.ResultSet 物件擁有與第一個表相一致的結構。

然後,在列表8的程式碼片段中,從 reportClientDocument 物件獲得 reportSource 物件,然後將之裝入到會話範圍中。


列表8. 需要程式碼描述標題

//Cache the report source of the ReportClientDocument in session.
session.setAttribute("reportSource", reportClientDocument.getReportSource());



最後,列表9所示的程式碼段,將瀏覽器轉到瀏覽頁(CrystalReportViewer_setResultSet.jsp)。


列表9. 需要程式碼描述標題

request.getRequestDispatcher("/CrystalReportViewer_
setResultSet.jsp").forward(request,response);



setResultSet JSP 程式碼如何工作

現在,讓我們看一看 CrystalReportViewer_setResultSet.jsp 程式碼。

列表10的程式碼完成了以下活動:

從 session 獲取 reportSource。
例項化 CrystalReportViewer,建立 oCrystalReportViewer 物件。
將 oCrystalReportViewer 物件的報表源設定為從 session 中獲取到的 reportSource 物件。

列表10. 需要程式碼描述標題

//Get the IReportSource object from sesion and pass it to the viewer
IReportSource reportSource = (IReportSource)session.getAttribute("reportSource");

//---------- Create the viewer and render the report -------------

//create the CrystalReportViewer object
CrystalReportViewer oCrystalReportViewer =
new CrystalReportViewer();

//set the reportsource property of the viewer
oCrystalReportViewer.setReportSource(reportSource);



接下來的三個程式碼片段設定 viewer (oCrystalReportViewer object)的屬性。

列表11所示的程式碼設定了 viewer 是否控制page。setOwnPage設定為 true 有利於 viewer 完整地處理 HTML 內容。這減少了您需要新增到 JSP 頁的程式碼,並且允許 viewer 自動地確定某些設定。

列表11. 需要程式碼描述標題

oCrystalReportViewer.setOwnPage(true);



列表12程式碼片段設定了 viewer 是否控制 form,如果 server 控制 form,取得和設定 form 的值。特別是,通過控制 form,viewer 控制可以在客戶端快取狀態。

列表12. 需要程式碼描述標題

oCrystalReportViewer.setOwnForm(true);



列表13的程式碼片段設定當用戶單擊列印按鈕的時候,採用的列印模式是 PDF 還是 ActiveX。在 PDF 列印模式下,先顯示出一個 PDF,然後使用者可以選擇列印。在 ActiveX 列印模式,要將一個小的 ActiveX 控制元件下載到客戶端機器上。如果在當前不支援 ActiveX 控制元件的系統上選擇了 ActiveX 列印模式,則預設的列印模式是 PDF。

列表13. 需要程式碼描述標題

oCrystalReportViewer.setPrintMode(CrPrintMode.PDF);
// the other print mode is CrPrintMode.ACTIVEX



說明:

想了解 CrystalReportViewer 更多的相關資訊,請從 Help > Help Contents > Developing Web Applications > Crystal Reports > API Reference > Viewer Java Classes > Crystal Report Viewer,參照 Rational Application Developer Help。
如果您在列印或匯出 水晶報表 的時候,遇到了任何問題(特別是以下所示的意外情況),那麼,請從參考資源的連結中尋找解決辦法:
當匯出或列印 水晶報表 時,WebSphere 伺服器丟擲執行時錯誤。
當匯出或列印 水晶報表 時,如何解決執行時錯誤。


列表14. 需要程式碼描述標題

java.lang.IllegalStateException: SRVE0199E: OutputStream
already obtained



最後,列表15的程式碼處理並在 Web 頁生成報表。


列表15. 需要程式碼描述標題

oCrystalReportViewer.processHttpRequest(request, response,
getServletConfig().getServletContext(), null);



執行 IBM WebSphere 伺服器頁面並檢視結果:

在 Project Explorer 檢視中,右鍵單擊 jrc_set_resultset_datasource.jsp 頁,然後選擇 Run > Run on Server。
在瀏覽器中檢視包含 Crystal Report 的 JSP,如圖23。

圖23. 在瀏覽器中檢視包含 Crystal Report 的 JSP



Tip:

請注意,getResultSetFromJDBC() 函式提供了資料庫的使用者名稱和密碼,這也正是本例中您沒有遇到(圖24)所示資料庫登入登入的原因。


圖24. 資料庫登入介面



與redirect相比較而言,使用Forward方式執行瀏覽器的優勢:

我們使用 jrc_begin_here.jsp 檔案末的程式碼(列表16)來重定向瀏覽器到 viewer(CrystalReportViewer.jsp),然後就可以在瀏覽器裡生成報表。

列表16. 需要程式碼描述標題

response.sendRedirect("CrystalReportViewer.jsp");



然而,在這個範例中,我們使用了jrc_set_resultset_datasource.jsp 檔案末的程式碼片段(如列表17所示),來轉發瀏覽器,而不是重定向到 viewer (CrystalReportViewer_setResultSet.jsp)。


列表17. 需要程式碼描述標題

request.getRequestDispatcher("/CrystalReportViewer_setResultSet.jsp")
.forward(request,response);



之所以作這樣的改變,是因為如果您重定向瀏覽器,將會遇到列表18所示的執行時錯誤。


列表18. 需要程式碼描述標題

com.crystaldecisions.sdk.occa.report.lib.ReportSDKException: JDBC
Error: DSRA9110E: ResultSet is closed.---- Error code:-2147467259
Error code name:failed
at com.crystaldecisions.sdk.occa.report.lib.ReportSDKException.throw
ReportSDKException(Unknown Source)



圖25顯示的是 Web 頁(而不是 Crystal Report)的相應錯誤。


圖25. 當重定向瀏覽器到 CrystalReportViewer_setResultSet.jsp 時出現的執行時錯誤



呼叫 getResultSetFromJDBC() 函式並在其中提供資料庫的使用者名稱和密碼。儘管 Web 頁(包含Crystal Report)的資料來源顯示在了瀏覽器,生成的 HTML 程式碼也並不包括使用者名稱和密碼。然而,正如本系列文章第3部分所述,JNDI 可代替 getResultSetFromJDBC() 函式。





回頁首



步驟 4:轉換使用 JNDI,而不是 JDBC,來將執行時資料裝入 水晶報表

如果不使用 JDBC 連線,而使用 JNDI 來查詢提前配置好的資料來源,以便獲取 ResultSet,您可以使用getResultSetFromJNDI() 函式代替 步驟 3中第9個子步驟中的函式(列表19)。


列表19. 需要程式碼描述標題

private ResultSet getResultSetFromJNDI(String query, int scrollType)
throws SQLException, ClassNotFoundException {
//Datasource lookup code
Context ctx, env =null;
DataSource ds = null;
try{
ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/robinDatasource");
}
catch(javax.naming.NamingException ne){
ne.printStackTrace();
}
Connection conn = ds.getConnection();

//Construct connection to the DSN.
//java.sql.Connection connection = DriverManager.getConnection
(jdbcurl,username,password);
Statement statement = conn.createStatement(scrollType, ResultSet.CONCUR_READ_ONLY);

//Execute query and return result sets.
return statement.executeQuery(query);
}



如果您作了這個選擇,那麼需要按以下幾步進行:

首先,要使用 getResultSetFromJNDI() 函式,請完成兩個項設定:
資料來源:系列教程的第2部分(參照參考資源)中,檢查步驟 4從1到12的子步驟,瞭解如何在您的 Web 應用程式佈署描述檔案(application.xml file)中建立一個使用 robinAlias JAAS authentication entry 的資料來源 jdbc/robinDS。下一步將會用到這個資料來源名和 JAAS authentication entry。
參考資源:您需要在 Web 佈署描述檔案(web.xml file)中建立參考資源,指向 JNDI 資料來源。更多資訊,請訪問參考資源的資源引用。
接下來,為您的 JNDI 資料來源建立參考資源:
在 Project Explorer 檢視中,雙擊開啟檔案 web.xml。
指向 References 選項卡。
點選 Add 建立新的資源引用。
在 Add Reference 對話方塊(圖26)中,選擇 Resource Reference,然後單擊 Next。

圖26. 在 Add Reference 對話方塊選擇 Resource Reference



如圖27所示,在 Resource Reference 對話方塊輸入值,然後單擊 Finish。

圖27. Resource Reference 對話方塊



如圖28)所示,在 WebSphere Bindings 部分的 References 選項卡,輸入 robinDatasource 所需要的值。
JNDI Name: jdbc/robinDS 資料來源需要的 JNDI 名。
JAAS 登入配置:選擇 Use Default Method,從資料來源設定(robinAlias)提供 JAAS authentication entry 的名稱。

圖28. References 標籤頁中參考資源的其它設定



單擊 File > Save,儲存 web.xml 檔案。
Tip:
請注意列表19中 getResultSetFromJNDI() 函式的程式碼:

ds = (DataSource) ctx.lookup("java:comp/env/robinDatasource");

現在,請將步驟 3第8個子步驟中的程式碼由呼叫 getResultSetFromJDBC()(JDBC)函式改為 getResultSetFromJNDI()(JNDI)函式。
呼叫 getResultSetFromJNDI()函式無疑要比呼叫 getResultSetFromJDBC() 安全得多,因為在這個範例中,驗證是由 JAAS authentication entry (robinAlias)處理的,而 robinAlias 是使用 JNDI 名(jdbc/robinDS)為資料來源 robinDS 配置的。

如何控制執行時期間出現的異常

在執行時過程中可能出現一些異常情況。以下是一些解決方法:

如果遇到 JDBC Driver 執行時錯誤(圖29),請從 DB2 安裝目錄(\SQLLIB\java)將 DB2 Universal JDBC Driver .jar 檔案(db2jcc.jar, db2jcc_license_cu.jar, and db2jcc_license_cisuz.jar)拷貝到 WebSphere Application Server V6.0 安裝目錄(\lib\ext)。

圖29. JDBC Driver 執行時錯誤



說明:
如果您正在使用 WebSphere V6.0 測試環境,而不是獨立的 WebSphere Application Server V6.0。在拷貝.jar 檔案之後,請在伺服器檢視中,右鍵單擊 Servers,然後選擇 Restart > Start,重啟伺服器。

如果您在 Console 檢視中遇到了列表20所示的 log4j 錯誤資訊,那麼,請參看如何解決 log4j 錯誤。

列表20. log4j 錯誤訊息

[2/14/06 17:38:36:435 EST] 00000031 SystemErr
R log4j:ERROR setFile(null,true) call failed.
[2/14/06 17:38:36:435 EST] 00000031 SystemErr
R java.io.FileNotFoundException: C:\Documents and Settings\Administrator\crystal\jpe.log (The system cannot
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
find the path specified)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.init(FileOutputStream.java:199)
at java.io.FileOutputStream.init(FileOutputStream.java:124)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:272)
at org.apache.log4j.RollingFileAppender.setFile
(RollingFileAppender.java:156)






回頁首



本系列教程的下一部分將要介紹的內容

在 Web 應用程式中嵌入水晶報表系列的教程包括5個部分,現在已經完成了第 4 部分。在本文中,您瞭解瞭如何在 Rational Application Developer 使用 Java Reporting Component (JRC)將執行時資料裝入報表,這裡的資料是範例資料而不是真實的資料。使用範例資料設計報表的好處是,當不能夠連線到資料庫,或者環境配置不正確,或者嵌入的設計器不支援連線到資料庫平臺的 JDBC 連線的時候,還可以靈活使用嵌入的 Crystal Report。

基於 XML 的資料庫越來越流行。系列教程的第 5 部分,介紹了 JRC 的其它特性,比如根據 XML 資料彙報,而不是相關的資料庫表。如果您需要根據基於 XML 的資料來生成水晶報表,您會發現那篇文章是非常有用的。