在ABAP On-Premises环境下,使用ABAP编程消费第三方服务,相信很多ABAP顾问都已经非常熟悉了,无非就是使用CL_HTTP_CLIENT或者CL_REST_HTTP_CLIENT来发送和接收HTTP请求。

下图这短短的38行代码,展示了如何使用ABAP工具类CL_HTTP_CLIENT去访问百度首页并拿到回复。

从百度返回的响应,通过方法GET_CDATA获得,存储于变量rv_data内:

当然如果我们是做正式的产品开发的话,一般不会把第三方服务的URL硬编码在应用程序里,而是通过事务码SM59创建的Destination管理第三方服务的endpoint,然后把Destination名称存储于配置表里,这样使得第三方服务的URL同应用代码解除耦合关系。

下图是一个例子,我在SM59事务码里维护了一个指向某C4C系统的Destination,取名为C4C:

然后在ABAP代码里使用cl_http_client=>create_by_destination创建HTTP工具类的实例。后续操作同使用cl_http_client=>create_by_url构造实例的代码一致,这里不再重复。

如果我们直接把On-Premises环境下的这些ABAP代码搬到SAP Cloud Platform的ABAP环境里,会遇到很多语法错误:

原因在Jerry的第一篇介绍SAP云平台ABAP编程环境的文章 在SAP云平台ABAP编程环境上编写第一段ABAP程序 里就已经提到,云端的ABAP编程模型支持的只是ABAP编程语言的一个子集,我们只能使用SAP开放的白名单里的资源,这个白名单即上图左边Released Objects里面包含的内容。

因为Jerry在On-Premises环境里使用过的CL_HTTP_CLIENT, CL_REST_HTTP_CLIENT, IF_HTTP_CLIENT等ABAP类和接口均不在白名单内,故无法在ABAP云端环境使用。

既然在云端了,我们就得使用云端的编程范式。

Jerry去年的文章使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数 里曾经介绍过运行在云端的Java应用如何通过SAP云平台上创建的Destination来调用ABAP On-Premises系统里的RFC函数。如今我们在云上运行的应用的编程语言从Java换成了ABAP,然而借助Destination进行第三方服务调用的思路仍然不变。

Jerry先把正确答案公布出来,在SAP Cloud Platform ABAP编程环境访问第三方服务的代码如下:

可以看到其思路就是通过CL_HTTP_DESTINATION_PROVIDER这个云端的Destination工厂类,拿到Destination实例,然后基于该实例创建云端上的ABAP HTTP客户端实例。工厂类生产Destination实例需要两个参数:

  • i_name
  • i_service_instance_name

根据这个方法的接口注释,这两个参数分别为Destination的名称和Service instance的名称。下面Jerry介绍如何获得这两个参数的值。

在SAP Cloud Platform Service Marketplace里创建一个新的Destination实例:



我们把新建的实例取名为DestService,然后再基于该实例创建一个Destination配置,这个配置就好比我们在ABAP On-Premises的SM59事务码里创建的Destination:

Destination我取名为ZJERRY_API, 这就是前面提到的工厂方法里第一个参数i_name值的由来。

点击Check Connection,确保该Destination指向的URL可以访问:

然后点击Open Dashboard,打开这个SAP Cloud Platform ABAP实例的Fiori界面:

点击Launchpad tile,创建一个新的Communication Arrangements:


需要为新建的Communication Arrangement选择一个Communication Scenario,这里我选择SAP标准发布的专门用于CloudFoundry环境同第三方服务进行集成的场景,ID为SAP_COM_0276:

创建Communication Arrangement时还要维护Service Key信息:

这个Service Key的信息可以从Destination实例列表的Service Key维护界面获得:

在创建好的Communication Arrangement里,维护Service Instance Name的值为jerry-service-instance, 这也就是ABAP代码里传给工厂方法的第二个参数。

执行这个ABAP类:

获得期望的输出:

感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

