SAP PO 開發系列接近尾聲,當然最後還需要一個壓軸大戲DEMO006:PROXY2SOAP。
這次我們要使用久違的PROXY,通過使用PROXY我們才知道SAP 接口開發中RFC和PROXY的本質區別,
而網上那篇SAP IDOC、RFC、PROXY協議比較的表格終歸講得太淺。
一、DEMO006的場景:
SAP HCM系統中通過PROXY方式傳出一個數據給PO,PO把這個數據傳給一個WebService。
WebService收到數據後,把數據放到一段文本中返回PO,PO再返回到SAP HCM系統中。
二、DEMO006在PO上SLD的配置內容:
三、打開PO的Enterprise Services Builder配置:
1、同SAP HCM相關的接口內容DT、MT、SI:
發出變量定義int
收到返回的字符串
向上封裝成MT
帶出SI
2、同WebSerivce相關的接口內容DT、MT、SI:
因爲WS是有接口描述文件xsdl的,我們就偷懶不用創建DT、MT了。
直接用xsdl創建ED,ED再創建SI就好。
創建MM的請求和返回
創建OM
四、打開PO的Integration Builder配置:
建一個demo006集成環境,空的就行。
建一個CC通道,注意看協議是基於HTTP的XI3.0,
說明SAP ABAP端是把數據封裝到基於HTTP的XI協議發給PO的:
建一個CC通道,在WebService這邊,注意看協議是標準的WS的SOAP協議:
最後建IC的1~4頁籤:
PO端配置完成。
五、在SAP服務器的ABAP環境中作一個proxy程序
SPROXY事務代碼中,可以看到已經有了DEMO006
在Service_Consumers中,點SI_demo006_sender,創建一個proxy:
這個proxy的參數,我們看到有MT:
點一個MT進去,裏面還有一個DT類型,這些都是SAP根據PO創建的數據結構自己創建的。
DT裏面有我們的一個變量:
寫一個ABAP程序,調用這個proxy接口:
DATA LO_PROXY TYPE REF TO ZPOCO_SI_DEMO006_SENDER.
DATA Z1 TYPE ZPOMT_DEMO006_RESPONE.
DATA Z2 TYPE ZPOMT_DEMO006_REQUEST.
Z2-MT_DEMO006_REQUEST-ZVALUE = 3.
CREATE OBJECT LO_PROXY.
TRY.
CATCH CX_AI_SYSTEM_FAULT.
ENDTRY.
TRY.
LO_PROXY->SI_DEMO006_SENDER(
EXPORTING
OUTPUT = Z2
IMPORTING
INPUT = Z1
).
CATCH CX_ROOT INTO DATA(LCX_ERROR).
DATA(ERR_TEXT) = LCX_ERROR->GET_TEXT( ). "得到錯誤信息
ENDTRY.
WRITE:/ ERR_TEXT.
WRITE:/ Z1-MT_DEMO006_RESPONE-ZRETURN.
運行程序,得到WS的返回文本:
SAP RFC協議工作在SOCKET底層,它的使用環境是ABAP,C#的NCO、JAVA的JCO類庫。
SAP PROXY的XI協議,工作在上面的HTTP層,它的環境是藉助PI、PO系統提供上層的基於SOAP的服務。
我想這是RFC和PROXY的本質區別。