*&---------------------------------------------------------------------*
*& Report ZLM_ENHANMENT_SEARCH
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZLM_ENHANMENT_SEARCH
.
*&---------------------------------------------------------------------*
*& 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
.
"BADI
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
= 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 - '
(
001
)
,
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
.