SAP云平台上的ABAP编程环境里如何消费第三方服务

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

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

clipboard1,1

从百度返回的响应,经过方法GET_CDATA得到,存储于变量rv_data内:函数

clipboard2,2

固然若是咱们是作正式的产品开发的话,通常不会把第三方服务的URL硬编码在应用程序里,而是经过事务码SM59建立的Destination管理第三方服务的endpoint,而后把Destination名称存储于配置表里,这样使得第三方服务的URL同应用代码解除耦合关系。工具

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

clipboard3,3

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

clipboard4,4

若是咱们直接把On-Premises环境下的这些ABAP代码搬到SAP Cloud Platform的ABAP环境里,会遇到不少语法错误:spa

clipboard5,5

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

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

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

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

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

clipboard6,6

能够看到其思路就是经过CL_HTTP_DESTINATION_PROVIDER这个云端的Destination工厂类,拿到Destination实例,而后基于该实例建立云端上的ABAP HTTP客户端实例。工厂类生产Destination实例须要两个参数:

  • i_name
  • i_service_instance_name

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

clipboard7,7

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

clipboard8,8
clipboard9,9
clipboard10,10

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

clipboard11,11

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

clipboard12,12

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

clipboard13,13

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

clipboard14,14

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

clipboard15,15
clipboard16,16

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

clipboard17,17

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

clipboard18,18

这个Service Key的信息能够从Destination实例列表的Service Key维护界面得到:

clipboard19,19

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

clipboard20,20

执行这个ABAP类:

clipboard21,21

得到指望的输出:

clipboard22,22

感谢阅读。

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

相关文章
相关标签/搜索