1. 概述
SAP 作爲獨立的系統,與其它系統進行交互的時候,主要是兩種方式:
底層數據庫直接交互
通過 SAP 專門的 RFC 接口進行數據調用
所以 FineReport 設計報表時要使用 SAP 系統的數據,也就對應兩種實現方式,直連數據庫或使用 RFC 接口。
SAP 現在主要的數據庫有 Oracle 和 DB2 兩種關系型數據庫,FineReport 可以通過 JDBC 的方式直連 SAP 數據庫實現取數,但此取數方式需要報表開發人員充分了解 SAP 數據庫,并且 SAP 數據庫要允許其他系統訪問,現推薦使用 SAP 插件 通過 SAP 用戶賬号連接 SAP 系統後取數。
注:推薦使用 SAP 插件,只有在插件取數出現問題,可使用本文的方法來還原問題。
用戶也可以通過編寫 Java 文件通過 SAP 專門的 RFC 接口進行數據調用,本文以示例的方式介紹這種方法。
2. 實現思路
首先通過 Java 類文件建立和 SAP 的連接,然後通過程序數據集接口,将 RFC 調出來的數據進行虛拟二維表封裝,調用虛拟二維表,進行報表的制作。
3. 實現步驟
3.1 增加 SAP JAR 包
報表工程部署在 Windows 系統的服務器下,以 Tomcat 爲例。
注:下文中使用到的 SAP 的 JAR 包文件請到 SAP 官網 下載。
JDK 位數 | JDK 版本 | 文件包 | SAP 文件導入位置 |
---|---|---|---|
32位 | JDK1.4 | sapjco2_window_32bit | sapjco.jar 放在%TOMCAT_HOME%\lib路徑下 librfc32.dll 放在C:\Windows\System32路徑下 sapjcorfc.dll 放在C:\Windows\System32路徑下 |
JAK1.5以上 | sapjco3_windows_32bit | sapjco3.jar 放在%TOMCAT_HOME%\lib路徑下 sapjco3.dll 放在C:\Windows\System32路徑下 | |
64位 | JDK1.4 | sapjco2_window_32bit | sapjco.jar 放在%TOMCAT_HOME%\lib路徑下 librfc32.dll 放在C:\Windows\System32路徑下 sapjcorfc.dll 放在C:\Windows\System32路徑下 |
JAK1.5以上 | sapjco3_windows_32bit | sapjco3.jar 放在%TOMCAT_HOME%\lib路徑下 sapjco3.dll 放在C:\Windows\System32文件夾下 |
3.2 建立 SAP 連接
通過 ConnectSAPServer 類實現與 SAP 的連接,類文件的代碼如下:
注:連接步驟請參考:編譯Java程序
3.3 定義程序數據集
數據庫連接上之後,定義程序數據集,通過我們的程序數據源接口将數據轉換成虛拟表,ParamSAPDataTest 類文件具體代碼如下:
3.4 配置程序數據集
詳細配置步驟請參見:簡單程序數據集 3.3 節
配置完成後可在設計器成功新建程序數據集,如下圖所示:
4. 總結
RFC 接口這種方式避免了直連數據庫的問題,同時 RFC 參數和調用表結構的方式網上有很多參考或者 SAP 供應商都會提供,但需要寫類文件來獲取數據,報表多的時候會比較麻煩,如果要達到一些圖表聯動等效果,需要在類裏面寫參數,修改不方便,适合具有 java 開發經驗的技術人員使用。