Monday 6 May 2019

Quick/Easier way to find User Exits and BAPI’s for any T-Code

Introduction:


This blog helps any Functional / Technical consultants for getting the list of User Exits and related BAPI to a given t-code by easier/quicker way.

Obtainable:


Can be achieved through se93 / direct t-code help –> status –> program name and package.. further CMOD – lookup providing package and getting the list.  or it can be obtained through SPRO drill down.

Study on object links:


Key for object-wise list and segregation is handled through  TADIR table, where all object ID / Type and object name, further detailed description of Object type available in E71 table.

By filtering only object ID R3TR – followed by object type will help to get complete list of exits and badi available in particular program/t-code / package based on our selection

Selection Screen :


SAP ABAP Certifications, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Study Materials

After Execution in result screen based on object selection from the output, given program will trigger to se18 or CMOD directly to identify the feasibility.

SAP ABAP Certifications, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Study Materials

Program:


REPORT zexits.

TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir, sxs_attrt, tstct.

DATA : it_tadir LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.
PARAMETERS : p_tcode LIKE tstc-tcode,
             p_pgmna LIKE tstc-pgmna.

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 it_tadir 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 it_tadir[] IS INITIAL.
      WRITE:/(105) sy-uline.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
      SORT it_tadir 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.


      LOOP AT it_tadir 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'.
            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 it_tadir WITH KEY obj_name = sy-lisel+1(20).
  MOVE it_tadir-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.

No comments:

Post a Comment