使用到的TCODE:SE24 、SE18、SE19
需求样例:使用MM01创建物料的销售视图时,销项税分类的字段自动填写默认值0。(因为MM01创建销售视图时虽然屏幕上并没有必输项,但是直接保存会提示销项税没维护的错误)
介绍
由于一代、二代增强还是不能满足所有的业务需求,所有SAP在一代增强和二代增强的基础又开发出来第三代的增强。这就是BADI。BADI运用了面向对象的方式来体现增强。运用面向对象的思想来实现增强的话管理和实现起来就会方便很多,而且对系统的影响会比一代和二代增强小的多(因为,一代和二代增强都是直接在原程序里面进行修改的)。
学习的步骤
如何查找BADI.
第一种方式:
SE38->事务代码对应的程序名->在程序内搜索CL_EXITHANDLER
第二种方式:
SE24-> CL_EXITHANDLER->在GET_INSTANCE中打断点,然后运行相应事物码根据它来找到运行到的BADI。
第三种方式:
它的调用方式是call method(instance), 可以通过exit_handler关键词来查找
第四种方式:
ST05选择“table buffer trace”而不是常用的"SQL trace",然后查找表和视图(SXS_INTER,SXC_EXIT,SXC_CLASS和SXC_ATTR)找到对应的BADI.
根据上面的方法来实现我们的需求:SE24-> CL_EXITHANDLER->在GET_INSTANCE中打断点
然后查找到下面这些BADI
输入TCODE-MM01后
BADI_SCREEN_LOGIC_RT
W_RETAILSYSTEM_IDENT
BADI_MATN1
选择视图时
BADI_MATERIAL_OD
进入事务代码后
BADI_MATERIAL_OD
ECM_EXIT
BADI_LAYER
GOS_SRV_SELECT
BADI_MATERIAL_OD
BADI_MATERIAL_REF
查看BADI。
在SE18中分别查看这些BADI。如下图
这个增强BADI_MATN1下包含了一个接口IF_EX_BADI_MATN1,而这个接口下面包含了4个方法。查看这些方法是否有我们的需求。
点进方法里面取看,很显然,这是一个对MATNR进行输入输出转换增强。并不是我们想要的。
按照同样的步骤来查找最后可以找到是在BADI_MATERIAL_REF下CREATE_MATERIAL方法。然后在CT_SALES_TAX这个结构内去完成我们的需求。(小技巧,寻找BADI的时候如这个在给字段一个初始的默认值。那么可以先找到这个字段对应的字段名,然后根据参数中的描述和字段名去搜)
描述是对物料的税(非常接近我们想要的需求了)。
然后看它参考的结构,和屏幕字段上面的完全一致。确定就是它了。
已经找到需要的BADI了,接下来就是用BADI去实现我们的需求。
首先我们要创建一个BADI的实现(BADI是面向对象的思想,可以把BADI理解为一个类)可以在SE18下这里的增强或者点击显示进去后的创建,这2种方法是完全一致的。
双击方法进去写代码
写完后激活。
然后激活增强(上面是激活程序,这个是激活增强。不是一个东西!)
一般来说在测试增强前都要先检测确认下增强是否被激活
可以发现进入屏幕后自带默认值0了。完成测试。
学习心得: BADI可以说是基于面向对象概念的增强BADI源代码发布以接口的方式,通过接口来让用户实现增强,可以说让用户可以使用增强的地方更多了些。
容易的地方: 由于BADI都是一些接口,所以只需要找到对应的接口传对应的参数即可完成我们的需求。
难点:也由于BADI都是一些接口,所以有可能会有很多的参数。要找的我们需要的BADI和参数会有点难度。