为什么要详解这块内容?
因为需要把PO的消息报文读到我们自己的系统数据库中,永久保存数据。而在PO的HANA数据中,还是按照10天的保存期保存日志就好。
(SAP PO 是SAP公司推出的ESB中间件产品,就是本文的PO;不是采购订单PO,也不是JAVA持久化对象POJO)
一、PO的HANA数据库中,存放消息报文相关的表和视图:
BC_MSG_LOG 存放消息日志报文
BC_MSG_LOG_STAT 存放消息传输的状态
BC_MSG_LOG_VIEW 按BC_MSG_LOG_STAT表去BC_MSG_LOG中抓日志数据和报文
二、一个WebService接口示例,PO的工作组件、步骤和日志:
当BI=2,AM=2,MS=2的时候,PO上的三个组件都记录日志,可以看到日志的类型有BI,MS,AM:
(这几个参数在PO中的设置,请查看上一篇blog文章)
日志组件的官方说明:
MS: between receiver determination and mapping step
AM: between mapping and schema validation
BI: before inbound processing
SC: no logged?
在数据call方向,有三个步骤:0,1,2;在数据Rtrn方向,有两步:0,1。
在BC_MSG_LOG_STAT表中,记录了一个方向上最后一步的状态是成功还是失败。
在BC_MSG_LOG_VIEW视图中,会参照BC_MSG_LOG_STAT表中的内容去BC_MSG_LOG表取数,
如果日志记录全开,当BI=2,AM=2,MS=2的时候,BC_MSG_LOG_VIEW视图会看到call方向上的最后第2步的传递状态,在return方向上可以看到最后1步的传递状态。STATUS字段中 “DLVD” 表示成功传递(我猜的),“FAIL”表示消息失败。
BC_MSG_LOG_VIEW视图其实也就是PO管理端页面看到的内容,这也就是一次接口消息是成对出现的原因,其实是记录了call和return两个方向的报文内容:
三、报文放在哪儿?
报文放在BC_MSG_LOG表的MSG_BYTES字段中,以二进制的方式存储,要查看报文只需要把二进制转换成文本即可。
我们可以简单把报文读到自己的数据库中,永久保存。
call的报文
return的报文:
而在ERP S4系统sxi_monitor中看到的报文,是存放在ERP的数据库中,和PO的数据库关系不大。
sxi_monitor参数中可以设置日志保存的天数。