原文鏈接:https://blog.csdn.net/ot512csdn/article/details/45556373
SAP官網接口庫地址: service.sap.com/connectors
SAP為我們提供了JAVA平台程序的連接庫SAP JCO3,由此打通所有JAVA程序同SAP服務器的數據傳遞:

SAP也為我們提供了.net平台程序的連接庫SAP NCO,由此打通WINDOWS平台程序同SAP服務器的數據傳遞:


SAP同外圍系統連接,程序實現有兩種方式。
第一種: 我們常用的,SAP服務器作為服務器端server,外圍接口程序作為客戶端client。 client端發起請求,調用SAP服務器中的RFC函數,實現所需要的操作或查詢。
這種方式是由客戶端發起的,源頭在客戶端產生,調用頻率也是有客戶端控制。 這種方式在本次項目中叫做“請求響應”模式。 即客戶端發起請求,服務器響應。
客戶端程序使用該方式,需要在客戶端填入登陸SAP系統的用戶,密碼。 然后客戶端程序自動登入SAP服務器,調用RFC函數。 該方式的代碼網上很多。
第二種方式: 網上資料少,有一些場景是SAP服務器主動發起請求,比如做一個收貨操作后,馬上需要把這個信息通知外圍系統。 而收貨操作本身,我們不知道用戶什么時
候去做這件事情。( 如果用第一種的方法,也可以實現,但是需要客戶端不停的輪詢服務器,如果輪詢的次數太多,我們可能擔心系統性能,如果輪詢次數不多,可能又不能
馬上做到服務器同外圍系統的收貨操作信息同步) 這個時候,需要SAP服務器作為客戶端client, 外圍程序作為服務器端server. 為什么這么說, 因為外圍程序需要一直運行,
等待SAP服務器的請求 ,外圍程序就像服務器那樣一直工作。 這種模式在本次項目中稱為“訂約發布”模式。
SAP的中間件接口程序,是怎么來實現這中方式的呢?
實際上,SAP並不要求外圍程序寫一個正真的網絡服務器,而是,首先使用client方式,長連接到SAP服務器, 然后基於這個長連接,RFC程序推數據給外圍程序。
讓我們來看看這種方式外圍程序寫法的參數文件:

從參數文件中可以看到, 外圍程序作為server端,首先會使用A01.JCO.CLIENT中的參數部分,去做一個同SAP服務器的長連接,這個同第一種方式一致。
連接成功后,可以在SAP系統中用SMGW事務代碼查看:

A01.JCO.SERVER參數部分才是SAP服務器推數據給外圍程序的需要使用參數,在sm59中配置好“SAPJCO”,SAP ABAP程序中是這樣使用的:

而使用前,還要建一個只有數據申明的空FUNCTION "ZMM_IF_FM016".
外圍服務器程序就等SAP通過這個空的FUNCTION "ZMM_IF_FM016"推數據過來。
TAB1,TAB2,TAB3是SAP給外圍程序的數據, 外圍程序處理后,還可以通過RETURN返回SAP服務器信息。
SAP的JCO和NCO庫,都可以在 http://service.sap.com/connectors 中下載到,SAP提供了詳細的說明,和代碼例子。
本文只是主要講清第二種方式, 開發時理解SAP 接口中外圍程序作server方式,不同於正真的網絡服務器,避免進入不必要的誤區。
原文鏈接:https://blog.csdn.net/ot512csdn/article/details/45556373
