PO 发布外围系统REST->SAP RFC同步接口

2024-03-21 18:50

本文主要是介绍PO 发布外围系统REST->SAP RFC同步接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通信概览图

外围系统与PO、SAP的请求响应通信过程大致可以用下图描述
(个人整理所得,可能有误,欢迎指正)
在这里插入图片描述

1. 前期准备

1.1 SAP端

在SAP先开发一个RFC接口,示例如下
在这里插入图片描述
勾选远程启用的模块
在这里插入图片描述

1.2 PO端

需要提前将SAP的RFC注册到PO的ESB中,具体配置是PO顾问前期初始化的时候做的,应该是在SM59要配置PO和SAP的什么连接,这部分不是很清楚,猜测是下图的SM59连接
在这里插入图片描述

1.3 个人PC

必须提前在开发PO的电脑上安装Java环境,我装的Java1.8是ok的
在这里插入图片描述

2. Enterprise Services Repository

2.1 建立工作区

通过PO顾问给的POD地址:【http://{PO服务器域名}:50000//dir/start/index.jsp】进入POD页面
点击Enterprise Services Builder,下载Java小程序
在这里插入图片描述
运行Java小程序之后会见到如下页面,一般会按公司->对接系统->模块来分别新建版本->工作区->文件夹
在版本下新建DEMO系统的工作区,随后分模块将对应的接口放到各模块文件夹下,假设航班接口属于MM模块,则建立如下所示结构,建立完成需要保存并激活
在这里插入图片描述

2.2 导入RFC

如果PO顾问正确配置了ESB到SAP的连接,那下方的imported object处可以选择RFC,即前文提及的启用远程模块调用的接口,右键RFC,点击import of sap objects
在这里插入图片描述
依次输入SAP服务器地址,实例号,用户名和密码,点击continue
在这里插入图片描述
选中待导入的RFC,点击continue
在这里插入图片描述
最后点击finish,等待导入成功即可
在这里插入图片描述
在这里插入图片描述
导入完成需要激活
在这里插入图片描述

2.3 新建入参Mapping映射

在这里插入图片描述

新建对象Mapping Object->Message Mapping
在这里插入图片描述

依次点击Definition->小方格->Source Message->Find Design Object
在这里插入图片描述
从中找到先前一步导入的RFC 结构YSEELEFM004,点击apply
在这里插入图片描述
依次点击Definition->小方格->Target Message->Find Design Object
在这里插入图片描述
从中找到先前一步导入的RFC 结构YSEELEFM004,点击apply
在这里插入图片描述
导入之后请求双方都有结构了,然后选中顶层节点,拖拽左侧的小点连线至右侧的小点
在这里插入图片描述
连接完成后两侧小点会变色,下方的面板处也会有两个节点的连线
在这里插入图片描述
在连接完顶层小点后,点击红色方框标注的按钮,即可自动完成字段名称相同字段的映射
在这里插入图片描述
在这里插入图片描述
这样外围系统的入参和SAP的入参就能mapping上了,前提是外围系统和SAP使用相同入参
在这里插入图片描述

2.4 新建出参Mapping映射

在这里插入图片描述
和新建入参操作一致,只是需要选择出参的Response
在这里插入图片描述
最后效果如下
在这里插入图片描述

2.5 新建Service Interface

PO与外围系统是通过SI_OUT进行通信的(参考顶端图片SI_OUT部分),而PO与SAP是通过RFC直连(参考顶端图片RFC部分)通信,所以只需要配置一个PO与外围系统的SI即可
在这里插入图片描述
在这里插入图片描述
依次选择Outbound->Synchronous->RFC Message
请求的入参选择前方导入的RFC入参结构
请求的出参选择前方导入的RFC出参结构
正常如果要自定义请求的入参和出参,需要再额外构建DT和MT,但是直接使用RFC的结构可以省去该步骤
在这里插入图片描述
保存激活即可

2.6 新建Operation Mapping

