当前位置: 首页 > Web前端 > HTML

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

时间:2023-04-02 19:04:36 HTML

比如需求搞清楚在什么场景下会调用函数模块CRM_PRODUCT_I_A_CHANGE_ORGM_EC。当然,最耗时的方法是设置断点,然后运行相应的场景,观察断点何时触发。还有一种没有通过调试的分析方法:使用事务码CRMV_EVENT,输入函数名CRM_PRODUCT_I_A_CHANGE_ORGM_EC:得到结果:上述结果的业务含义是:每当销售区创建或更新时,我们的功能模块查询将自动替换为OneOrder框架调用。观察如下调用栈:那么为什么从业务角度来说,每次订单的OrganizationModel组织架构数据发生变化时,都需要调用这个回调函数呢?打开这个函数的源代码,在第102行看到CRMProduct的一个settypes,CRMM_PR_SALESG(Settypeallowsyoutogroupproductsforvariouspurposes.由于这个集合类型依赖于分销链,所以必须选择一个分销链在可以维护数据之前)读取数据。有关此设置类型的更多信息,请参阅SAP帮助)。该settype是与DistributionChain相关的settype,没有特定的销售区域是没有意义的。因此,每当订单的Organizationmodel数据发生变化时,必须根据变化后的最新Organizationmodel数据重新读取CRMM_PR_SALESG的数据。使用OneOrder框架,Organization模型的改变和CRMM_PR_SALESG的读取之间的依赖关系实际上是通过设计模式中的“观察者模式”完成的。CRM_PRODUCT_I_A_CHANGE_ORGM_EC是组织模型数据变化的众多观察者之一,通过事务码CRMV_EVENT订阅组织模型数据变化的事件。每当Organization和model数据发生变化时,都会通过下图中的CRM_EVENT_PUBLISH_OW发布这个变化,其他观察者可以根据发布者发布的事件进行处理。在我这篇文章的这个例子中,会调用CRM_PRODUCT_I_A_CHANGE_ORGM_EC,根据最新的Organization模型读取settypeCRMM_PR_SALESG的数据。