如何在 SAP BTP ABAP 程式設計環境裡直接呼叫 ABAP On-Premises 系統的 RFC 函式
阿新 • • 發佈:2021-07-20
首先登入 ABAP On-Premises 系統,執行事物碼:aco_proxy,為 RFC 函式 RFC_SYSTEM_INFO 和 RFC_READ_TABLE, 生成代理類元資料,格式為 xml. 將 xml 檔案另存到本地。
使用 ABAP Development Tool 登入 SAP BTP ABAP 執行環境,新建一個 Service Consumption Model,型別選擇 RFC:
生成一個 Proxy Class,我們稍後會在 ABAP 程式碼裡,通過這個 Proxy Class 來呼叫 On-Premises 系統上的 RFC 函式。將前一步驟在 On-Premises 系統裡生成的 metadata.xml, 匯入到 Proxy 類生成嚮導裡。
啟用這個 Service Consumption Model,在自動生成的代理類裡,我們能找到 ABAP 程式碼模板,這個程式碼模板,可以直接拷貝到我們的 ABAP 程式碼裡,稍作修改,就能呼叫 ABAP On-Premises 系統的 RFC 函數了。
新建一個 ABAP 類,將上圖代理類裡的程式碼拷貝到這個 ABAP 類的 Main 方法裡:
完整程式碼如下:
CLASS zcl_consume_rfc DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES if_oo_adt_classrun . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcl_consume_rfc IMPLEMENTATION. METHOD if_oo_adt_classrun~main. DATA dest TYPE REF TO IF_RFC_DEST. DATA myobj TYPE REF TO ZCL_JERRY_RFC_PROXY. DATA CURRENT_RESOURCES TYPE ZCL_JERRY_RFC_PROXY=>SYST_INDEX. DATA FAST_SER_VERS TYPE INT4. DATA MAXIMAL_RESOURCES TYPE ZCL_JERRY_RFC_PROXY=>SYST_INDEX. DATA RECOMMENDED_DELAY TYPE ZCL_JERRY_RFC_PROXY=>SYST_INDEX. DATA RFCSI_EXPORT TYPE ZCL_JERRY_RFC_PROXY=>RFCSI. DATA S4_HANA TYPE ZCL_JERRY_RFC_PROXY=>CHAR1. TRY. dest = CL_RFC_DESTINATION_PROVIDER=>create_by_cloud_destination( 'AG3' ). CREATE OBJECT myobj EXPORTING destination = dest. catch CX_RFC_DEST_PROVIDER_ERROR. " handle CX_RFC_DEST_PROVIDER_ERROR ENDTRY. TRY. myobj->RFC_SYSTEM_INFO( IMPORTING CURRENT_RESOURCES = CURRENT_RESOURCES FAST_SER_VERS = FAST_SER_VERS MAXIMAL_RESOURCES = MAXIMAL_RESOURCES RECOMMENDED_DELAY = RECOMMENDED_DELAY RFCSI_EXPORT = RFCSI_EXPORT S4_HANA = S4_HANA ). CATCH CX_ACO_COMMUNICATION_FAILURE INTO DATA(lcx_comm). " handle CX_ACO_COMMUNICATION_FAILURE (sy-msg* in lcx_comm->IF_T100_MESSAGE~T100KEY) CATCH CX_ACO_SYSTEM_FAILURE INTO DATA(lcx_sys). " handle CX_ACO_SYSTEM_FAILURE (sy-msg* in lcx_sys->IF_T100_MESSAGE~T100KEY) CATCH CX_ACO_APPLICATION_EXCEPTION INTO DATA(lcx_appl). " handle APPLICATION_EXCEPTIONS (sy-msg* in lcx_appl->IF_T100_MESSAGE~T100KEY) ENDTRY. ENDMETHOD. ENDCLASS.
注意,需要按照這篇文章提到的步驟,藉助 SAP Cloud Connector ,在 SAP BTP Cockpit 上,完成指向 ABAP On-Premises 系統 AG3 的 Destination 配置。
原因是,在 SAP BTP、ABAP 環境和內部部署之間設定連線時存在兩個問題:
- ABAP 環境“存在”於 Internet 中,但客戶內部部署系統位於防火牆之後
- RFC 不支援 Internet
因此,需要建立從內部部署系統到 SAP BTP、ABAP 環境的安全隧道連線。
- ABAP 環境租戶從 Destination 服務例項中獲取目的地。
- ABAP 環境租戶通過 Connectivity 服務請求開啟隧道連線。
- 連線服務告訴雲聯結器使用管理連線開啟與此特定 ABAP 環境租戶的連線。
- 雲聯結器使用其公共租戶 URL 開啟到 ABAP 環境租戶的隧道連線。
- 隧道建立後,可用於使用 RFC 或 HTTP(S)協議進行實際資料連線。
更多Jerry的原創文章,盡在:"汪子熙":