1.利用系统提供的BADI做增强
http://scnblogs.techweb.com.cn/tcsapbw/archives/641.html
从例子中看到SE19是选择Classic BADI来创建Implementation,但其实在后面要实现Method之前会要求创建或选择Enhancement Implementation(这个图没给出来),这又是New BADI选项相关的,实在让人不太明白。
此外就是作为增强的BADI,查找起来只能按链接提到的搜索CL_EXITHANDLER,而有些BADI没有提供Documentation (e.g. CKML_UPDATE),能否实现特定功能以及如何实现某些功能都只能看具体情况去搜索,实在是非常不方便。
另外如 http://scnblogs.techweb.com.cn/tcsapbw/archives/573.html 所示,SAP还有其他的增强方法,但对于一个具体的需求,我们没有一个迅捷的方法(或者有而我不知道)知道可以采用怎样的增强来实现。
2.创建、实现及使用Classic BADI
http://scnblogs.techweb.com.cn/tcsapbw/archives/652.html
在这个例子中所看到的,简言之就是SE18的BADI Name下面包含了一个Interface,而SE19的BADI Implementation下面包含了一个实现该Interface的class (通过实现具体的Method)。而在代码程序里调用这个BADI实现某个功能的部分看起来和普通的ABAP OO没有什么太大区别(只不过是通过Call METHOD cl_exithandler=>get_instance 来获取类的示例对象),当然你可以说什么体现了什么工厂模式之类的,但在SAP本身这个面向业务的系统里,过份强调OO模式感觉意义并没那么大。
另外测试了一下,如果创建了多个BADI Implementation,调用时都会起作用,但一定要在SE18里选中Multiple use,否则在Call METHOD cl_exithandler=>get_instance 时会报ABAP错。
3.Enhancement Spot and BADI
http://www.cnblogs.com/libihui422/archive/2010/04/18/1715012.html
http://www.cnblogs.com/libihui422/archive/2010/04/18/1715036.html
http://www.cnblogs.com/libihui422/archive/2010/04/18/1715048.html
看上去,Enhancement Spot似乎可以简单看作是在BADI Name外面又来了一层,BADI Name可以和Enhancement Spot同名,可能造成一些误解。同样Enhancement Implementation看作是BADI Implementation外面又来了一层。
4.Differences Between Classic and New BAdIs
http://help.sap.com/saphelp_nw04s/helpdata/en/ee/6f3b42ea85b26be10000000a155106/content.htm
里面第1点可以简单验证如下:程序中如下的定义DATA:handle TYPE REF TO Z_TEST_NEW_BADI_001. 只对通过Enhancement Spot所定义的BADI“Z_TEST_NEW_BADI_001”有效,假如Z_TEST_NEW_BADI_001是Classic BADI,编译时会报错。