SAP ABAP Web Service 的创建与消费:保姆级教程

这是一个很老的话题了。最近我的知识星球里,有朋友在问,所以写一篇文章解答。

Web Service 是一种基于网络的分布式计算技术,它允许不同应用程序通过网络相互通信和共享数据。

简而言之,Web Service 是一种标准化的方式,用于实现应用程序之间的互操作性。无论应用程序使用什么编程语言或运行在哪种操作系统上,只要遵循 Web Service 的标准,它们就可以相互通信。

Web Service 的核心概念是服务。一个服务可以理解为某种功能或资源的网络暴露,例如一个计算服务、数据库访问服务或者是天气预报服务。Web Service 通过网络将这些服务发布出来,供其他应用程序调用和使用。

Web Service 的实现依赖于一组标准和协议,这些标准确保了服务的互操作性和跨平台兼容性。下面是一些关键的技术标准:

1. XML(eXtensible Markup Language)

XML 是 Web Service 的核心数据格式,用于描述数据的结构和内容。由于 XML 是一种文本格式,并且具有良好的可读性和平台无关性,因此它成为了 Web Service 在不同系统间传递数据的首选格式。

XML 的灵活性使得它可以被扩展,以适应各种复杂的数据结构需求。

2. SOAP(Simple Object Access Protocol)

SOAP 是一种基于 XML 的消息传递协议,专门用于在网络上交换结构化信息。SOAP 定义了消息的格式和传输规则,使得 Web Service 可以在不同的操作系统和网络环境中通信。SOAP 协议支持通过 HTTP、SMTP 等多种传输协议,因此它具有高度的灵活性。

3. WSDL(Web Services Description Language)

WSDL 是一种 XML 文档,用于描述 Web Service 的接口、方法、参数和返回值等详细信息。通过 WSDL,服务的提供者可以明确地定义服务的功能,而服务的使用者则可以通过解析 WSDL 文件,了解如何正确地调用该服务。

4. UDDI(Universal Description, Discovery, and Integration)

UDDI 是一个用于注册和发现 Web Service 的标准。它类似于一个目录服务,允许企业注册其 Web Service,并使其他企业能够查找和使用这些服务。UDDI 提供了一个集中式的目录,使得服务的发布和发现更加便捷。

Web Service 也是 SAP ABAP 系统同第三方系统集成的一种重要手段。

本文介绍如何将 ABAP 系统里一个 Function Module,通过 Web Service 的方式暴露给第三方使用。

本文的英文版,写作于十年前,发布在 SAP 社区上,至今已经有 33 万的阅读量,可以通过点击文末阅读原文进行浏览。

cec3ea2e50cf504b4192846d064725d7.png

首先在 ABAP 系统创建一个简单的 Function Module.

这里我选择在 SAP CRM 系统里,根据输入的产品 ID,返回该产品的描述信息。

Function Module 源代码如下:

FUNCTION ZGET_PROD_DESCRIPTION.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_PROD_ID) TYPE  COMM_PRODUCT-PRODUCT_ID
*"  EXPORTING
*"     VALUE(RV_TEXT) TYPE  STRING
*"----------------------------------------------------------------------
SELECT SINGLE A~short_text INTO rv_text FROM COMM_PRSHTEXT  AS A
  INNER JOIN comm_product AS B ON B~product_id = iv_prod_id AND B~product_guid = A~product_guid.
ENDFUNCTION.

需要暴露成 Web Service 的 Function Module,其 Processing Type 必须标注成 Remote-Enabled Module:

63f4072485d920517093f77ebb72de98.png

从 SE37 菜单项里,选择 Create Web Service->From the Function Module:

cf0d8edfeb8b3b723eef5ec5151cee8e.png

根据创建向导,选择合适的认证方式。

3b66fcc779b7aade59a1b72480281c37.png

完成向导之后,在 SAPGUI 里看到生成好的 Service Definition,记下这个名称:

8ce755aba4ea546ff5cc1c8db6f82a33.png

点击 WSDL,将链接记录下来,后面创建 Logical Port 时会用到这个 url.

7d5f37c56ca5710fdab8b117b800da09.png

启动事务码 SOAMANAGER,点击 Web Service Configuration 超链接:

587be7fa8496f937803f02242f00cc5e.png

Object Type 选择 Service Definition,Object Name 则维护成刚刚通过向导在 SAPGUI 里生成的 Service Definition 名称。

点击 Search 按钮,找到这个 Service Definition,点击 Internal Name 超链接,进入 Service Binding 创建页面。

f55199e708be8ebe4d547f1e052669c7.png

Service Binding 连接了服务接口和服务实现,定义了服务如何通过特定的协议和消息格式在网络上进行传输。它确定了 Web Service 如何进行调用、数据如何编码、以及如何与其他系统进行交互。

点击 Create Service 按钮,进入创建页面。

3c2966e27159550f9acf050307af95de.png

Communication Security 即通信安全 Profile,我选择 SSL.

83e444ac6589ff8fc9e76724fdc8b4a7.png

点击 Finish 按钮完成 Service Binding 的创建。

b75670f833296bd105620c468ebfa439.png

现在这个 Web Service 就可以用来消费了,点击 Open Binding WSDL Generation:

fec711d503cffcfb0dd221a117da5704.png

将 url 抄下来以备后用。

c6aeacf2255f10be4f2365f2f2819c00.png

我们创建好的 Web Service,能被第三方消费,这个第三方,当然也包括 ABAP 系统本身。

下面演示如何在 ABAP 系统里,以消费者的角色,调用刚刚创建好的 Web Service.

进入事务码 SE80,在 Enterprise Services Browser 里,创建一个新的 Service Consumer Proxy:

89029a95f5715b8d9478a38aeaa0e997.png

这个 Consumer Proxy 是拿来干啥的?

它充当了客户端与 Web 服务之间的桥梁,使客户端可以轻松地调用远程 Web 服务,而无需关心底层的通信细节。

顾名思义,Consumer Proxy 是客户端在调用 Web 服务时所使用的代理对象。它封装了与 Web 服务通信的所有复杂性,如消息格式的构建、传输协议的选择、请求的发送和响应的处理等。

通过使用 Consumer Proxy,开发者可以专注于业务逻辑,而不必担心底层的通信细节。

这里向导要求我们输入一个外部 WSDL.

a8212786d429056a21f910fd16be333a.png

把刚刚在 Service Binding 创建步骤抄下来的 WSDL url 填进来即可:

99856f33aa95bee20d9f8d17a7f4a83a.png

激活 Proxy Class,将生成的 ABAP 类名称记录下来。

f2e02b48654a977239cad5437f80747f.png

回到事务码 SOAMANAGER,根据生成的 ABAP Consumer Class 名称进行搜索,找到刚刚生成的 Consumer Class.

1f35d682f5734d7b85ba577028af39d1.png

选中 Consumer Class,创建一个新的 Logical Port.

Logical Port 定义了代理对象如何与远程 Web 服务进行通信的详细信息,包括服务的终端地址、使用的协议、安全设置、消息格式等。

通过 Logical Port,开发者可以为同一个 Consumer Proxy 配置不同的通信参数,从而使得同一个代理对象可以在不同的环境中(如开发、测试、生产环境)无缝切换。

fe168f65b200da47553c9234f19f0a55.png

将创建好的 Logical Port 取名为 ZLP_JERRY1:

08672b0335e4d40725a402b1ff7db43d.png

Logical Port 的创建页面内,需要指定 WSDL Access 的 url.

在本文开头 Web Service 创建向导生成的 Service Definition 的 WSDL 面板里,我们已经将这个 url 记下来了。

5804704296e82e725c449a0be350e4d3.png

最后可以在 ABAP 报表里使用创建好的 Consumer Class 了。输入和输出参数的数据类型,在 External View 里能找到名称。

b81c1d8a2928090d9a5b8b3859d5709b.png

使用生成的 Consumer Class,消费 Web Service 的代码如下:

data: lr_proxy TYPE REF TO CO_ZPRODUCTDESCRIPTION4,
input TYPE ZGET_PROD_DESCRIPTION,
output TYPE ZGET_PROD_DESCRIPTION_RESPONSE.
input-iv_prod_id = 'ARNO_TEST004'.


CREATE OBJECT lr_proxy
     EXPORTING
            LOGICAL_PORT_NAME = 'ZLP_JERRY1'.




CALL METHOD lr_proxy->ZGET_PROD_DESCRIPTION
     EXPORTING
            input = input
     IMPORTING
            output = output.

执行 ABAP 报表,能看到 ID 为 ARNO_TEST004 的产品,其描述信息,已经成功通过 Web Service 返回,并存储在 output 输出变量中了。

6fd88a8373eb7718933957b7e4c37242.png

Web Service 返回的产品描述信息,和 SAP 系统界面上看到的一致。至此,ABAP Web Service 的创建和消费,就介绍完毕了。

除了本文介绍的 ABAP 编程语言之外,我们还可以通过 Java,Node.js,C++,C#,Python 等其他编程语言来消费本文创建的 ABAP Web Service.

7c0ad7601d71362fb5a896806591e8b4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值