写点什么

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

作者:Jerry Wang
  • 2022 年 6 月 06 日
  • 本文字数:1904 字

    阅读完需:约 6 分钟

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

在 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 环境里,会遇到很多语法错误:



原因在于,云端的 ABAP 编程模型支持的只是 ABAP 编程语言的一个子集,我们只能使用 SAP 开放的白名单里的资源,这个白名单即上图左边 Released Objects 里面包含的内容。


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


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


在 SAP Cloud Platform ABAP 编程环境访问第三方服务的代码如下:



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


  • i_name

  • i_service_instance_name


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



在 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 类:



获得期望的输出:



介绍完这些消费步骤之后,大家也可以自己动手,申请 SAP 云平台上的 ABAP Trial 系统并进行开发。


进入 SAP Cloud Platform CloudFoundry 的测试环境:




进入 Service MarketPlace:



找到 ABAP Trial 服务,这就是所谓 ABAP-as-a-Service 的概念:



如果 Service Marketplace 里看不到这个 ABAP Trial 服务也不要紧,点击 Entitlements 菜单的 Subaccount Assignments:



把这个服务分配给 Subaccounts 即可:



ABAP 环境测试版本采用的 Plan 为 Shared,这意味着您将会和其他用户一样,共享一个物理的 ABAP 系统:



新建一个 ABAP Trial 服务实例:



随便取个名字,比如 jerry-abap:



实例生成后,点击名称进入明细页面:



此处需要创建一个 Service Key,有了这个 Service Key,我们才能用它来在 ABAP Development Tool 里登录这个位于 SAP 云平台上的 ABAP 测试系统:



给 Service Key 取个名字:



把生成的 Service Key 保存到某个地方,比如记事本里:



然后打开 ABAP Development Tool,选择通过 Service Key 的方式登录:



把之前在 SAP 云平台操作台里创建的 Service Key 粘贴到此处:



点击 Finish, 完成登录配置。



一切就绪,现在可以开始撸代码了。



在 SAP 云平台控制台里,点击 ABAP Trial 系统实例的 Open Dashboard 按钮,



就能打开这个云上的 ABAP 系统的 Fiori 界面:


总结

本文首先介绍了如何在 SAP 云平台 ABAP 编程环境里消费第三方服务的详细步骤,这是一种 ABAP 技术栈同第三方系统集成的有力手段。接着介绍了 SAP 云平台 ABAP 编程环境账号的申请和环境的搭建,希望开发顾问们自己动手,在实践中加深对云端开发理念的理解和掌握。

发布于: 41 分钟前阅读数: 8
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
SAP 云平台上的 ABAP 编程环境里如何消费第三方服务_云计算_Jerry Wang_InfoQ写作社区