Operation Mapping就是将出站和入站的SI(或RFC)服务接口串联起来
在这里插入图片描述
在这里插入图片描述
新建Operation Mapping操作映射
在这里插入图片描述
选中左侧source operation的行项目,添加服务
在这里插入图片描述
选择前一步创建的service interface
在这里插入图片描述
再选择右侧的target operation行项目
在这里插入图片描述
选择连接到SAP系统的RFC服务
在这里插入图片描述
选择下方的message mapping
在这里插入图片描述
再选择之前创建的MM消息映射对象,就能将双方入参的数据进行映射
在这里插入图片描述

点击保存之后,可以看到下方多了request和response的页签,刚刚的MM消息映射只配置了外围系统->SAP的请求消息映射,还需要配置一个SAP->外围系统的响应消息映射
在这里插入图片描述

转到response页签,这次选择响应的消息映射
在这里插入图片描述
保存激活即可

3. Intergration Builder

通过PO顾问给的POD地址:【http://{PO服务器域名}:50000//dir/start/index.jsp】进入POD页面
点击Integration Builder,下载Java小程序
在这里插入图片描述
展开 Communication Comonent Without Party,其中 Business System 和 Business Component 都可以定义SAP系统以及外部系统等通讯对象。一般 Business System 用于定义 SAP系统(如BS_DEV_300),Business Component 用于定义非SAP系统(如此处定义的外部调用方 BC_TEST_CX)
在这里插入图片描述

3.1 建立BS-RFC Communication Chanel接收信道

RFC信道接收来自Mapping转换后传递给PO RFC服务接口入参的XML报文,或接收来自SAP RFC接口的XML报文并传递给RFC服务接口
在这里插入图片描述
一般项目上一个Client建一个RFC接收信道就够了

在PO系统的对应BS_400中新建信道,作为RFC的接收信道
在这里插入图片描述
输入信道描述,选择适配器类型为RFC

由于SAP作为接收方,勾选Receiver
输入SAP Client的服务器信息和登录信息
登录账号需具有通讯账号权限,避免使用用户账户,否则达到用户账号重置密码期限时接口访问会失效
在这里插入图片描述
保存激活即可

3.2 建立BC-REST Communication Chanel发送信道

REST信道接收来自外围系统的JSON报文,传递给SI_OUT使其能进入Mapping阶段;或接收来自SI_OUT转换完的JSON报文,返回给外围系统
在这里插入图片描述

在BC下新建BC_DEMO系统,一个外围系统方建一个BC就好了
在这里插入图片描述
双击BC_DEMO系统,添加2.5小节新建的SI_OUT发送端服务接口到该系统下
在这里插入图片描述
在BC_DEMO系统创建航班查询REST 发送信道
在这里插入图片描述
输入信道名称
在这里插入图片描述
选择REST的接收器类型
在这里插入图片描述

3.2.1 General页签

参数的解释参考下图,照样填写即可
Element Namespace:urn:sap-com:document:sap:rfc:functions
在这里插入图片描述

往下滑还有别的内容,参数的解释参考下图,照样填写即可
在这里插入图片描述
往下滑还有别的内容
照下图填写即可,一定要做这件事儿
在这里插入图片描述

Q:为什么要这么填?
A:SAP的item节点代表内表,如果不指明item节点的数据类型是数组,在内表XML转换成JSON的时候,如果此时内表只有一行,那转换成JSON之后会被认为是对象而不是数组,大部分外围系统接收到这样的报文会异常;只有在内表行数大于一行时,在内表XML转换成JSON的时候才会被识别成内表。所以一定要记得在这里加上item(小写的),并设置Array Type = 1

Q:为什么JSON转换出来的报文,如果CHAR类型的纯数字会被认为是数字而不是字符串(具体表现就是INT没有引号,字符串有引号)?
A:猜测是PO转换报文的时候,因为RFC返回的XML报文没有指定数据类型,所以纯数字的CHAR类型在转换的时候被识别成了数字,如果要固定将CHAR类型参数转换为string,必须在PO的此处指明string,否则会出现上述问题
在这里插入图片描述

