这是 Jerry 2021 年的第 47 篇文章,也是汪子熙公众号总共第 324 篇原创文章。

Jerry 2014 年时,曾经在 SAP 社区上写过一篇英文博客,介绍了如何在 ABAP On-Premises 系统里,创建和消费 Web Service:

Step by step to create, consume and trace web service in ABAP system

这篇文章的中文版,请移步这个链接:

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

到了 SAP BTP 上的 ABAP 编程环境里,我们仍然可以沿用 On-Premises 系统里的 Destination 概念,在云上的 ABAP 代码里,消费第三方的服务。区别在于 On-Premises 系统里的 Destination 通过事物码 SM59 创建,而云上的 ABAP,则在 SAP BTP 控制台里创建 Destination 实例。具体步骤请参考 Jerry 之前的文章:SAP云平台上的ABAP编程环境里如何消费第三方服务

本文介绍如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service. 如果阅读过 Jerry 前面提到的两篇文章,理解本文的内容不过是几分钟的事情。

登录 SAP BTP 平台的 ABAP 编程环境。具体步骤,可以参考 Jerry 之前翻译的 OpenSAP Fiori Elements 公开课,第一周第四单元的视频,里面包含了详细步骤。

新建一个 Service Consumption Model.

Remote Consumption Mode 可以选择 OData,RFC 或者 Web Service. Jerry 之前介绍 Fiori Elements 和 Restful ABAP Programming 模型时,曾经使用过 OData 模式。本文我们使用 Web Service 模式。

下一步我们需要为这个 Consumption Model 上传一个 WSDL 文件。Jerry 的文章 深入理解 SAP Fiori Elements 工作原理系列之二:如何给 SAP Fiori Elements 应用添加自定义按钮 曾经提到过 SAP ES5 系统,这是一个 Demo 系统,SAP 在上面发布了很多用于教学目的的 OData 服务和 Web Service.

本文我们使用一个简单的 Product Web Service,能根据产品 ID 查询到其价格。该 Web Service 的 WSDL 文件,可以在这个链接获得。

上传 WSDL 文件之后,给该 Consumption Model 维护一个前缀 ZJERRY,这样接下来激活模型,生成的一系列开发资源,其名称均带有 ZJERRY 前缀,便于查询。


激活 Consumption Model 后,在项目资源列表里,观察到一系列自动生成的 ABAP 资源,包含运行时所需的数据类型定义,以及用于消费该 Web Service 的 ABAP Proxy 代理类。

同时,ADT 为我们自动生成了一段模板代码,演示了如何消费自动生成的 ABAP 代理类来调用 Web Service. 点击 Copy to Clipboard,把这段代码粘贴到剪切板中,后续可以直接用。

下面我们创建一个 ABAP 类,把前一个步骤拷贝到剪切板里的 ABAP 代码,粘贴到这个新创建的 ABAP 类里。

调用 Web Service 的核心代码如下图所示,待查询价格的产品 ID,硬编码成 JERRYPRODUCT.

其中第22行的 cl_soap_destination_provider=>create_by_url,输入参数 i_url 的值,来自 WSDL 文件里 soap:address 节点的 location 属性值。

直接运行这个 ABAP 类,在 console 上看到错误输出。这个错误消息来自 ABAP Proxy 类的 get_price 方法时抛出的异常:zjerrycx_fault_msg_type:

Product not found. Try e.g. HT-1000

错误消息表明,这是一个应用程序层级的错误,因为我硬编码的产品 JERRYPRODUCT,在 ES5 系统后台不存在。

使用 ES5 系统上 SAP 发布的一个标准 OData 服务,查询该系统后台到底有哪些创建好的 Product 主数据,随便选择一条产品数据,ID 为 AR-FB-1000,其价格为 3.25:

https://sapes5.sapdevcenter.com/sap/opu/odata/sap/EPM_REF_APPS_PROD_MAN_SRV/Products

再次调用该 Web Service,这次在控制台里看到了期望的输出:

由此可见,SAP BTP 云平台 ABAP 编程环境上消费 SOAP Web Service,步骤比 ABAP On-Premises 系统上还要简捷一些。

