Professional Documents
Culture Documents
Untitled
Untitled
*Got fed-up trying all the other programs which unsucessfully try
*to find user-exits etc.*
*
*Here is a attempt...
*
*Note: it does things that the other programs don't. It includes:
* BADIs, BTEs, program-exits like in MV45AFZZ. It also searches
*the first-level function modules and submits.
*&--------------------------------------------------------------------&*
*& Report: Z_USEREXIT (V10) &*
*&--------------------------------------------------------------------&*
*& Selection Texts:
*& P_ALV ALV format
*& P_AUTH Include authority-check search
*& P_BADI Display BADIs
*& P_CUSB Customer BADIs only
*& P_BTE Display business trans events
*& P_DEVC Show development class exits
*& P_EXIT Display user exits
*& P_FUNC Show function modules
*& P_LIMIT Limit no. of submits to search
*& P_LST Standard list format
*& P_PNAME Program name
*& P_PROG Display program exits
*& P_SUBM Show submits
*& P_TCODE Transaction code
*& P_TEXT Search for text
*& P_WFLOW Display workflow links
*&--------------------------------------------------------------------&*
*& Text symbols:
*& M01 Enter TCode or program
*& M02 Enter at least one scope criteria
*& S01 Selection data (TCode takes precedence over program name)
*& S02 Scope criteria
*& S03 Display criteria
*&--------------------------------------------------------------------&*
report z_userexit
no standard page heading
line-size 201.
tables: sxs_attr,
tobjt,
tstct, "TCode texts
trdirt, "Program texts
sxc_exit. "BADI exits
* user-exits
types: begin of ty_mod,
member like modact-member,
name like modact-name,
status like modattr-status,
anam like modattr-anam,
adat like modattr-adat,
end of ty_mod.
data: w_mod type ty_mod.
* Submit programs
types: begin of t_submit,
pname like trdir-name,
level,
done,
end of t_submit.
data: i_submit type standard table of t_submit with header line.
* Source code
types: begin of t_sourcetab, "#EC * (SLIN lgt!)
line(200), "#EC * (SLIN lgt!)
end of t_sourcetab. "#EC * (SLIN lgt!)
data: sourcetab type standard table of t_sourcetab with header line.
data c_overflow(30000) type c.
* ALV definitions
data i_fieldcat type slis_t_fieldcat_alv with header line.
data i_layout type slis_layout_alv.
data i_sort type slis_t_sortinfo_alv with header line.
*&--------------------------------------------------------------------&*
*& Selection Options &*
*&--------------------------------------------------------------------&*
selection-screen begin of block selscr1 with frame title text-s01.
parameter: p_pname like trdir-name,
p_tcode like syst-tcode,
p_limit(4) type n default 500.
selection-screen skip.
selection-screen end of block selscr1.
*&--------------------------------------------------------------------&*
*& START-OF-SELECTION &*
*&--------------------------------------------------------------------&*
start-of-selection.
perform data_select.
perform get_submit_data.
perform get_fm_data.
perform get_additional_data.
perform data_display.
*&--------------------------------------------------------------------&*
*& Form DATA_SELECT &*
*&--------------------------------------------------------------------&*
*& &*
*&--------------------------------------------------------------------&*
form data_select.
endif.
endif.
endform. "DATA_SELECT
*&--------------------------------------------------------------------&*
*& Form GET_FM_DATA ? &*
*&--------------------------------------------------------------------&*
*& &*
*&--------------------------------------------------------------------&*
form get_fm_data.
clear wa_tfdir.
select single funcname pname include from tfdir into wa_tfdir
where funcname = i_fmodule-name.
check sy-subrc = 0.
endloop.
sort i_devclass.
delete adjacent duplicates from i_devclass.
endif.
endform. "GET_FM_DATA
*&--------------------------------------------------------------------&*
*& Form GET_SUBMIT_DATA &*
*&--------------------------------------------------------------------&*
*& &*
*&--------------------------------------------------------------------&*
form get_submit_data.
sort i_submit.
delete adjacent duplicates from i_submit comparing pname.
w_level = '0'.
endform. "GET_SUBMIT_DATA
*&--------------------------------------------------------------------&*
*& Form DATA_SEARCH &*
*&--------------------------------------------------------------------&*
*& &*
*&--------------------------------------------------------------------&*
form data_search tables p_stoken structure stoken
using p_level l_prog l_incl.
loop at p_stoken.
clear i_userexit.
* Workflow
if p_wflow = c_x.
if p_level eq '1'. " do not perform for function modules (2nd pass)
if p_stoken-str+1(16) cs 'SWE_EVENT_CREATE'.
replace all occurrences of '''' in p_stoken-str with ''.
i_userexit-type = 'WorkFlow'.
i_userexit-txt = p_stoken-str.
concatenate l_prog '/' l_incl into i_userexit-pname.
append i_userexit.
endif.
endif.
endif.
tabix = sy-tabix + 1.
i_userexit-level = p_level.
if i_userexit-level = '0'.
if l_incl is initial.
i_userexit-pname = p_pname.
else.
concatenate p_pname '-' l_incl into i_userexit-pname.
endif.
else.
if l_incl is initial.
i_userexit-pname = l_prog.
else.
concatenate l_prog '-' l_incl into i_userexit-pname.
endif.
endif.
* AUTHORITY-CHECKS
if p_auth = c_x.
if p_stoken-str eq 'AUTHORITY-CHECK'.
check p_level eq '0'. " do not perform for function modules (2nd pass)
w_index = sy-tabix + 2.
read table p_stoken index w_index into wa_stoken.
check not wa_stoken-str cs 'STRUCTURE'.
check not wa_stoken-str cs 'SYMBOL'.
read table i_submit with key pname = wa_stoken-str.
if sy-subrc <> 0.
i_userexit-pname = i_submit-pname.
i_userexit-type = 'AuthCheck'.
i_userexit-txt = wa_stoken-str.
replace all occurrences of '''' in i_userexit-txt with space.
clear tobjt.
select single * from tobjt where object = i_userexit-txt
and langu = sy-langu.
i_userexit-modname = 'AUTHORITY-CHECK'.
i_userexit-modtext = tobjt-ttext.
append i_userexit.
endif.
endif.
endif.
* Text searches
if not p_text is initial.
if p_stoken-str cs p_text.
i_userexit-pname = i_submit-pname.
i_userexit-type = 'TextSearch'.
i_userexit-txt = wa_stoken-str.
i_userexit-modname = 'Text Search'.
i_userexit-modtext = p_stoken-str.
append i_userexit.
endif.
endif.
* Include (SE38)
if p_stoken-str eq 'INCLUDE'.
check p_level eq '0'. " do not perform for function modules (2nd pass)
w_index = sy-tabix + 1.
read table p_stoken index w_index into wa_stoken.
check not wa_stoken-str cs 'STRUCTURE'.
check not wa_stoken-str cs 'SYMBOL'.
read table i_submit with key pname = wa_stoken-str.
if sy-subrc <> 0.
i_submit-pname = wa_stoken-str.
i_submit-level = p_level.
append i_submit.
endif.
endif.
* Enhancements (SMOD)
if p_exit = c_x.
if p_stoken-str eq 'CUSTOMER-FUNCTION'.
clear w_funcname.
read table p_stoken index tabix.
translate p_stoken-str using ''' '.
condense p_stoken-str.
if l_prog is initial.
concatenate 'EXIT' p_pname p_stoken-str into w_funcname
separated by '_'.
else.
concatenate 'EXIT' l_prog p_stoken-str into w_funcname
separated by '_'.
endif.
select single member from modsap into wa_modsap-member
where member = w_funcname.
if sy-subrc = 0. " check for valid enhancement
i_userexit-type = 'Enhancement'.
i_userexit-txt = w_funcname.
append i_userexit.
else.
clear wa_d010inc.
select single master into wa_d010inc-master
from d010inc
where include = l_prog.
concatenate 'EXIT' wa_d010inc-master p_stoken-str into w_funcname
separated by '_'.
i_userexit-type = 'Enhancement'.
i_userexit-txt = w_funcname.
endif.
endif.
endif.
* BADIs (SE18)
if p_badi = c_x.
if p_stoken-str cs 'cl_exithandler='.
w_index = sy-tabix + 4.
read table p_stoken index w_index into wa_stoken.
i_userexit-txt = wa_stoken-str.
replace all occurrences of '''' in i_userexit-txt with space.
i_userexit-type = 'BADI'.
clear sxs_attr. " ensure a real BADI
if p_cusb = c_x. "customer BADIs only
select single * from sxs_attr where exit_name = i_userexit-txt
and INTERNAL <> c_x.
else.
select single * from sxs_attr where exit_name = i_userexit-txt.
endif.
if sy-subrc = 0.
append i_userexit.
endif.
endif.
endif.
append i_userexit.
endif.
endif.
clear i_fmodule.
if p_level eq '0'. " do not perform for function modules (2nd pass)
w_index = sy-tabix + 1.
read table p_stoken index w_index into wa_stoken.
if wa_stoken-str cs 'BAPI'.
i_fmodule-bapi = c_x.
endif.
endloop.
endform. "DATA_SEARCH
*&--------------------------------------------------------------------&*
*& Form GET_ADDITIONAL_DATA &*
*&--------------------------------------------------------------------&*
*& &*
*&--------------------------------------------------------------------&*
form get_additional_data.
loop at i_userexit.
* Workflow
if i_userexit-type eq 'WorkFlow'.
continue.
endif.
* Enhancement data
if i_userexit-type cs 'Enh'.
clear: wa_modsapa.
select single name into wa_modsapa-name from modsap
where member = i_userexit-txt.
check sy-subrc = 0.
i_userexit-modname = wa_modsapa-name.
clear wa_modsapt.
select single modtext into wa_modsapt-modtext from modsapt
where name = wa_modsapa-name
and sprsl = sy-langu.
i_userexit-modtext = wa_modsapt-modtext.
* BADI data
if i_userexit-type eq 'BADI'.
clear wa_sxs_attr.
select single exit_name into wa_sxs_attr-exit_name from sxs_attr
where exit_name = i_userexit-txt.
if sy-subrc = 0.
i_userexit-modname = i_userexit-txt.
else.
i_userexit-modname = 'Dynamic call'. "#EC NOTEXT
endif.
clear wa_sxs_attrt.
select single text into wa_sxs_attrt-text from sxs_attrt
where exit_name = wa_sxs_attr-exit_name
and sprsl = sy-langu.
i_userexit-modtext = wa_sxs_attrt-text.
endif.
* BADI Implementation
if i_userexit-type eq 'BADI'.
clear sxc_exit.
select count( * ) from sxc_exit where exit_name = i_userexit-txt.
w_cnt = sy-dbcnt.
* determine id BADI is for interal or external use
clear sxs_attr.
select single * from sxs_attr where exit_name = i_userexit-txt.
if sxs_attr-internal = 'X'.
wa_sxs_attrt-text = 'SAP '.
else.
wa_sxs_attrt-text = 'CUST'.
endif.
* concatenate wa_sxs_attrt-text w_cnt into i_userexit-modattr-name
* separated by space.
write wa_sxs_attrt-text to i_userexit-modattr-name.
write w_cnt to i_userexit-modattr-name+5.
endif.
modify i_userexit.
endloop.
clear i_userexit.
read table i_userexit with key modname = wa_modsapa-name.
if sy-subrc <> 0.
i_userexit-modtext = wa_modsapt-modtext.
i_userexit-type = 'Enhancement'. "#EC NOTEXT
i_userexit-modname = wa_modsapa-name.
i_userexit-txt = 'Determined from program DevClass'. "#EC NOTEXT
i_userexit-pname = 'Unknown'. "#EC NOTEXT
append i_userexit.
endif.
endselect.
endif.
endform. "GET_ADDITIONAL_DATA
*&--------------------------------------------------------------------&*
*& Form DATA_DISPLAY &*
*&--------------------------------------------------------------------&*
*& &*
*&--------------------------------------------------------------------&*
form data_display.
* format headings
write: 'Enhancements from main program: ', p_pname.
write: 'Enhancements from TCode: ', p_tcode.
write: 201''.
uline.
format color col_heading.
write: / sy-vline,
(12) c_col1, "Enhanmt Type
sy-vline,
(40) c_col2, "Enhancement
sy-vline,
(30) c_col3, "Program/Include
sy-vline,
(20) c_col4, "Enhancement name
sy-vline,
(40) c_col5, "Enhancement description
sy-vline,
(8) c_col6, "Project
sy-vline,
(1) c_col7, "S
sy-vline,
(12) c_col8, "ChangeName
sy-vline,
(10) c_col9, "ChangeDate
sy-vline.
format reset.
uline.
* format lines
loop at i_userexit.
* set line colour
case i_userexit-type.
when 'Enhancement'.
format color 3 intensified off.
when 'BADI'.
format color 4 intensified off.
when 'BusTrEvent'.
format color 5 intensified off.
when 'Program Exit'.
format color 6 intensified off.
when others.
format reset.
endcase.
write: / sy-vline,
i_userexit-type,
sy-vline,
i_userexit-txt(40),
sy-vline,
i_userexit-pname(30),
sy-vline,
i_userexit-modname(20),
sy-vline,
i_userexit-modtext(40),
sy-vline.
write: i_userexit-modattr-name,
sy-vline,
i_userexit-modattr-status,
sy-vline,
i_userexit-modattr-anam,
sy-vline,
i_userexit-modattr-adat no-zero,
sy-vline.
hide: i_userexit-modname, i_userexit-type, i_userexit-modattr-name.
endloop.
format reset.
uline.
loop at i_devclass.
clear wa_modsapa.
select name from modsapa into wa_modsapa
where devclass = i_devclass-clas.
select single name modtext into corresponding fields of wa_modsapt
from modsapt
where name = wa_modsapa-name
and sprsl = sy-langu.
format color 3 intensified off.
write: / sy-vline,
(12) 'Enhancement',
sy-vline,
wa_modsapa-name,
sy-vline,
wa_modsapt-modtext,
sy-vline.
endselect.
endloop.
write: 201''.
uline (90).
format reset.
endif.
if p_func = c_x.
uline (38).
write: 201''.
loop at i_fmodule.
write: sy-vline,
i_fmodule-name,
sy-vline,
i_fmodule-bapi,
sy-vline.
write: 201''.
endloop.
write: 201''.
uline (38).
endif.
* Layout
clear i_layout.
i_layout-colwidth_optimize = c_x.
i_layout-info_fieldname = 'COLOUR'.
* Sort
clear i_sort.
i_sort-fieldname = 'TYPE'.
i_sort-tabname = 'T_USEREXIT'.
i_sort-up = c_x.
append i_sort.
endif.
endform. "DATA_DISPLAY
*&---------------------------------------------------------------------&*
*& Form CREATE_FIELD_CATALOG &*
*&---------------------------------------------------------------------&*
form create_field_catalog using p_fieldname
p_tabname
p_hide
p_text.
i_fieldcat-fieldname = p_fieldname.
i_fieldcat-tabname = p_tabname.
i_fieldcat-no_out = p_hide.
i_fieldcat-seltext_l = p_text.
append i_fieldcat.
*&---------------------------------------------------------------------&*
*& Form CREATE_FIELD_CATALOG &*
*&---------------------------------------------------------------------&*
form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
read table i_userexit index rs_selfield-tabindex.
check sy-subrc = 0.
case r_ucomm.
when '&IC1'.
case rs_selfield-sel_tab_field.
when 'T_USEREXIT-MODNAME'.
read table i_userexit index rs_selfield-tabindex.
case i_userexit-type.
when 'Enhancement'.
set parameter id 'MON' field i_userexit-modname.
call transaction 'SMOD'.
when 'BADI'.
set parameter id 'EXN' field i_userexit-modname.
call transaction 'SE18' and skip first screen.
when 'BusTrEvent'.
submit rfopfi00 with event = i_userexit-modname(8) and return.
when others.
message s030(cj). "Navigation not possible
endcase.
when 'T_USEREXIT-MODATTR-NAME'.
if not i_userexit-modattr-name is initial.
set parameter id 'MON_KUN' field i_userexit-modattr-name.
call transaction 'CMOD'.
else.
message s030(cj)."Navigation not possible
endif.
when others.
message s030(cj)."Navigation not possible
endcase.
endcase.
endform. "user_command
*&--------------------------------------------------------------------&*
*& AT LINE-SELECTION ?*
*&--------------------------------------------------------------------&*
at line-selection.
case w_fsel.
when 'I_USEREXIT-MODNAME'.
case i_userexit-type.
when 'Enhancement'.
set parameter id 'MON' field i_userexit-modname.
call transaction 'SMOD'.
when 'BADI'.
set parameter id 'EXN' field i_userexit-modname.
call transaction 'SE18' and skip first screen.
when 'BusTrEvent'.
submit rfopfi00 with event = i_userexit-modname(8) and return.
when others.
message s030(cj)."Navigation not possible
endcase.
when 'I_USEREXIT-MODATTR-NAME'.
if not i_userexit-modattr-name is initial.
set parameter id 'MON_KUN' field i_userexit-modattr-name.
call transaction 'CMOD'.
else.
message s030(cj)."Navigation not possible
endif.
when others.
message s030(cj)."Navigation not possible
endcase.
*&--------------------------------------------------------------------&*
*& AT SELECTION-SCREEN &*
*&--------------------------------------------------------------------&*
at selection-screen on radiobutton group rad1.