CPI 系列透传 S4的 webservice

作者:ABAP技巧与实战 约 9 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Cloud Architecture, Data Engineering, MM, S/4HANA, SD, 云架构, 开发, 数据工程, 物料管理, 系统管理, 销售分销

# CPI系列 透传S4的webservice

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

__ _ _ _ _

**点击蓝字** 关注我们

前言

CPI是SAP公司提供的云服务,功能类似于PI/PO,用于集成多个系统之间的调用

**本文主要介绍怎么通过CPI调用S4系统发布的WEBSERVICE.(相当于通过CPI透传S4系统的WEBSERVICE)**

S4系统创建WEBSERVICE

> 详细过程见链接 无峰,公众号:ABAP 技巧与实战 [ SAP操作手册之 RFC函数发布WEB服务

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485235&idx=1&sn=970673a9c7fe3122dd9f4b436c58d8db&chksm=cf5dda05f82a53132b2794b3bbcb54096cab9c166cbf863659dd45a1ce2f9c39335249e64685&token=11021063&lang=zh_CN#rd)

注意以下事项

S4系统创建RFC函数, 把RFC函数发布成WEBSERVICE.

SOAMANAGER配置服务时,需要根据S4系统的配置确定使用http 或 https(图一)

S4系统怎么配置使用http 或https不太清楚. 但是可以根据soamanager事务代码跳出的网页界面的地址确定. 如果跳出地址是https.

这里就选用https . 否则选用http

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图一

选用错误可能导致SOAPUI测试WEBSERVICE时报错 如图二是WEBSERVICE 选择了http,测试执行时报错.

这个错误很有迷惑性 . 看起来是服务器接收到的参数 content-type 的内容 text/html 不正确.

**错误原因** : 客户端实际发送的参数是text/xml . 由于WEBSERVICE服务是http ,S4系统配置了HSTS((HTTP Strict

Transport Security)https.系统自动转换http为https时,调整了content-type参数内容. 导致这个报错.

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图二

通过SOAPUI测试通过S4/CAR系统发布的WEBSERVICE.如图三是测试的发出消息及成功后接收的消息

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图三

导出WSDL并调整

WSDL定义调整基于NOTES 2573685 ,如果未调整, CPI接口调用将会在消息监控中看到报错信息

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

修改wsdl定义文件 删除第一个找到的串 HttpsToken 的节点.

SOAMANAGER配置S4的WEBSERVICE 时最好设置无认证.

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

用火狐浏览器(可以另存文件的浏览器都可以)打开S4 WSDL定义

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

推荐使用XMLSPY软件 打开WSDL定义文件.可以找到httpstoken 节点(只需要找到并删除第一个). 删除这个节点(红框中的内容)

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

如果S4的SOAMAGER中配置了基本验证. 这里的信息会有点差异, 需要把 两个串删除,

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

联通CPI与S4/CAR系统

因为 S4/CAR系统在内网环境(云服务器通过专线连接或企业内网),CPI是公网环境. 所以需要使用SAP CLOUD CONNECT

(类似与反向代理服务器)把内网地址映射到SAP BTP中,供CPI使用. 创建连接时, 需要输入一个locationn ID (图一).

这个ID在后续CPI配置接口连接S4系统时需要.

SAP CLOUD CONECT 是SAP提供的反向代理软件, 可以安装在本地电脑(可以使用SAP提供的CLOUD CONECT

服务,也可以自行在一台同时可以访问内网/外网的服务器上安装)

创建连接时需要云服务器地区,BTP子账号,连接子账号的用户/密码(如图四)

其中子账号可以在登录SAP BTP后查找(如图五)

成功创建的连接可以在右上角启动或断开连接(如图六)

启动后的连接可以在SAP BTP中查看连接状态(如图八)

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图四

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图五

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图六

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图七

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

图八

CPI 配置接口

登录SAP BTP,点击Integration Suite 地址

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

点击Design, Develop, and Operate Integration Scenarios 进入云集成

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

点击设计菜单进入设计页面

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

点击创建按钮创建开发包

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

进入创建好的开发包,点击编辑进入修改模式

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

在修改模式下创建新的integration flow (iflow)

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

输入名称,描述等信息后,点击确定

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

点击一个保存的iflow

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

点击编辑进入修改模式

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

在修改模式点击sender.拖动箭头连接 start节点

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

在弹框中选择SOAP, 继续选择SOAP 1.X

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

选中SOAP连线, 拖动窗口或点击外部化,可以编辑SOAP的属性,推荐使用外部化的方式, 这样可以为连接属性设置参数.后续可以通过调整参数改变连接属性

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

connection 标签中设置 SOAP的相关属性

address: 调用CPI的服务的地址片段,用于区分不通的服务,必须唯一

URL to WSDL: 把S4系统发布的wsdl的定义另存为文件, 通过选择按钮,弹窗中从文件系统上传.

service/endpoint: 自动从WSDL文件中获取

**备注: 这里附加wsdl 可以让最终生成的CPI的webservice 的WSDL带有业务字段信息** .

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

点击 END节点

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

拖动箭头连接 receiver,同样选择SOAP, SOAP1.X

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

选中SOAP箭头,点击外部化,进入SOAP RECEIVER 的属性设置

address : 来自SOAPUI中测试调用S4的WEBSERVICE的调用地址. 需要注意的是,如果S4地址可以在公网直接访问,

这里可以直接使用该地址. 如果公网不能直接访问, 则需要把域名端口部分修改成虚拟地址. 该虚拟地址来自与 CLOUD CONNECT

的配置,同时把https替换成http . (如果https 未替换成http,部署会失败)

Proxy Type : 如果公网可以访问S4,使用internet 否则选择On-premise

Location ID: 配置CLOUD CONNECT 时维护的值

URL to WSDL: 再次选择使用之前上传的文件

Authentication: 验证方式选择Basic(S4发布WEBSERVICE也选择这个)

Credential Name: 验证用户需要使用单独配置好的(后面详细介绍).

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

保存并部署iflow. 如果保存部署报错. 请检查发出段SOAP 属性中的地址的唯一性.

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

查看部署状态, 空白出点击,拖动窗口显示部署状态. 已启动, 导航到管理集成内容

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

这里可以获取调用地址及WSDL定义

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

配置验证账号

进入SAP BTP 云集成,点击监控器. 点击管理安全性的安全材料

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

创建用户凭据

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

输入名称 ,登录S4系统的用户名,密码后,点击部署即可.

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

SOAPUI测试

请使用SOAPUI 5.2.1以上版本测试(低版本的会在SOAPUI中报下图的错误)

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

测试步骤如下

创建一个SOAP测试

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

输入文档中提到的WSDL定义文件(从CPI的管理集成内容找到Iflow下载).

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

输入后的界面中,可以调整project Name

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

创建的项目

CPI 系列透传 S4的 webservice - 封面图
CPI 系列透传 S4的 webservice - 封面图

展开后双击reques 1节点

把?替换成业务内容, 或者整体使用文档中的传入消息示例替换

CPI 系列透传 S4的 webservice - 封面图.textContent = new Date().getFullYear();