如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
首先登錄 ABAP On-Premises 系統(tǒng),運(yùn)行事物碼:aco_proxy,為 RFC 函數(shù) RFC_SYSTEM_INFO 和 RFC_READ_TABLE, 生成代理類元數(shù)據(jù),格式為 xml. 將 xml 文件另存到本地。
使用 ABAP Development Tool 登錄 SAP BTP ABAP 運(yùn)行環(huán)境,新建一個(gè) Service Consumption Model,類型選擇 RFC:
生成一個(gè) Proxy Class,我們稍后會(huì)在 ABAP 代碼里,通過(guò)這個(gè) Proxy Class 來(lái)調(diào)用 On-Premises 系統(tǒng)上的 RFC 函數(shù)。將前一步驟在 On-Premises 系統(tǒng)里生成的 metadata.xml, 導(dǎo)入到 Proxy 類生成向?qū)Ю铩?/p>
激活這個(gè) Service Consumption Model,在自動(dòng)生成的代理類里,我們能找到 ABAP 代碼模板,這個(gè)代碼模板,可以直接拷貝到我們的 ABAP 代碼里,稍作修改,就能調(diào)用 ABAP On-Premises 系統(tǒng)的 RFC 函數(shù)了。
新建一個(gè) ABAP 類,將上圖代理類里的代碼拷貝到這個(gè) 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 系統(tǒng) AG3 的 Destination 配置。
原因是,在 SAP BTP、ABAP 環(huán)境和內(nèi)部部署之間設(shè)置連接時(shí)存在兩個(gè)問(wèn)題:
- ABAP 環(huán)境“存在”于 Internet 中,但客戶內(nèi)部部署系統(tǒng)位于防火墻之后
- RFC 不支持 Internet
因此,需要建立從內(nèi)部部署系統(tǒng)到 SAP BTP、ABAP 環(huán)境的安全隧道連接。
- ABAP 環(huán)境租戶從 Destination 服務(wù)實(shí)例中獲取目的地。
- ABAP 環(huán)境租戶通過(guò) Connectivity 服務(wù)請(qǐng)求打開(kāi)隧道連接。
- 連接服務(wù)告訴云連接器使用管理連接打開(kāi)與此特定 ABAP 環(huán)境租戶的連接。
- 云連接器使用其公共租戶 URL 打開(kāi)到 ABAP 環(huán)境租戶的隧道連接。
- 隧道建立后,可用于使用 RFC 或 HTTP(S)協(xié)議進(jìn)行實(shí)際數(shù)據(jù)連接。
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在 SAP Analytics Clou
- 下一篇: SAP Fiori OData gate