根据事务码查找增强的方法

2020-12-31 16:21:39 浏览数 (1)

代码语言:javascript复制
TABLES :
  tstc,     "SAP Transaction Codes(SAP 事务代码)
  tadir,    "Directory of Repository Objects(资源库对象的目录)
  modsapt,  "SAP Enhancements - Short Texts(SAP增强-短文件)
  modact,   "Modifications(修正)
  trdir,    "System table TRDIR(系统表 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) '事务代码 - ',
          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) '事务代码不存在!'.

  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.
 
*************************************************************************
路漫漫其修远兮,吾将上下而求索。----Joi
 
版本更新V0.2(附加了根据程序名查询UserExit的功能),代码:
*************************************************************************
  SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L0S31 { font-style: italic; color: #808080; } .L0S32 { color: #3399FF; } .L0S33 { color: #4DA619; } .L0S52 { color: #0000FF; } *&---------------------------------------------------------------------*
*& Report  ZUSER_EXIT_JOI
*&---------------------------------------------------------------------*
*& V0.2 20121127
*&---------------------------------------------------------------------*

REPORT  ZUSER_EXIT_JOI.

TABLES: TSTC,
        TADIR,
        MODSAPT,
        MODACT,
        TRDIR,
        TFDIR,
        ENLFDIR,
        SXS_ATTRT ,
        TSTCT.

PARAMETERS: P_TCODE LIKE TSTC-TCODE,   "事务码
            P_PGMNA LIKE TSTC-PGMNA.   "程序名

DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
DATA : WA_TADIR TYPE TADIR.

START-OF-SELECTION.

  IF NOT P_TCODE IS INITIAL.
    SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
  ELSEIF NOT P_PGMNA IS INITIAL.
    TSTC-PGMNA = P_PGMNA.
  ENDIF.

  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 IN ('SMOD', 'SXSD')
    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:/(105) SY-ULINE.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.

* Sorting the internal Table
      SORT JTAB BY OBJECT.
      DATA : WF_TXT(60) TYPE C,
      WF_SMOD TYPE I ,
      WF_BADI TYPE I ,
      WF_OBJECT2(30) TYPE C.
      CLEAR : WF_SMOD, WF_BADI , WF_OBJECT2.

* Get the total SMOD.
      LOOP AT JTAB INTO WA_TADIR.
        AT FIRST.
          FORMAT COLOR COL_HEADING INTENSIFIED ON.
          WRITE:/1 SY-VLINE,
          2 'Enhancement/ Business Add-in',
          41 SY-VLINE ,
          42 'Description',
          105 SY-VLINE.
          WRITE:/(105) SY-ULINE.
        ENDAT.
        CLEAR WF_TXT.
        AT NEW OBJECT.
          IF WA_TADIR-OBJECT = 'SMOD'.
            WF_OBJECT2 = 'Enhancement' .
          ELSEIF WA_TADIR-OBJECT = 'SXSD'.
            WF_OBJECT2 = ' Business Add-in'.
          ENDIF.
          FORMAT COLOR COL_GROUP INTENSIFIED ON.
          WRITE:/1 SY-VLINE,
          2 WF_OBJECT2,
          105 SY-VLINE.
        ENDAT.
        CASE WA_TADIR-OBJECT.
          WHEN 'SMOD'.
            WF_SMOD = WF_SMOD   1.
            SELECT SINGLE MODTEXT INTO WF_TXT
            FROM MODSAPT
            WHERE SPRSL = SY-LANGU
            AND NAME = WA_TADIR-OBJ_NAME.
            FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
          WHEN 'SXSD'.
* For BADis
            WF_BADI = WF_BADI   1 .
            SELECT SINGLE TEXT INTO WF_TXT
            FROM SXS_ATTRT
            WHERE SPRSL = SY-LANGU
            AND EXIT_NAME = WA_TADIR-OBJ_NAME.
            FORMAT COLOR COL_NORMAL INTENSIFIED ON.
        ENDCASE.
        WRITE:/1 SY-VLINE,
        2 WA_TADIR-OBJ_NAME HOTSPOT ON,
        41 SY-VLINE ,
        42 WF_TXT,
        105 SY-VLINE.
        AT END OF OBJECT.
          WRITE : /(105) SY-ULINE.
        ENDAT.
      ENDLOOP.

      WRITE:/(105) SY-ULINE.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No.of Exits:' , WF_SMOD.
      WRITE:/ 'No.of BADis:' , WF_BADI.

    ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(105) 'No userexits or BADis exist'.
    ENDIF.

  ELSE.

    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(105) 'Transaction does not exist'.

  ENDIF.

AT LINE-SELECTION.

  DATA : WF_OBJECT TYPE TADIR-OBJECT.
  CLEAR WF_OBJECT.
  GET CURSOR FIELD FIELD1.
  CHECK FIELD1(8) EQ 'WA_TADIR'.
  READ TABLE JTAB WITH KEY OBJ_NAME = SY-LISEL 1(20).
  MOVE JTAB-OBJECT TO WF_OBJECT.

  CASE WF_OBJECT.
    WHEN 'SMOD'.
      SET PARAMETER ID 'MON' FIELD SY-LISEL 1(10).
      CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
    WHEN 'SXSD'.
      SET PARAMETER ID 'EXN' FIELD SY-LISEL 1(20).
      CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
  ENDCASE.

0 人点赞