zoukankan      html  css  js  c++  java
  • 如何在 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 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的原创文章,尽在:"汪子熙":

  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/15034729.html
Copyright © 2011-2022 走看看