如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
首先登錄 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 DEFINITIONPUBLICFINALCREATE 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 myobjEXPORTINGdestination = dest.catch CX_RFC_DEST_PROVIDER_ERROR." handle CX_RFC_DEST_PROVIDER_ERRORENDTRY.TRY.myobj->RFC_SYSTEM_INFO(IMPORTINGCURRENT_RESOURCES = CURRENT_RESOURCESFAST_SER_VERS = FAST_SER_VERSMAXIMAL_RESOURCES = MAXIMAL_RESOURCESRECOMMENDED_DELAY = RECOMMENDED_DELAYRFCSI_EXPORT = RFCSI_EXPORTS4_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的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 SAP Analytics Clou
- 下一篇: 【Spring】Bean的LifeCyc