第三代增强BADI-增强点(新Badi)多个实施
创建增强点
BADI的实现
由于一个BADI的实现可以有多个类,这些多个实现类需要组织(打包、捆绑)在一起(与多个BADI放在一个Enhancement Spot容器中是一个概念),所以需要创建一个新的BADI增强实现容器ZIM_BADI_DEM001:
多个BADI/ Enhancement实现时究竟调谁
在同一Enhancement Implementation中(如下图中的ZIM_BADI_DEM001),不同的BADI Implementations(ZIM_BADI_DEM001、ZIM_BADI_DEM002)之间究竟选谁的问题,是由 缺省实施(Default Implementation)、活动实施(Implementation is active)选项共同来决定的,且在同一时间内只能有一个BADI Implementations能被激活调用,所以要通过这两个选项来控制究竟谁被用来当作当前实现被使用,是否被使用也可通过图中的 “运行时行为”说明文字来查看:
过滤器
回调类
如果某个BADI没有实现时,则在调用时会Dump,为了在没有实现时,需实现一个默认的回调类。如SAP系统提示的标准BADI都会有默认实现,同时也是simple例子。
METHOD zif_badi_demo01~write.
MESSAGE 'FALLBACK' TYPE 'I'.
ENDMETHOD.
测试程序
使用SE38创建程序,点击“创建”按钮:
REPORT zbadi_test.
START-OF-SELECTION.
DATA lo TYPE REF TO zbadi_demo01. "定义BADI
GET BADI lo
FILTERS
filter1 = 'A'. "通过GET BADI得到我的实现类,如果过滤条件不成立的话将什么都不执行;
CALL BADI lo->write. "调用BADI