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

举报
汪子熙 发表于 2022/05/23 12:14:21 2022/05/23
【摘要】 如何在 SAP ABAP 系统创建 web service 提供者本文主要思路就是创建一个 ABAP function module,然后通过事物码 SOAMANAGER 将其封装成 web service.下面这个函数在 SAP CRM 里创建,逻辑是简单地根据 SAP CRM 产品 ID,从数据库表里读取其描述信息并返回。FUNCTION ZGET_PROD_DESCRIPTION.*...

如何在 SAP ABAP 系统创建 web service 提供者

本文主要思路就是创建一个 ABAP function module,然后通过事物码 SOAMANAGER 将其封装成 web service.

下面这个函数在 SAP CRM 里创建,逻辑是简单地根据 SAP CRM 产品 ID,从数据库表里读取其描述信息并返回。

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.

需要用事物码 SOAMANAGER 暴露成 Web Service 的函数,必须标注成 Remote enabled:

SE37 里,菜单 Utilities->More Utilities->Create Web Service->From the Function Module:

按照向导一步步 Next 即可,按照自己的实际场景,选择合适的 Web Service 调用安全认证机制。

完成向导后,应该能得到如下的服务定义:

点击上图 ALV 面板的 “WSDL” 标签页,浏览 Web Service 的 WSDL:

使用事物码 SOAMANAGER, 创建 Web Service Configuration:

找到我们刚才通过向导创建好的服务定义:

点击 Create Service 按钮:

选择合适的通信安全设置(Community Security):

点击 Finish 按钮:

现在这个 web service 就可以消费了。点击这个图标:Open Binding WSDL Generation:

把这个用于绑定的 WSDL 链接保存下来备用。

下面介绍 SAP ABAP Web Service 的消费步骤。

事物码 SE80,新建一个 Service Consumer:

在 Generation Source 里,选择 External WSDL / Schema:

把之前我们创建的 Service Definition 里创建好的 Service Definition WSDL Url,粘贴过来:

激活 Service Consumer,会自动生成一个 ABAP 类,这个类用于消费 web service. 激活该类,记下其名字。

回到事物码 SOAMANAGER, 找到之前创建的 Consumer Proxy:

创建一个新的 logical port:


将 Web Service 创建时保存的 url 填进去。记住不能将 SE80 里 WSDL 标签页里的 url 填入,否则会遇到下列错误:

SRT Framework exception: Initial value “consumer context table” in method IF_SRT_WSP_CONFIG_REGISTRY~CREATE_CONTEXTS_FROM_WS of class CL_SRT_WSP_CONFIG_REGISTRY

从 SE80 Service Consumer 里,我们能观察到这个代理类的输入和输出参数定义。

现在就可以在 ABAP 报表里,消费这个 proxy class 了。

完整的 ABAP 代码:

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 报表,通过 web service 调用的方式,根据产品 ID ARNO_TEST004,拿到了其描述信息:TEST FOR WORKSHOP dsf test 11 tesdgt12

这个描述信息,和我们在 WebClient UI 上观察到的一致:

ABAP Web service 执行的监控和跟踪

事物码 SRT_UTIL, 为需要进行 Web Service 执行监控的用户,创建一个新的配置:

将 Functional Trace 下拉菜单项的值选择成 High. 根据实际需要,也可以启用 Performance Trace 和 Payload Trace,这些选项默认都是关闭状态:Inactive.

最后别忘了点击 ”Save Configuration“ 按钮。

重新执行会触发 Web Service 调用的操作。然后回到事物码 SRT_UTIL,点击 Functional Trace,点击刷新按钮,就看到了刚才 Web Service 调用的执行明细。

其实用法和 SQL Trace 即事物码 ST05 很类似。

双击类型为 ”Response“ 的某一行,能看到 Web service 调用返回的明细,比如之前提到的,根据输入产品 ID 去数据库查询,再返回的产品描述信息:TEST FOR WORKSHOP dsf test 11 tesdgt12

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。