SAP 中如何寻找增强

方法一、利用TCODE寻找增强(第二代的增强)

    执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个的绝大部分SMOD增强。

    点击进去,自己手动寻找需要的增强。

    这是第二代增强

    方法二、利用系统函数寻找 
    MODX_FUNCTION_ACTIVE_CHECK

    在这个FUNCTION的代码最后添加一个断点。执行需要增强的TCODE,如果有增强,就会自动跳入DEBUG界面。在DEBUG界面,查看f_tab 字段,这里面所显示的Smod就是关于这个TCODE所有的增强项目的列表。这些增强都是属于EXIT_XXXXXX_XXX这种形式。

    至于如何查看这个增强是属于哪个SMOD,可以自己查阅 MODSAP这个表(SAP Enhancements).

    这是第二代增强。

    还有一些FUNCTION供参考:

    [1].DYNP_VALUES_READ

    [2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)

    [3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)

    [4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)

    [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)

    这些的使用方法和上述的一样,可以针对各种情况寻找增强。

    方法三、从程序代码中找

    在需要增强的事务里面,打开SYSTEM——》status,双击进入PROGRAM,查看所有的subroutines, 重点观察所有形似 userexit_******* 这种,由描述来确定合适的需要增强的FORM。这里是第一代的增强。

    方法四、针对BADI的增强

    转摘自网上

    1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。

    2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance 就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

    3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

    4、se18 查找接口,se19 实现接口就可以实现用户增强。

  附: 增强查找ABAP代码

REPORT ZTEST_USER_EXIT  .

TABLES : TSTC,     "SAP Transaction Codes 
         TADIR,    "Directory of Repository Objects 
         MODSAPT,  "SAP Enhancements - Short Texts 
         MODACT,   "Modifications 
         TRDIR,    "System table TRDIR 
         TFDIR,    "Function Module 
         ENLFDIR,  "Additional Attributes for Function Modules 
         TSTCT.    "Transaction Code Texts

DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE. 
DATA : FIELD1(30). 
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS. 
PARAMETERS : P_TCODE LIKE TSTC-TCODE OBLIGATORY.

SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE. 
IF SY-SUBRC EQ 0. 
  SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR' 
  AND OBJECT = 'PROG' 
  AND OBJ_NAME = TSTC-PGMNA. 
  MOVE : TADIR-DEVCLASS TO V_DEVCLASS. 
  IF SY-SUBRC NE 0. 
    SELECT SINGLE * FROM TRDIR WHERE NAME = TSTC-PGMNA. 
    IF TRDIR-SUBC EQ 'F'. 
      SELECT SINGLE * FROM TFDIR WHERE PNAME = TSTC-PGMNA. 
      SELECT SINGLE * FROM ENLFDIR WHERE FUNCNAME = 
      TFDIR-FUNCNAME. 
      SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR' 
      AND OBJECT = 'FUGR' 
      AND OBJ_NAME EQ ENLFDIR-AREA.

      MOVE : TADIR-DEVCLASS TO V_DEVCLASS. 
    ENDIF. 
  ENDIF. 
  SELECT * FROM TADIR INTO TABLE JTAB 
  WHERE PGMID = 'R3TR' 
  AND OBJECT = 'SMOD' 
  AND DEVCLASS = V_DEVCLASS. 
  SELECT SINGLE * FROM TSTCT WHERE SPRSL EQ SY-LANGU AND 
  TCODE EQ P_TCODE. 
  FORMAT COLOR COL_POSITIVE INTENSIFIED OFF. 
  WRITE:/(19) 'Transaction Code - ', 
  20(20) P_TCODE, 
  45(50) TSTCT-TTEXT. 
  SKIP. 
  IF NOT JTAB[] IS INITIAL. 
    WRITE:/(95) SY-ULINE. 
    FORMAT COLOR COL_HEADING INTENSIFIED ON. 
    WRITE:/1 SY-VLINE, 
    2 'Exit Name', 
    21 SY-VLINE , 
    22 'Description', 
    95 SY-VLINE. 
    WRITE:/(95) SY-ULINE. 
    LOOP AT JTAB. 
      SELECT SINGLE * FROM MODSAPT 
      WHERE SPRSL = SY-LANGU AND 
      NAME = JTAB-OBJ_NAME. 
      FORMAT COLOR COL_NORMAL INTENSIFIED OFF. 
      WRITE:/1 SY-VLINE, 
      2 JTAB-OBJ_NAME HOTSPOT ON, 
      21 SY-VLINE , 
      22 MODSAPT-MODTEXT, 
      95 SY-VLINE. 
    ENDLOOP. 
    WRITE:/(95) SY-ULINE. 
    DESCRIBE TABLE JTAB. 
    SKIP. 
    FORMAT COLOR COL_TOTAL INTENSIFIED ON. 
    WRITE:/ 'No of Exits:' , SY-TFILL. 
  ELSE. 
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON. 
    WRITE:/(95) 'No User Exit exists'. 
  ENDIF. 
ELSE. 
  FORMAT COLOR COL_NEGATIVE INTENSIFIED ON. 
  WRITE:/(95) 'Transaction Code Does Not Exist'. 
ENDIF.

AT LINE-SELECTION. 
  GET CURSOR FIELD FIELD1. 
  CHECK FIELD1(4) EQ 'JTAB'. 
  SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10). 
  CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

你可能感兴趣的:(SAP 中如何寻找增强)