写点什么

观察者模式在 One Order 回调函数中的应用

用户头像
Jerry Wang
关注
发布于: 2021 年 05 月 23 日
观察者模式在One Order回调函数中的应用

例如需求是搞清楚 function module CRM_PRODUCT_I_A_CHANGE_ORGM_EC 在什么样的场景下会被调用。当然最费时间的做法是设一个断点,然后跑对应的场景,观察断点何时被触发。也有另一种不通过调试的分析方法:


使用事务码 CRMV_EVENT, 输入函数名称 CRM_PRODUCT_I_A_CHANGE_ORGM_EC:



得到结果:



上述结果的业务含义是:每当 Sales area 被创建或者更新时,我们查询的 function module 都会自动被 One Order 框架调用。


观察如下调用栈:



那么为什么从业务上来说,每当一个订单的 Organization Model 组织架构数据发生变化之后,就需要调用这个回调函数呢?打开这个函数的源代码,在 102 行看到了 CRM Product 的 settype 之一, CRMM_PR_SALESG(Set type allowing you to group products for various purposes. As this set type is dependent on distribution chains, a distribution chain has to be selected before data can be maintained)的数据被读取。


关于这个 settype 更多说明,请参考SAP Help.



这个 settype 是一个 Distribution Chain 相关的 settype, 离开了某个具体的 Sales area 则无意义。



因此每当订单的 Organization model 数据发生变化时,CRMM_PR_SALESG 的数据必须根据变化后最新的 Organization model 数据重新读取。利用 One Order 框架,这种 Organization model 的变化和 CRMM_PR_SALESG 的读取这种依赖关系实际上通过设计模式里的"观察者模式"来完成的。CRM_PRODUCT_I_A_CHANGE_ORGM_EC 是 Organization model 数据变化的众多观察者之一,通过事务码 CRMV_EVENT 订阅了 Organization model 数据变化这一事件。每当 Organization ,model 数据发生变化时,这个变化通过下图的 CRM_EVENT_PUBLISH_OW 发布出去,其他观察者就能基于这个发布者发布的事件进行对应处理,在我文章的这个例子里,就会调用 CRM_PRODUCT_I_A_CHANGE_ORGM_EC 根据最新的 Organization model 读取 settype CRMM_PR_SALESG 的数据。



要获取更多 Jerry 的原创技术文章,请关注公众号"汪子熙":



发布于: 2021 年 05 月 23 日阅读数: 6
用户头像

Jerry Wang

关注

个人微信公众号:汪子熙 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。

评论

发布
暂无评论
观察者模式在One Order回调函数中的应用