SAP云平台上的ABAP编程环境里如何消费第三方服务的更多相关文章

  1. 一步步用ABAP Development Tools连接SAP云平台上的ABAP编程环境

    使用ABAP Development Tools的项目创建向导: New->ABAP Cloud Project: Service Instance Connection,选择SAP Cloud ...

  2. 使用JDBC操作SAP云平台上的HANA数据库

    本文假设您对JDBC(Java Database Connectivity)有最基本的了解.您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客AD ...

  3. 使用Eclipse连接SAP云平台上的HANA数据库实例

    SAP云平台(Cloud Platform)上的HANA数据库实例有两种方式访问: 1. 通过SAP云平台的基于网页版的Development Tool:SAP HANA Web-Based Deve ...

  4. 如何在SAP Cloud Platform ABAP编程环境里创建一个employee

    用ABAP Development Tool登录SAP Cloud Platform ABAP编程环境后,对ABAP项目点击右键,选择属性,从而找到该环境的web访问的url: https://325 ...

  5. 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

    Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...

  6. 让SAP云平台上的Web应用使用destination服务

    首先在SAP云平台里创建一个destination,维护service的end point: 然后打开SAP云平台的WebIDE,创建一个新的文件夹和新的HTML5 Application Descr ...

  7. SAP云平台上的SSO Principal Propagation设置

    我今天试图使用SAP云平台的SAP WebIDE Fullstack时,发现打不开, 遇到如下错误信息: You are not authorized to work with SAP Web IDE ...

  8. 最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上

    选择Services Catalog,根据关键字搜索到WebIDE服务,点击超链接打开WebIDE: 进入workspace,选择Git->Clone Repository: 从我的github ...

  9. 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景

    最近Jerry写了一系列关于SAP云平台ABAP编程环境的技术文章,这些文章都是围绕着在云上的ABAP编程环境的具体知识点来分享,比如要完成一个具体的开发需求,所需要的编程步骤.这些文章陆续收到一些读 ...

随机推荐

  1. 数据分析入门——numpy

    一.什么是numpy Numpy提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组(矩阵)的库.用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多.本身是 ...

  2. Qt编写气体安全管理系统3-用户模块

    一.前言 从这篇开始逐个写具体的功能模块,用户模块主要有四个方面,用户登录.用户退出.用户管理.权限控制.这里都按照简单的常规做法来做,比如用户登录界面,就将用户名提供下拉框选择,然后输入密码,密码框 ...

  3. Laya微信小游戏本地缓存

    测试版本2.1.1.1 查看bin/libs/laya.wxmini.js. 发现只会缓存png,jpg. 声音和atlas,json不会缓存. 对比白鹭,白鹭是将png,jpg,atlas,json ...

  4. ios开发将截图保存到相册

    - (void)loadImageFinished:(UIImage *)image { UIImageWriteToSavedPhotosAlbum(image, self, @selector(i ...

  5. Java Thread Local – How to use and code sample(转)

    转载自:https://veerasundar.com/blog/2010/11/java-thread-local-how-to-use-and-code-sample/ Thread Local ...

  6. python基础教程项目五之虚拟茶话会

    python基础教程项目五之虚拟茶话会 几乎在学习.使用任何一种编程语言的时候,关于socket的练习从来都不会少,尤其是会写一些局域网的通信的东西.所以书上的这个项目刚好可以练习一下socket编程 ...

  7. linux中查看端口号

    linux中查看端口号 yum install lsof -y [root@test1 ~]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF ...

  8. Eclipse+TestNG搭建接口自动化测试框架

    一.环境安装 1.前提 安装好jdk 配置好Java环境变量 安装Eclips 这些网上都有,就不再详细介绍. 资源分享链接:http://pan.baidu.com/s/1v9Fw6 2.安装Tes ...

  9. PHP LUHN算法验证银行卡

    <?php /* 16-19 位卡号校验位采用 Luhn 校验方法计算: 第一步:把信用卡号倒序(61789372994) 第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1.(eg:s1 ...

  10. Echarts dataZoom 区域缩放

    dataZoom=[ //区域缩放 { id: 'dataZoomX', show:true, //是否显示 组件.如果设置为 false,不会显示,但是数据过滤的功能还存在. backgroundC ...