CPI 与SAP IDOC的连接

1. SAP 端配置

1.1 SALE 定义逻辑系统

在这里插入图片描述
在这里插入图片描述

1.2 SM59定义与SAP CPI的HTTP连接

此时可以只填写CPI的域名、端口、代理信息,还有CPI的基本鉴权即可
在这里插入图片描述

1.3 BD64 创建模型视图

模型视图需要在待推送数据的Client做配置
在这里插入图片描述

1.4 生成合作伙伴参数

在这里插入图片描述
合作伙伴系统选择1中所创建的逻辑系统,执行即可
在这里插入图片描述
在这里插入图片描述

1.5 WE21 定义端口

RFC目标选择第2步中所创建的HTTP连接
其他参考下图
在这里插入图片描述

1.6 WE20 维护合作伙伴参数

完成第4步之后,会自动生成逻辑系统的伙伴类型
选中待推送IDOC的伙伴类型,添加出站行
在这里插入图片描述
消息类型和基本类型选择待推送的IDOC类型
接收方端口填入第5步创建的端口
在这里插入图片描述
可以配置多个消息类型,推送时就会根据第3步时的规则自动推送对应的IDOC至端口
在这里插入图片描述

2. CPI流程配置

整体配置如下
在这里插入图片描述

2.1 配置IDOC地址

在这里插入图片描述

2.2 记录IDOC HEADER信息

把HEADER改成application/json,外围系统收到的才是json
在这里插入图片描述
SAP的IDOC号和IDOC类型都记录在抬头上,可以暂存到exchange property中,方便后续使用
在这里插入图片描述

2.3 分配路由

HEADER抬头中的IDOC类型可以用于区分IDOC目标,客户的往客户的接口推,供应商往供应商的接口推,避免重复开发IFlow
在这里插入图片描述

2.4 记录日志

Mapping文件可以通过SE38执行SRT_IDOC_WSDL_NS程序,下载基本类型对应的WSDL文件
在这里插入图片描述
中间这一节跟常规REST2HTTP的配置一模一样,不赘述了
在这里插入图片描述
此处写了groovy脚本,用于将外围系统返回的JSON报文收集,并重新封装成新的JSON报文,准备返回给SAP的RFC

注:由于IDOC接口均是异步,只要SAP往CPI接口推送过来了,SAP就视为IDOC成功,但实际上有可能在CPI推送至外围系统时失败,所以需要在CPI上记录外围返回的JSON报文,并返回给SAP的接口做日志记录

在这里插入图片描述
groovy脚本如下
source_body就是外围系统返回的json报文
target_body是SAP RFC mapping的报文结构

/* Refer the link below to learn more about the use cases of script.
https://help.sap.com/viewer/368c481cd6954bdfa5d0435479fd4eaf/Cloud/zh-CN/148851bf8192412cba1f9d2c17f4bd25.html

If you want to know more about the SCRIPT APIs, refer the link below
https://help.sap.com/doc/a56f52e1a58e4e2bac7f7adbf45b2e26/Cloud/zh-CN/index.html */
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.json.*;


def Message processData(Message message) {
    // Source Body
    def source_body = message.getBody(String.class);    
    
    // Target Body Structure
    def jsonSlurper = new JsonSlurper();
    def target_body = '{"IF_STATU":"","IFMSG":"","BUSNO":"","IFNUM":"IDOC001","ORSYS":"","BODY":""}';
    def list = jsonSlurper.parseText(target_body);
    
    // Target Body Value
    list.IF_STATU = '01';
    list.IFMSG = '成功';
    list.BUSNO = message.getProperty("IDOC_ID");
    list.IFNUM = 'IDOC001';
    list.ORSYS = 'WMS';
    list.BODY = source_body;
    
    // Return Body
    target_body = JsonOutput.toJson(list);
    message.setBody(target_body);
    return message;
}

下面的内容和常规REST2RFC接口请求一致,不再赘述
在这里插入图片描述

2.5 返回SAP SM59,补全HTTP连接

在这里插入图片描述

3 测试

3.1 BD14供应商推送

在这里插入图片描述
IFlow一切正常
在这里插入图片描述
日志记录正常,这个就看项目怎么设计日志平台的了
在这里插入图片描述

4. 自动推送主数据

4.1 BD61激活变更指针

在这里插入图片描述

4.2 BD50激活对应的消息类型

在这里插入图片描述

4.3 SE38 RBDMIDOC 推送消息类型

后面配置定时JOB跑这个程序就能实现变更的IDOC自动推送了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值