如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
2023-09-14 09:03:51 时间
首先登录 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的原创文章,尽在:“汪子熙”:
相关文章
- 给 SAP Commerce Cloud Storefront 设置 endpoint
- SAP制造集成和智能(SAP MII)
- SAP UI5 sap.ui.Device.media.RANGESETS.SAP_STANDARD_EXTENDED 介绍
- SAP 之SD模块常用权限检查
- SAP UI5 sap.m.Table Manual Pop-In Mode 概述
- 澄清一些对 SAP UI5 响应式表格 sap.m.Table 的常见理解误区试读版
- SAP Fiori Launchpad url 参数 sap-app-origin-hint 的含义
- SAP SD 客户主数据里的Partner Function的一个奇怪现象
- SAP RFC详解编程语言
- SAP打印机配置详解编程语言
- SAP BDC说明详解编程语言
- Reading and Writing data on application server in SAP详解编程语言
- 系统SAP在Linux系统上的开启之旅(sap启动linux)
- SAP vs Oracle:差异点与解析(sap和oracle的区别)
- Oracle与SAP在仓储领域的联姻(仓库oracle和sap)
- deleteMySQL中的ON DELETE: 数据安全策略分析(mysql中on)
- MySQL中如何使用ON语句(mysql中 on怎么用)
- 缓存使用SAP创建Redis缓存,实现高效稳定加速(sap如何创建redis)
- 对比Oracle和SAP价格比较哪个是更值得投入的选择(oracle与sap价格)
- 展望未来Oracle与SAP的合作结盟前景(oracle、sap)
- Oracle与SAP金蝶谁更具竞争力(oracle sap金蝶)
- Oracle SAP系统深入探索管理系统之魅力(oracle sap系统)
- Oracle中妙用ON子句优化SQL查询(oracle on子句)