欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

查找BADI

发布时间:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 查找BADI 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
************************************************************************
* Program Title:查找用户出口跟BADI
*
* Created by:                                    
*
* Description:  查找用户出口跟BADI   输入相应的Tcode
* Module name: 无
* Type: REPORT
* Special note: None
**----------------------------------------------------------------------
* Associated program: No programs are associated
*-----------------------------------------------------------------------
* Restriction:  No restriction
************************************************************************

REPORT  ZUSER_EXIT 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
*&---------------------------------------------------------------------*
TABLESTSTC     " 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
*&---------------------------------------------------------------------*
DATAJTAB        LIKE TADIR OCCURS WITH HEADER LINE.
DATAFIELD1(30).
DATAV_DEVCLASS  LIKE TADIR-DEVCLASS.
DATAOBJECT      LIKE TADIR-OBJECT.
DATABDCDATA_WA  TYPE BDCDATA,
      BDCDATA_TAB TYPE TABLE OF BDCDATA.
DATAOPT         TYPE CTU_PARAMS.

*&---------------------------------------------------------------------*
*& Selection Screen Parameters
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A01 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP.
PARAMETERSP_TCODE LIKE TSTC-TCODE OBLIGATORY.
SELECTION-SCREEN SKIP.
PARAMETERSEXIT RADIOBUTTON GROUP 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!
    MOVETADIR-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.
        MOVETADIR-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(20P_TCODE,
            45(50TSTCT-TTEXT.
    SKIP.
    IF NOT JTAB[] IS INITIAL.                               " IF 2
      WRITE/(95SY-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:/(95SY-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/(95SY-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(4EQ '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.
    CLEARBDCDATA_WABDCDATA_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.
与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是生活随笔为你收集整理的查找BADI的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。