JCo 指南

 http://blog.csdn.net/asdfak/article/details/5834731
  1. Java Connector and BAPI

前些日子想去深入的研究下Portal Development,但是載了一個週末也沒有把NetWeaver Developer Studio弄下來。閒暇時間,瀏覽了下JCo的API文檔和幾個簡單的DEMO,開始嘗試着自己去用JCo做一些操作,並記錄下整個過程,以供大家參考。

一些理論性的東西源自SAP的官方培訓教材和一些高手的筆記,英文不佳,翻譯的有些拗口,見諒…

1.1 What is JCo

SAP Java Connector (SAP JCo)是個中間件組件,用於SAP組件和JAVA程序的開發。SAP JCO 支持兩種方向連接SAP 服務器:inbound calls (Java calls ABAP) and outbound calls (ABAP calls Java)。SAP JCO可以用於桌面應用和WEB應用程序也可以作爲組件嵌入到以下程序中:

SAP Business Connector:用於與外邊的JAVA程序的連接

SAP Web Application Server:通過ABAP環境連接到嵌入式J2EE服務

而我們的Portal中,也正是使用JCo與SAP系統或者其他系統進行交互。

1.2 JCo OverView

  • High-performance JNI-based middleware
  • Support R/3 3.1H and higher.
  • Supports inbound and outbound calls.
  • Supports client pooling.
  • Supports desktop and web/application server applications.
  • Multi-platform
  • Complete and correct code page handling
  • Easy to install and deploy

1.3 JCo's Architecture

從下圖可以清楚的看到,JCo不過是通過JNI提供與SAP系統的RFC連接

1.4 What is BAPI

BAPI Business Application Programming Interface)是在Business Applications Systems(例如SAP R/3)中,被精確定義的進程或數據的訪問接口。

1.5 Benefits of BAPI

  • 可以被用於不同的語言或者開發環境(ABAP, Visual Basic, Java, C++, etc.)
  • 可以被不同的平臺調用 (COM, CORBA, Unix)
  • 縮減開發和維護的開支

圖:BAPI可以被廣泛使用

1.5 SAP的T-CODE

  • BAPI    Business Object Browser (BAPIs only)
  • SWO1    Business Object Builder (all objects)
  • SWO2    Business Object Browser (all objects)
  • SE11    Data Dictionary
  • SE37 Function Builder

二、使用SAP JCo連接到服務器

2.1 JCo主要的操作活動

2.2建立到SAP 服務器的連接

SAP JCo有兩種方式連接到SAP服務器:直接連接和連接池

注:下文的例子中使用的是JCo2.1.9版本,最新版本爲3.0.4

 

  • 直接連接

打開連接:

調用函數和關閉連接:

  • 連接池

創建連接池:

獲取和釋放連接:

JCO.Repository:用於存取RFMs的元數據

2.3 Jco2.1.9中的範例,COMANY_CODE

該範例主要執行兩個操作:

  1. 通過BAPI_COMPANYCODE_GETLIST獲取所有的COMP_CODE,然後顯示
  2. 通過BAPI_COMPANYCODE_GETDETAIL對操作1中的COMP_CODE進行明細查詢,得到所對應的COUNTRY和CITY

2.3.1創建Repository

2.3.2創建JCO.FUNCTION

2.3.3執行JCO.FUNCTION

2.3.4映射JAVA和ABAP數據類型

2.3.5存取表

2.3.6 BAPI函數調用

2.3.7 運行結果

測試時,使用的是咱們R/3,212系統,下面是部分結果:

COMP_CODE和COMP_NAME

 

 

COMP_CODE、COUNTRY和CITY

 

三、Jco For Web Service

下面是自己寫的一個小測試,使用Jco調用ABAP函數ZTESTCHEN1,並獲得輸出結果

服務器使用的是Apache Tomcat6.0,頁面爲JSP,通過Servlet與服務器進行交互。

OK,開始!

3.1 RFM:ZTESTJCOFUN

RFM,RFC-enabled Function Modules,所有的ABAP函數,勾選上Remote-Enable Module就是一個RFM,顯而易見,所有的BAPI也都是RFM,只不過依據特定的規則,被定義爲SAP的Business Object Repository (BOR)的對象型方法。如下圖:

函數是自己比着葫蘆畫的,比較簡單,主要功能是查表LFA1,通過供應商的ID獲取相關信息

  • 輸入字符串LIFNR參考LFA1-LIFNR
  • 輸出字符串RETURN參考BAPIRETURN,返回參數,S爲成功,E爲出錯
  • 查詢內容存放在表ITAB中,此表參考自建結構ZTESTJCO,詳情如下圖:

  • 核心ABAP代碼如下,當輸入ID爲空時,查詢所有供應商,ID不爲空時,查詢單個,查詢不到時報錯,詳情如下圖:

3.2 Servlet and JSP

本測試的服務器配置比較簡單,使用單純的Servlet配合JavaBean,做JSP頁面與後臺的請求處理。

    其中,文件結構如下圖:

3.3 運行結果:

  • 提交頁面:

  • 結果顯示:(ED2,212系統,如果是222的話,會有很多...)

  • 報錯

四、總結

BAPI自身提供了很多強大的藉口,供SAP系統自身或者Jco等中間件從外部來調用。本文簡單的展示了Jco通過WebService來調RFM的過程,簡單來說就是通過RFC來調用SAP中函數,然後顯示返回信息。是SAP外圍開發或者自身功能增強的一種解決方案。

類似於阿PENG同志前段時間演示的那個.Net通過WebService調RFM來操作交貨單,不過那個的ABAP代碼太多,一時半會讀不懂,只好自己寫個簡單的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章