BADI的层次分析以及BADI里面的每个块的理解 看完你就懂!

在讲本文之前有一个要认清的概念就是,我们建立的BADI imp,到底是怎么发挥增强的作用的:


badi本身是一个接口,可以创建很多IMP,但是这些IMP都怎么起作用呢?

(有两种情况,第一是例如一个主数据的BADI,当你创建了IMP,当修改主数据的时候,就会走这些IMP的代码。另外一个是,例如自己建一个Z的BADI,然后使用方法就是通过在自己的程序里面调用这个object,并且调用具体的method)


1、首先想知道例如在某个标准程序里面要做增强,我应该使用那些BADI,可以尝试这样:

      badi对象的信息存储在SXS_INTER,SXC_EXIT, SXC_CLASSSXC_ATTR 这四个表中,ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI


2、可以通过一个程序取查找某些t-code会使用到哪些增强和出口的,在本博客的另外一个文章(分享一个查找t-code和程序的出口)可以看到。当然这个找到某些BADI增强之后,或许还是要通过设置断点或者是方法1去确定那个才是最终的方案。


3、SE24查看CL_EXITHANDLER类的GET_INSTANCE方法,在 “CALL METHOD  cl_exithandler=>get_class_name_by_interface”设置断点,运行事务,DEBUG查看EXIT_NAME的值。


4、一个通过SE38在程序中搜索关键字CL_EXITHANDLER,查找程序使用BADI的方法。

http://blog.csdn.net/wbin9752/article/details/7951390


      然后对这些BADI建立了相应的IMP之后,当你运行这些标准的t-code之后就会跳入这些IMP里面的method,实现增强。


本文章讲述的是本人在初次接触BADI的一个学习和了解的过程,并不去讲述如何去创建这个BADI(这个网上也有很多),主要是为了帮助初学者如何去理解和简单实用BADI。


首先讲到的是BADI的层次概念:

BADI:                                   UDM_BASIS_RULE
BADI interface:               IF_EX_UDM_BASIS_RULE  
badi interface class:        CL_EX_UDM_BASIS_RULE
IMP:                                     ZUDM_BR00000003      
IMP class:                       ZCL_IM_UDM_BR00000003


1、BADI                  SE18进入之后:



输入BADI的名称之后进入的就是这个BADI的内容界面,里面有interface,interface怎么理解呢,其实就好比是这个BADI的一个框架,定义好这个BADI有哪些接口(method)



但是这个interface的接口具体有哪些输入输出变量或者是功能代码是怎样的就通过interface class实现:  SE24输入interface class的名称(通常interface的class的名称都是把interface名称的前面的IF改成CL即可)



这个interface的class有了之后,就可以在程序里面实现增强了,怎么实现:

DATA:    IT_BADI     TYPE REF TO   IF_EX_UDM_BASIS_RULE.        (这里需要指向这个interface)


call method cl_exithandler=>get_instance                       (此函数是必须要有的,只要是要call  BADI里面的method,都需要这个method)
     changing
        instance IT_BADI.

CALL METHOD IT_BADI->EVALUATE                              (然后这里就直接调用里面的method了)
   EXPORTING
     I_LOG IT_LOG
     IT_SELECT_OPTIONS  IT_SE
     I_BUSINESS_PARTNER IT_BUSSINESS
     FLT_VAL IT_FLT_VAL.


这些都是标准的,那我可不可以不创建BADI,然后我需要的只是这个interface而已,我自己创建一个class然后


在interface的栏目下输入参考的interface,然后再method里面就有了!然后具体的使用方法也和上面的一样,先定义一个interface变量,然后就call  method就行了。


2、BADI的imp和imp class

已经知道BADI,去创建BADI的imp和imp class :    SE19进入,然后创建



创建之后,里面可以自动带出BADI的interface到imp里面,并且会自动创建imp class:



创建好了imp和imp class之后怎么在程序里面实现增强呢:

 DATA:      IT_BADI TYPE REF TO ZCL_IM_UDM_BR00000003.     (这里需要指向这个imp class


call method cl_exithandler=>get_instance
     changing
        instance IT_BADI.

CALL METHOD IT_BADI->IF_EX_UDM_BASIS_RULE~EVALUATE                 (注意这里的method是这个,而不是直接的EVALUATE)
   EXPORTING
     I_LOG IT_LOG
     IT_SELECT_OPTIONS  IT_SE
     I_BUSINESS_PARTNER IT_BUSSINESS
     FLT_VAL IT_FLT_VAL.



以上就是正常顺序的创建BADI增强的,如果我们在程序中看到有call method,我们也可以通过这里去查找interface,BADI,等:

我们双击method的名字,可以查看到这个interface:



然后通过interface的名字去表SXS_INTER取查找对应的BADI,如果表里面没有的话,就可以到SE24里面查找interface对应的class,说明这个interface没有对应的BADI,是直接通过class来实现的。



如果知道了BADI IMP class,则可以通过SE24去反过来查找BADI 和BADI imp


以上就是刚接触BADI时的个人理解,如有错,欢迎指出,本人也会不断的学习然后去更新文章!谢谢!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值