- BADIs对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。
- SAP程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。
- 基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。
- SE18 查找接口,SE19 实现接口就可以实现用户增强。
方法一:
- 通过SE24,输入CL_EXITHANDLER
- 然后双击方法GET_INSTANCE中设置断点
- 然后运行事务代码判断 exit_name的值
方法二:
- 通过ST05跟踪,BADI对应的数据表为 SXS_INTER, SXC_EXIT, SXC_CLASS 和 SXC_ATTR,而这些表都是通过视图V_EXT_IMP 和 V_EXT_ACT来查询的。
- 打开运行事务码: ST05 选择“table buffer trace”而不是常用的"SQL trace"
- activate trace(开始跟踪)
- 运行事务码,例如:me21n
- 创建一个采购订单,保存
- deactivate trace(结束跟踪)
- 点击display trace,在出来的选择条件中: objects中输入:V_EXT_IMP和V_EXT_ACT;在 operations中输入“OPEN”
- 查询
- 通过查询的结果可以看出,视图V_EXT_IMP的BADI的接口类名字都是以IF_EX_开头的,其中IF_EX_之后的就是对应BADI接口的定义。