查找增强出口和BADI程序

Posted ^ω^SAp傻X^o^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找增强出口和BADI程序相关的知识,希望对你有一定的参考价值。

*&---------------------------------------------------------------------*
*& 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.
  object = SMOD.  " User-exit!
else.
  object = 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.

 

以上是关于查找增强出口和BADI程序的主要内容,如果未能解决你的问题,请参考以下文章

通过Tcode查找Badi或者客户出口

SAP 增强篇 Method1 BADI增强的查找方法

BTE 增强

SAP,ABAP中BADI的定义,接口,类,实现,方法

20170520 BADI增强学习

SAP 4代增强