Q:为什么JSON转换出来的SAP QUAN或者CURR类型在转换之后是string,而且在最后带一个空格?
A:SAP的QUAN和CURR的类型有些带符号位,所以最后面有个空格,解决方法是在PO的ESB端Mapping阶段,在返回的Mapping对象处找到待处理的字段,使用Trim函数去除数字尾部的空格
在这里插入图片描述

3.2.2 REST Resource页签

在这里插入图片描述

3.2.3 REST Operation页签

在这里插入图片描述
保存激活即可

3.3 建立Integrated Configuration 集成配置

集成配置用来处理入站和出站的请求,将外围系统不同类型的请求分配到指定的信道中,并在最后返回对方响应
在这里插入图片描述
在这里插入图片描述
新建集成配置
在这里插入图片描述

3.3.1 Inbound Processing页签

选择接收的REST信道
在这里插入图片描述

3.3.2 Reciver 页签

在这里插入图片描述

3.3.3 Outbound Processing 页签

在这里插入图片描述

3.3.4 Reciver Interface 页签

在这里插入图片描述

3.3.5 Advanced Settings 页签

这里勾选的目的是为了让PO记录日志
在这里插入图片描述

4. Postman 测试REST接口

4.1 接口地址

PO的发布的接口地址模式比较固定

http://{服务器地址}:{端口号}/{适配器类型}/{路径后缀}

前面发布的REST接口地址就可以按以下模式填写(路径后缀在3.2.2节定义)

http://{PO服务器地址}:50000/RESTAdapter/ERP/YSEELEFM004

4.2 接口鉴权

PO发的接口是有基本鉴权的,需要在Postman中添加basic auth,账号和密码是访问PO的账号和密码
在这里插入图片描述

4.3 接口报文

SAP向PO发送Json的报文规则如下
日期:

{"DATE": "2023-12-16"
}

数字:

{"NUM": 3.1415
}

{"NUM": "3.1415"
}

字符串:

{"STRING": "ABCDEF"
}

结构:

{"STRUCTURE": {"AGE": 18,"NAME": "Seele","BIRTH_DATE: "2023-12-16"}
}

内表:

{"INTERNAL_TABLE": {"item": [{"AGE": 18,"NAME": "Seele","BIRTH_DATE": "2002-10-18"},{"AGE": 18,"NAME": "Bronya","BIRTH_DATE": "2002-08-18"}]}
}

当前PO接口的测试报文如下

{"IS_CARRID": "LH","IT_FLDATE": {"item": [{"SIGN": "I","OPTION": "BT","LOW": "1994-02-28","HIGH": "1999-02-28"}]}
}

在这里插入图片描述

5. 消息查看器查看报文

打开POD界面,点击Configuration and Monitoring Home
在这里插入图片描述
转到Monitoring->Adapter Engine->Message Monitor
在这里插入图片描述
可以在下方看到成功/失败的报文
在这里插入图片描述

5.1 失败的PO日志

点击失败的报文的数字,进入到该页面可以看详细信息,点击下方失败的请求
在这里插入图片描述
点击message log可以查看PO返回的接口失败日志,这里就是RFC适配器登录信息填错了所以报错了
在这里插入图片描述

5.2 查看PO报文Payload

点击成功的报文的数字,进入到该页面可以看详细信息
在这里插入图片描述
选中成功的消息,点击Open Message
第0行是外围系统传入的报文
在这里插入图片描述
第1行是PO加上外层元素准备传入RFC的报文
在这里插入图片描述
第2行是PO传入RFC的报文
在这里插入图片描述
第3行是RFC返回PO的报文
在这里插入图片描述
第4行是PO将RFC的XML转换成JSON并删除最外层元素后返回给外围系统的报文

这篇关于PO 发布外围系统REST->SAP RFC同步接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/833587

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r