BADI的层次分析以及BADI里面的每个块的理解 看完你就懂!
来源:互联网 发布:淘宝mp3 编辑:程序博客网 时间:2024/06/06 18:17
在讲本文之前有一个要认清的概念就是,我们建立的BADI imp,到底是怎么发挥增强的作用的:
badi本身是一个接口,可以创建很多IMP,但是这些IMP都怎么起作用呢?
(有两种情况,第一是例如一个主数据的BADI,当你创建了IMP,当修改主数据的时候,就会走这些IMP的代码。另外一个是,例如自己建一个Z的BADI,然后使用方法就是通过在自己的程序里面调用这个object,并且调用具体的method)
1、首先想知道例如在某个标准程序里面要做增强,我应该使用那些BADI,可以尝试这样:
badi对象的信息存储在SXS_INTER,SXC_EXIT, SXC_CLASS和SXC_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时的个人理解,如有错,欢迎指出,本人也会不断的学习然后去更新文章!谢谢!
- BADI的层次分析以及BADI里面的每个块的理解 看完你就懂!
- SAP BADI的实现1-构建BADI
- SAP BADI的实现2-实现BADI
- SD相关的BADI
- SD相关的BADI
- SD相关的BADI
- BADI 的应用...
- 查找BADI的方法
- 查找BADI的方法
- BADI的实现步骤
- BADI的实现
- 关于BAdi的总结
- 查找BADI的方法
- BADI的查找与实现
- BADI 中错误信息的处理
- BADI 中错误信息的处理
- 查找user_exits & badi的程式
- SAP 找需要的BADI
- FastReport.Net报表经验记录
- HDU 1181 变形记 (DFS / Floyd)
- VC++深入详解-第三章学习心得
- 关于greenPlum中通过gpfdist导入数据不成功的问题与原因
- (C++设计模式) ------享元模式-- 结构型模式
- BADI的层次分析以及BADI里面的每个块的理解 看完你就懂!
- 仿新浪微博登陆邮箱提示效果!
- [C++基础]volatile关键词
- IO操作之使用zip包压缩和解压缩文件
- 自旋锁spin_lock和raw_spin_lock
- hdu 1203 I NEED A OFFER!
- 正则表达式——1
- Processes and Threads[译]
- java比较器Comparable接口和Comaprator接口