【转载】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 实现接口就可以实现用户增强。

 
 

  1、关于增强的简单介绍
    1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强.
    1.2 User exits (Function module exits)是sap提供出口,它的命名规则如下:
    EXIT_<program name><3 digit suffix>
    示例:
    sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:
    CALL CUSTOMER-FUNCTION '003'
    exporting
    xvbak   = vbak
    xvbuk   = vbuk
    xkomk   = tkomk
    importing
    lvf_subrc = lvf_subrc
    tables
    xvbfa = xvbfa
    xvbap = xvbap
    xvbup = xvbup.
    则exit calls function module的名称就是: EXIT_SAPMV45A_003

    2、先使用SMOD建立一个SAP增强
    2.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;
    2.2、点击"组件"按钮,进入组件维护屏;
    2.3、将光标移到"功能模块名",输入模块名,如:EXIT_SAPLV60B_001;
    2.4、选择"代码修改"按钮进入函数模块;
    2.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;

    3、使用CMOD建立增强项目
    3.1、输入自定义的项目名,点击"创建";
    3.2、进入增强项目,选择"配置增强",进入增强配置屏幕;
    3.3、输入增强名如:SDVFX001
    3.4、保存,并退出;

    4、使用CMOD将增强项目激活,便大工告成。

REPORT Z_SEARCH_USEREXIT.

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.

SELECTION-SCREEN BEGIN OF BLOCK A01 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP.
PARAMETERS : P_TCODE LIKE TSTC-TCODE OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK A01.


START-OF-SELECTION.
  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 = 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:/(12'T-CODE - ',13(20) P_TCODE,34(10'描述 - ' ,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:/ '共找到:' , SY-TFILL.
    ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(95'未发现此TCode的增强'.
    ENDIF.
  ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95'未知T-CODE!'.
  ENDIF.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值