`
jgtang82
  • 浏览: 396205 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

User Exits,Customer Exits,BAdI and BTE

    博客分类:
  • ABAP
阅读更多

Basic Concepts:
1. User Exits: 是系统中预留的一些空的Form/Subroutine, 获得Access key后可以在Form中写入自己的逻辑.

2. Customer Exits :
    a. FM Exits: 在FM中include 保留的 Z 程序来提供功能扩展点
    b. Menu Exits: 在GUI status中预留+Fcode menu item, 在程序中预留对应的Handling FM Exits
    c. Screen Exits: 在Screen 中预留 Subscreen, 在程序中预留transport data to subscreen & return / retrieve data from subscreen 的 FM Exits

3. Enhancement & Enhancement Project :
    a. Enhancement: 把系统程序中的相关Customer Exits收集起来成为一个Enhancement, 一般情况是按功能和类型来收集的, 比方说几个相关的FM eixts组成一个enhancemnet, 或就一个 screen 或 menu exits 形成一个enhancement.  查看/修改 Enhancement的t-code为: SMOD
    b. Enhancement Project: 在使用Enhacement时, 要先建立一个Enhancement Project, 可以将多个Enhancement assign给一个enhancement project去管理, 对应t-code: CMOD.

4. BADI (Business Add-in), 通过面向对象的方式来提供扩展点,它支持Customer Exits所有的enhancement 类型,因目前Class中不能包含subscreen所以在用BADI enhance screen时比用Customer Exits要复杂些.相关机制请参考我以前的blog.

这里要提下的是非Multiple Case的BADI同时只能有一个Active Implementation, 即要Active新生成的需先inactive旧的. 若是Multiple Case的BADI则可同时有多个Active Implementation,且所有的Implementation在没有Filter的情况下都会被遍历执行.

5. Other
User Exits与Customer Exits的区别在于User Exits的使用需要Access Key但Customer Exits不要.
FM exits在关联的Function Group中的命名规则为: EXIT_program name_nnn
Customer exits的调用方式为:
     a. FM Exits: CALL CUSTOMER-FUNCTION 'xxx' EXPORTING ... IMPORTING ...
     b. Subscreen: Call CUSTOMER-SUBSCREEN INCLUDING

 

How to find user exits?
Using t-code: SE93 and specify the transaction code. from here goto the main program and click on the FIND button. Specify USEREXIT and select find in main program radio button and click search... if any user exit is used, it will list all the places as in SAP if any user exit is used, a comment is been written above the user exit.

 

How to find customer exits?
    1. 通过一些专门的程序,见附件
    2. Search string “call customer” in the main program source code;
    3. SE80 -> Repository Infomation System -> Enhancements -> Customer Exits -> Input search condition -> Execute
    4. SE11 -> Database table: MODSAPVIEW -> Display Contents -> Input "*program name*" into Enhancement field -> Execute -> 得到的SAP extension name 即为 Customer Exits Enhancement Name

 

How to find BADIs?
     1. 通过一些专门的程序,见附件
     2. Search string “type ref to” in the main program source code, then check if there is BAdi used in the program;
     3. Set break-point in the method CL_EXITHANDLER=>GET_INSTANCE.
     4.  SE80 -> Repository Infomation System -> Enhancements -> Business Add-ins

 

Customer Exits and BADI implementation.
      1. Customer Exits: SMOD, CMOD
       2. BADI: SE18, SE19.

Attachment is an ABAP program which can find customer exits and BADIs conveniently.

  • Z_USEREXIT.zip (8.5 KB)
  • 描述: 一个非常强的查找Customer Exit, User exit, BADI和BTE的程序
  • 下载次数: 143
分享到:
评论
8 楼 泡泡蓝 2010-12-28  
把WITH  INCLUDES.改成 WITH ANALYSIS.就可以了。不知为啥。            
7 楼 泡泡蓝 2010-12-28  
王弈争 写道
泡泡蓝 写道
SCAN ABAP-SOURCE SOURCETAB TOKENS     INTO I_STOKEN
                             STATEMENTS INTO I_SSTMNT
                             KEYWORDS   FROM KEYWORDS
                             OVERFLOW INTO C_OVERFLOW
                             WITH INCLUDES. 
这里提示错误:
直到声明 "WITH ANALYSIS" 之前,记号表的 偏移和长度字段都不会被填写。出于空间 原因,记号表应 STOKEN 做为行类型。



同问,我也是这样问题 你怎么处理的啊?



一直没解决呢 后来找到了另一个程序,不过感觉还是这个全,但是不能用,也不知道怎么改,可惜。。。。
6 楼 王弈争 2010-10-19  
泡泡蓝 写道
SCAN ABAP-SOURCE SOURCETAB TOKENS     INTO I_STOKEN
                             STATEMENTS INTO I_SSTMNT
                             KEYWORDS   FROM KEYWORDS
                             OVERFLOW INTO C_OVERFLOW
                             WITH INCLUDES. 
这里提示错误:
直到声明 "WITH ANALYSIS" 之前,记号表的 偏移和长度字段都不会被填写。出于空间 原因,记号表应 STOKEN 做为行类型。



同问,我也是这样问题 你怎么处理的啊?
5 楼 jgtang82 2010-08-04  
泡泡,我没遇到你所说的问题呀
4 楼 泡泡蓝 2010-07-29  
SCAN ABAP-SOURCE SOURCETAB TOKENS     INTO I_STOKEN
                             STATEMENTS INTO I_SSTMNT
                             KEYWORDS   FROM KEYWORDS
                             OVERFLOW INTO C_OVERFLOW
                             WITH INCLUDES. 
这里提示错误:
直到声明 "WITH ANALYSIS" 之前,记号表的 偏移和长度字段都不会被填写。出于空间 原因,记号表应 STOKEN 做为行类型。

3 楼 jgtang82 2008-07-25  
How to find all the BADIs(including sap internal use):
1. Go to the TCode SE24 and enter CL_EXITHANDLER as object type.
2. In 'Display' mode, go to 'Methods' tab.
3. Double click the method 'Get Instance' to display it source code.
4. Set a breakpoint on 'CALL METHOD cl_exithandler => get_class_name_by_interface'.
5. Then run your transaction.
6. The screen will stop at this method.
7. Check the value of parameter 'EXIT_NAME'. It will show you the BADI for that transaction.

2 楼 jgtang82 2008-04-30  
补充:
1. 如何能过customer exit name 找 enhancement?
通过表 MODSAP
2. 如果知道你要做的customer exit是否已经有Project实现过了?
CMOD -> input customer name to "Enhancement component" field like "EXIT_SAPLRSAP_002" -> execute
1 楼 sapcomment 2008-02-29  

相关推荐

Global site tag (gtag.js) - Google Analytics