Jerry 的 ABAP 专题

  • Jerry的ABAP, Java和JavaScript乱炖

  • ABAP开发人员未来应该学些什么

  • Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

  • Jerry的ABAP原创技术文章合集

  • 300行ABAP代码实现一个最简单的区块链原型

  • 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

  • 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

  • ABAP vs Java, 蛙泳 vs 自由泳

  • 聊聊C语言和ABAP

  • 动手使用ABAP Channel开发一些小工具,提升日常工作效率

  • 我用ABAP做过的那些无聊的事情

  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

  • 使用Visual Studio Code编写和激活ABAP代码

  • 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

  • 在SAP云平台ABAP编程环境上编写第一段ABAP程序

  • SAP官方发布的ABAP编程规范

  • ABAP Code Inspector那些隐藏的功能,您都知道吗?

  • 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

  • ABAP Netweaver体内的那些寄生式编程语言

  • 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀

  • 云端的ABAP Restful服务开发

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

  • 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

  • Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

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

  • ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了

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

  • SAP云平台里的三叉戟应用

  • 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用

  • SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?

  • 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?

  • ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了

  • 利用ABAP 740的新关键字REDUCE完成一个实际工作任务

  • 一段让人瑟瑟发抖的ABAP代码

  • 昨日万圣节ABAP怪兽级代码谜团,公布答案啦

  • 介绍一种在ABAP内核态进行内表高效拷贝的方法

  • 使用SAP Cloud Application Programming模型开发OData的一个实际例子

  • 当ABAP遇见普罗米修斯

  • 使用ABAP绘制可伸缩矢量图

  • ABAP开发环境语法高亮的那些事儿

  • SAP错误消息调试之七种武器:让所有的错误消息都能被定位

  • 使用ABAP操作Excel的几种方法

  • SAP GUI里的收藏夹事务码管理工具

  • SAP GUI和Windows注册表

  • 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中

  • ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼

  • 实现ABAP条件断点的三种方式

  • 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈

  • 一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害

  • SAP ABAP Netweaver容器化, 不可能完成的任务吗?

  • SAP产品增强技术回顾

  • SAP API开发方法大全

  • 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

  • SAP ABAP应用服务器的HTTP响应状态码(Status Code)

  • SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下

  • ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序

  • SAP ABAP Netweaver服务器的标准登录方式讲解

  • SAP ABAP关键字语法图和ABAP代码自动生成工具Code Composer

  • SAP ABAP SM50的另类用途 - ABAP工作进程对数据库表读取操作的检测

  • 关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案

  • SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析

  • SAP ABAP和Java里的弱引用(WeakReference)和软引用(SoftReference)

  • SAP AMDP介绍 - ABAP托管的HANA数据库过程

  • 给你的ABAP对象打上标签(Tag)

  • 历史上的今天:编程语言中null引用的十亿美元错误

  • ABAP Development Tool 代码模板和其他一些实用技巧汇总

  • SAP ABAP Development Tool 提高开发效率的十个小技巧

更多Jerry的原创文章,尽在:“汪子熙”:

如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service相关推荐

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

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

  2. 如何在SAP云平台ABAP编程环境里创建自己的Z表

    选中ABAP包,右键创建一个新的Database Table: 维护表名为ZBOOKING: 表实现的源代码: @EndUserText.label : 'Jerry''s booking' @Aba ...

  3. 在SAP云平台ABAP编程环境里使用CAP模型创建Fiori应用

    创建必须的CDS view,激活,然后基于CDS view创建behavior definition: @Semantics.user.createdBy: true key holiday_id, ...

  4. 在SAP云平台ABAP编程环境上编写第一段ABAP程序

    距2017年秋季的SAP TechEd大会上一位大佬Björn Goerke,SAP's Chief Technology Officer宣布了SAP Cloud Platform即将支持ABAP至今 ...

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

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

  6. SAP云平台ABAP编程环境免费账号使用过程中的一些问题

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

  7. 在SAP Cloud Platform ABAP编程环境里打印系统变量

    代码: class ZCL_HELLOWORLD definitionpublicfinalcreate public .public section. interfaces if_http_serv ...

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

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

  9. 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

    我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Conne ...

最新文章

  1. 多账号统一登录(实现方案)
  2. Flutter framework在线上构建时的包大小优化
  3. 二叉树的基本操作(建立与遍历)
  4. 如何处理Express异常?
  5. tensorflow tensorboard summary的工作特点
  6. 2 创建型模式之 - 工厂模式
  7. heartbeat 非联网安装(通过配置本地yum文件库安装heartbeat)
  8. Android-VR 支持流媒体
  9. JAVA:一个简易的文本编辑器
  10. hbase0.95 官方文档
  11. 计算机打字速成,计算机汉字输入五笔字型打字速成.pdf
  12. ios-webkit-debug-proxy 说明
  13. 给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
  14. CSS3-文本样式、字体样式
  15. 完美替代photoshop 和 coreldraw的两个软件:krita 和 inkscape
  16. 堕落史话——一入学,就堕落
  17. 人工智能讲师AI讲师叶梓谈人工智能的应用人工智能项目咨询应用案例-8
  18. 图片马赛克处理以及上传保存—网页端
  19. CKP.CMP工作原理===
  20. 大蟒蛇养殖教程之“模块”

热门文章

  1. 装修仿720VR全景平台网站源码
  2. React Native 轻松集成分享功能( iOS 篇)
  3. Entity Framework 实体框架的形成之旅--为基础类库接口增加单元测试,对基类接口进行正确性校验(10)...
  4. new、delelte和malloc、free的关系
  5. 正则表达式之零宽断言
  6. mutt的实现, mutt+msmtp+getmail配置
  7. codeforces 850 A
  8. 案例46-crm练习客户登录
  9. IE hack 条件语句
  10. 获取WPF的DataGrid控件中,是否存在没有通过错误验证的Cell