PO 发布SAP SProxy->外围系统 WebService

发布时间:2023年12月27日

通信概览图

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

1. 前期准备

1.1 外围系统提供WebService接口

以A系统的RFC发布WebService接口
RFC发布WebService接口
在这里插入图片描述
获取到WSDL地址,下载WSDL文件到本地
SAP的WSDL文件有些特殊,需要把WSDL的Policy段注释掉,否则导入PO会出问题
在这里插入图片描述

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 导入WSDL

新建external definition 外部定义
在这里插入图片描述
选择WSDL文件,如果是SAP导出的WSDL需要把policy段注释掉,参考1.1节
点击导入后不报错就可以保存激活
在这里插入图片描述

2.3 新建入参Mapping映射

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

2.4 新建出参Mapping映射

在这里插入图片描述

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

2.5 新建Service Interface

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

依次选择Inbound->Synchronous->External Message
请求的入参选择前方导入2.2节的入参ED结构
请求的出参选择前方导入2.2节的出参ED结构
在这里插入图片描述
保存激活即可

2.6 新建Operation Mapping

Operation Mapping就是将出站和入站的SI服务接口串联起来
在这里插入图片描述
在这里插入图片描述
新建Operation Mapping操作映射
在这里插入图片描述
左侧选中SI_OUT,右侧选中SI_IN,下方的message mapping填入MM_REQ
(我下面的图里选错了,选到REST的MM_REQ了,排查了半天错误…各位同僚切勿粗心大意)
在这里插入图片描述
点击保存后,会出现Request的页签,刚刚的值其实都是在request当中的
(我下面的图里选错了,选到REST的MM_REQ了,排查了半天错误…各位同僚切勿粗心大意)
在这里插入图片描述
切到Response页签,下方的message mapping填入MM_REQ
在这里插入图片描述
保存激活即可

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-SOAP Communication Chanel发送信道

SOAP信道接收来自SAP 代理类的XML请求报文并发给SI_OUT进入到Mapping,或接收来自外围系统SOAP接口Mapping后传递给SI_OUT服务接口的XML报文
在这里插入图片描述
在这里插入图片描述

新建BS_DEV_400 的SOAP CC信道
在这里插入图片描述
新建CC 信道对象
在这里插入图片描述
选择SOAP适配器,再选择消息协议XI 3.0,保存即可
在这里插入图片描述

3.2 建立BC-SOAP Communication Chanel接收信道

SOAP信道发送来自Mapping后传递给SI_OUT的SAP XML报文;或接收来自外围系统的XML报文
在这里插入图片描述
在这里插入图片描述
在BC下新建BC_DEMO系统,一个外围系统方建一个BC就好了
在这里插入图片描述
双击BC_DEMO系统,添加2.5小节新建的SI_OUT发送端服务接口到该系统下
在这里插入图片描述
在BC_DEMO系统创建航班查询SOAP 接收信道
在这里插入图片描述
输入信道名称
在这里插入图片描述
选择SOAP的接收器类型
在这里插入图片描述
参考下图维护字段
在这里插入图片描述

SOAP接口地址是SOAP UI里面URL的地址,不要填成WSDL的地址了,不清楚就问外围系统直接要
在这里插入图片描述

保存激活即可

3.3 建立Integrated Configuration 集成配置

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

3.3.1 Inbound Processing页签

选择发送的SOAP信道
在这里插入图片描述

3.3.2 Reciver 页签

在这里插入图片描述

3.3.3 Outbound Processing 页签

在这里插入图片描述

3.3.4 Reciver Interface 页签

在这里插入图片描述

3.3.5 Advanced Settings 页签

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

5. SAP 配置SPROXY

SPROXY进入代理类,一直点点点,找到service consumer下面的SI_OUT对象
在这里插入图片描述
双击SI_OUT对象
在这里插入图片描述
前缀给个Z就好了,也可以加上模块,然后点击完成即可
在这里插入图片描述
一般没啥要修改的,直接激活就好了
在这里插入图片描述

如果后续在PO的ED里面修改结构了需要在代理类这里点Regenerate重新生成,再激活一下
在这里插入图片描述
记下这个代理类的名字,后面会用
在这里插入图片描述

6. SAP 测试SPROXY代理类

参考第5节的代理类名字,在程序里新建对象
用下述简单代码即可测试

  DATA: lo_po  TYPE REF TO zco_si_mm002_erp2demo_out,
        ls_req TYPE zzdemo_temp032,
        ls_res TYPE zzdemo_temp03response2.

  lo_po = NEW #( ).
  ls_req-it_fldate-item = VALUE #( ( sign = 'I' option = 'BT' low = '1990-01-01' high = '2000-01-01' ) ).
  ls_req-et_data-item = VALUE #( ( carrid = '1' ) ).

  TRY .
      lo_po->si_mm002_erp2demo_out(
        EXPORTING
          output = ls_req
        IMPORTING
          input  = ls_res
       ).
    CATCH cx_root INTO DATA(lo_error).
      DATA(lv_msg) = '接口异常'.
  ENDTRY.

  cl_demo_output=>display( ls_res ).

双击代理类,可以看到有个SI_OUT的方法
在这里插入图片描述
选中SI_OUT,切到参数,即可查看对应的传入传出参数类型
在这里插入图片描述
测试结果
在这里插入图片描述

5. 消息查看器查看报文

实在是懒得再写一遍了,用REST那篇的内容复制过来了,方法基本类似
打开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并删除最外层元素后返回给外围系统的报文

文章来源:https://blog.csdn.net/qq_44826887/article/details/135170299
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。