出口和BADI查詢

dicksonjyl560101發表於2015-04-24

*&---------------------------------------------------------------------*
*& Report  Z_FIND_EXIT_AND_BADI
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report z_find_exit_and_badi no standard page heading.
*&---------------------------------------------------------------------*
*&  Enter the transaction code that you want to search through in order
*&  to find which Standard SAP User Exits and BADIs
*&
*&---------------------------------------------------------------------*
*& For field 'SUBC' of table 'TRDIR':
*&   M  Module Pool
*&   F  Function group
*&   S  Subroutine Pool
*&   J  Interface pool
*&   K  Class pool
*&   T  Type Pool
*&   X  XSLT Program
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
tables: tstc     , " SAP Transaction Codes
        tadir    , " Directory of Repository Objects
        modsapt  , " SAP Enhancements - Short Texts
        sxs_attrt, " SAP BADI - short text
        modact   , " Modifications
        trdir    , " System table TRDIR
        tfdir    , " Function Module
        enlfdir  , " Additional Attributes for Function Modules
        tstct    . " Transaction Code Texts

*&---------------------------------------------------------------------*
*& Variables
*&---------------------------------------------------------------------*
data: jtab        like tadir occurs 0 with header line.
data: field1(30).
data: v_devclass  like tadir-devclass.
data: object      like tadir-object.
data: bdcdata_wa  type bdcdata,
      bdcdata_tab type table of bdcdata.
data: opt         type ctu_params.

*&---------------------------------------------------------------------*
*& Selection Screen Parameters
*&---------------------------------------------------------------------*
selection-screen begin of block a01 with frame. title text-001.
selection-screen skip.
parameters: p_tcode like tstc-tcode obligatory.
selection-screen skip.
parameters: exit radiobutton group 1 default 'X',
            badi radiobutton group 1.
selection-screen end of block a01.

define bdc_program.
  clear bdcdata_wa.
  bdcdata_wa-program  = &1.
  bdcdata_wa-dynpro   = &2.
  bdcdata_wa-dynbegin = &3.
  append bdcdata_wa to bdcdata_tab.
end-of-definition.
define bdc_detail.
  clear bdcdata_wa.
  bdcdata_wa-fnam = &1.
  bdcdata_wa-fval = &2.
  append bdcdata_wa to bdcdata_tab.
end-of-definition.

*&---------------------------------------------------------------------*
*& Start of main program
*&---------------------------------------------------------------------*
start-of-selection.
  if exit = 'X'.
    bject = 'SMOD'.  " User-exit!
  else.
    bject = 'SXSD'.  " BADI!
  endif.

* Validate Transaction Code:
  select single * from tstc where tcode eq p_tcode.
* Find Repository Objects for transaction code:
  if sy-subrc eq 0.                                         " IF 1
    select single * from tadir where pgmid    = 'R3TR'
                                 and object   = 'PROG'
                                 and obj_name = tstc-pgmna."Program
*    name!
    move: tadir-devclass to v_devclass. " Package
    if sy-subrc ne 0.
      select single * from trdir where name = tstc-pgmna.
      if trdir-subc eq 'F'.  " Function Group
        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.

*   Find SAP Modifactions:
    select * from tadir into table jtab where pgmid    = 'R3TR'
*                                          AND object   = 'SMOD'
                                          and object   = object
                                          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.                               " IF 2
      write: /(95) sy-uline.
      format color col_heading intensified on.
*     Exit:
      if exit = 'X'.
        write: /1  sy-vline,
                2  'Exit Name',
                22 sy-vline ,
                23 'Description',
                95 sy-vline.
*     BADI:
      else.
        write: /1  sy-vline,
                2  'BADI Name',
                22 sy-vline ,
                23 'Description',
                95 sy-vline.
      endif.
      write:/(95) sy-uline.
      loop at jtab.
*       EXIT:
        if exit = 'X'.
          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,
                  22 sy-vline ,
                  23 modsapt-modtext,
                  95 sy-vline.
*       BADI:
        else.
          select single * from sxs_attrt where sprsl     = sy-langu
                                           and exit_name =
jtab-obj_name.
          format color col_normal intensified off.
          write: /1  sy-vline,
                  2  jtab-obj_name hotspot on,
                  22 sy-vline ,
                  23 sxs_attrt-text,
                  95 sy-vline.
        endif.
      endloop.
      write: /(95) sy-uline.
      describe table jtab.
      skip.
      format color col_total intensified on.
      if exit = 'X'.
        write: / 'No of Exits:', sy-tfill.
      else.
        write: / 'No of BADIs:', sy-tfill.
      endif.
    else.                                                   " IF 2
      format color col_negative intensified on.
      write: /(95) 'No User Exit exists'.
    endif.                                                  " IF 2
  else.                                                     " IF 1
    format color col_negative intensified on.
    write: /(95) 'Transaction Code Does Not Exist'.
  endif.                                                    " IF 1


* Take the user to SMOD for the Exit that was selected:
at line-selection.
  get cursor field field1.
  check field1(4) eq 'JTAB'.
* For exit:
  if exit = 'X'.
    set parameter id 'MON' field sy-lisel+1(10).
    call transaction 'SMOD' and skip first screen.
* For BADI:
  else.
    clear: bdcdata_wa, bdcdata_tab[].
    bdc_program 'SAPLSEXO' '0100' 'X'.
    bdc_detail 'BDC_CURSOR' 'G_IS_BADI'.
    bdc_detail 'BDC_OKCODE' '=ISSPOT'.
    bdc_detail 'G_IS_BADI' 'X'.
    bdc_program 'SAPLSEXO' '0100' 'X'.
    bdc_detail 'BDC_CURSOR' 'G_BADINAME'.
    bdc_detail 'BDC_OKCODE' '=SHOW'.
    bdc_detail 'G_BADINAME' sy-lisel+1(20).
    opt-dismode = 'E'.
    opt-defsize = 'X'.
    call transaction 'SE18' using bdcdata_tab options from opt.
  endif.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-1595635/,如需轉載,請註明出處,否則將追究法律責任。

相關文章