通信概览图
外围系统与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(EXPORTINGoutput = ls_reqIMPORTINGinput = 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并删除最外层元素后返回给外围系统的报文