观察者模式在 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 的原创技术文章,请关注公众号"汪子熙":
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/e61d2912dd9a0176c31396646】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论