如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数_汪子熙的博客-程序员资料

技术标签: Cloud  Fiori  ABAP  

首先登录 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的原创文章,尽在:“汪子熙”:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/i042416/article/details/118874902

智能推荐

edittext判断输入字符长度(判断字符串里的中文和字母和数字的长度)转换为char_卖火柴的小男孩2020的博客-程序员资料

Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。例如要设置EditText只能输入10个字符xml中: view plainprint?<EditText  android:layout_width = "fill_parent"    ...

gfortran创建Fortran的动态库供C++调用_gfortran生成动态库_sithphil的博客-程序员资料

基础背景工具:Code::Blokcs16.01+MinGW参考:Code blocks 编译Fortran(转载)学习如何使用CB编译Fortran控制台应用创建Fortran动态库如果直接运行DLL工程,会显示You must select a host application to “run” a libary…好在windows本身提供了一个完美的测试dllsubroutine sub() implicit none write(*,*) "This is subrou

笔记本电脑进入PE系统后找不到硬盘解决方案_魏晓蕾的博客-程序员资料

笔记本电脑进入PE系统后找不到硬盘解决方案详细步骤。

华为认证的考试预约和续证-程序员资料

关于预约考试:注册并预约考试 ,考生须使用华为账号预约考试,通过以下三种方式:1)网站预约:通过Pearson VUE网站点击登录按钮预约;2)客户服务中心预约:联系Pearson VUE客户服务中心预约,联系方式如下:电话(中国大陆):400-810-8288人工电话服务时间:周一至周五,当地时间 9:00 - 18:00;当地节假日除外。3)考试中心预约:考生可前往就近的Pearson VUE考试中心预约,查询考试中心。特别提醒:考生首次使用华为账号在 Pearson VUE 预约华

Spring框架核心及设计思想_bug 郭的博客-程序员资料

容器不就是用来盛放东西的嘛!例如我们之间学过的。

axios携带token跨域请求_lihefei_coder的博客-程序员资料

前端在axios中配置请求头axios.defaults.headers.common['token'] = 'xxxxxxx';token模式response.setHeader("Access-Control-Allow-Origin","*");response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,...

随便推点

JQuery EasyUI与EXTjs有什么区别?_extjs 和jqueryesayui_凌冰_的博客-程序员资料

一、ExtJS1、ExtJS可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。ExtJs最开始基于YUI技术,由开发人员JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样

致远oa系统多版本getshell漏洞(附改版的脚本)_0x010的博客-程序员资料

0x01 影响版本:致远A8-V5协同管理软件 V6.1sp1致远A8+协同管理软件 V7.0、V7.0sp1、V7.0sp2、V7.0sp3致远A8+协同管理软件 V7.10x02 漏洞利用:01.通过访问/seeyon/htmlofficeservlet如果出现下图则可能存在在通过我更改过的脚本进行检测确认目标存在可写入漏洞并且访问已写入的文件url,如图接下来程序会询问是否接着尝试getshell如果确定会得到exp的利用urlpython脚本:https://github.

axios的post方法以form-data形式的传参遇到的坑_白执落的博客-程序员资料

axios默认Content-type是application/json;charset=UTF-8修改{headers:{‘Content-Type’:‘application/x-www-form-urlencoded’}}配置。axios.post(url,{jobNumber: ‘430525’, password: ‘123’}, {headers: {‘Content-Type’:‘application/x-www-form-urlencoded’}});但是,改完以后发送请求..

运维工作常用的性能分析工具介绍_运维性能分析_persist-win的博客-程序员资料

在运维工作中常用到的性能分析工具包括:vmstat、sar、iostat、netstat、free、ps、top、mpstat以及第三方开发工具,如:dstat、collectl及淘宝的开源监控项目tsar等。1. vmstatvmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写

bat脚本打开刷新网页_bat刷新网页_shepherd_dirk的博客-程序员资料

前言网站首页有个复现率很低的bug,刷新首页时低概率出现,每次手动刷新很麻烦,于是就写了这个脚本去自动刷新页面[email protected] offrem 打开指定网站n个标签页:startset /a i+=1start chrome.exe http://www.baidu.com/if %i% leq 10 GOTO startrem vb脚本实现切换标签并强制刷新del ...

libraw使用_yayali98的博客-程序员资料

解压。zip文件设置环境变量,使编译器或者链接器能够找到库和包含文件在VS开发人员命令提示命令行下进入对应目录,运行nmake -f Makefile.msvc如果设置正确,在lib文件夹下出现两个.lib文件。在程序属性VC++目录添加对应的包含目录和库目录。在链接器输入-附加依赖项中加入.lib文件。C++ APILibraw 对象LibRaw对象一种是不带有参数,一种是带有决定

推荐文章

热门文章

相关标签