Created by Jerry Wang on Aug 19, 2014
通过UI创建一个transaction type为TA的sales order为例:
transaction type TA对应的transaction category如下:
Order修改的所有操作都是通过FM CRM_ORDER_MAINTAIN 统一trigger:
最终会调用CRM_ORDER_H_MAINTAIN_OW 或者 CRM_ORDER_I_MAINTAIN_OW处理Header或者Item:
里面的FM CRM_ORDERADM_H_PUBLISH_OW统一raise Order header level的各种事件,从而调用事件上注册的callback。
在该function module内搜索关键字 CRM_EVENT_PUBLISH_OW,能找出该FM 负责raise的所有支持的event:
internal table gt_allowed_callbacks_hdr 存放了当前系统注册的所有call back信息。系统理一次进入CRM_EVENT_PUBLISH_OW时,该内表是空的,通过subroutine register_callbacks 初始化。
当前创建的sales order
gt_pr_assign包含两个从SPRO里维护的category 再加上一个generic的BUS20001:
register完毕后针对transaction type TA,有411个可用的callback:
CRM_EVENT_PUBLISH_OW的执行逻辑就是找出这411个callback中有哪些是注册在Order的header level,且event为after_create:
lv_guid_hdr: 新创建的sales order guid
lt_atonce_exets: 需要立即执行的function module name
真正的function module 执行发生在这里: