从事务码SMW01里能观察到一个BDOC可能被发送往不止一个目的site去,比如下图所示的5个site都会收到该site,而高亮显示的SMOF_ERPSITE代表ERP系统QI3的client 504会接收到这个BDOC。

CRM中间件里的发布-订阅者模式-LMLPHP

所以上图列表里的site是从哪里读取出来的?

以BDOCPRODUCT_MAT为例,在视图SMW3FDBDOC里维护回调函数:

CRM中间件里的发布-订阅者模式-LMLPHP

第一个回调SMOH_REPLICATION_WRAPPER_MSG负责决定需要从CRM将该BDOC发送到哪些site去。

CRM中间件里的发布-订阅者模式-LMLPHP

这个回调是自动生成的:

CRM中间件里的发布-订阅者模式-LMLPHP

在我的系统里,一共决定出了有6个site需要接收:
CRM中间件里的发布-订阅者模式-LMLPHP

CRM中间件里的发布-订阅者模式-LMLPHP

上图的ABAP代码里使用了guid A17123B82C2DD5118BC8080006277F8D来查询表smohsubsit,那么这个guid到底指什么东西?

可以在表SMOHPUBL里查询到guid对应的对象描述:Product Materials(MESG)

CRM中间件里的发布-订阅者模式-LMLPHP

到这里我们发现它就是我们熟悉的在事务码SMOEAC里为某个site订阅它希望监听的众多对象之一。如下图,QI3/504的site注册了"Product Materials(MESG)"的发布,意味着一旦CRM的Product发生了修改,对应的BDOC就会发送到QI3/504.

CRM中间件里的发布-订阅者模式-LMLPHP
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

CRM中间件里的发布-订阅者模式-LMLPHP

CRM中间件里的发布-订阅者模式-LMLPHP

05-11 22:10