Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
* 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.
* Get the CMOD project name
CLEAR w_mod.
SELECT SINGLE modact~member modact~name modattr~status
modattr~anam modattr~adat
INTO w_mod
FROM modact
INNER JOIN modattr
ON modattr~name = modact~name
WHERE modact~member = wa_modsapa-name
AND modact~typ = space.
IF sy-subrc = 0.
i_userexit-modattr = w_mod.
ENDIF.
ENDIF.
* 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 intoi_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.
* get enhancements via program package
CLEAR wa_tadir.
SELECT SINGLE devclass INTO wa_tadir-devclass FROM tadir
WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND obj_name = p_pname.
IF sy-subrc = 0.
CLEAR: wa_modsapa, wa_modsapt.
SELECT name FROM modsapa INTO wa_modsapa-name
WHERE devclass = wa_tadir-devclass.
SELECT SINGLE modtext FROM modsapt INTO wa_modsapt-modtext
WHERE name = wa_modsapa-name
AND sprsl = sy-langu.
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.
* set row colour.
LOOP AT i_userexit.
CASE i_userexit-type.
WHEN 'BADI'.
i_userexit-colour = 'C601'.
WHEN 'Enhancement'.
i_userexit-colour = 'C501'.
WHEN 'Program Exit'.
i_userexit-colour = 'C401'.
WHEN 'WorkFlow'.
i_userexit-colour = 'C301'.
WHEN 'BusTrEvent'.
i_userexit-colour = 'C201'.
ENDCASE.
MODIFY i_userexit.
ENDLOOP.
ENDFORM. "GET_ADDITIONAL_DATA
*&--------------------------------------------------------------------&*
*& Form DATA_DISPLAY
*&--------------------------------------------------------------------&*
*&
*&--------------------------------------------------------------------&*
FORM data_display.
* data selection message to sap gui
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
DESTINATION 'SAPGUI'
KEEPING LOGICAL UNIT OF WORK
EXPORTING
text = 'Prepare screen for display' "#EC NOTEXT
EXCEPTIONS
system_failure
communication_failure
. "#EC *
SORT i_userexit BY type txt modname.
DELETE ADJACENT DUPLICATES FROM i_userexit COMPARING txt pname
modname.
* ensure records selected.
DESCRIBE TABLE i_userexit LINES w_linnum.
IF w_linnum = 0.
MESSAGE s003(g00). "No data records were selected
EXIT.
ENDIF.
IF p_alv = ' '.
* 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.
* user-exits from development class of function modules
IF p_devc = c_x.
WRITE: /.
WRITE: / c_devc.
WRITE: 201''.
ULINE (90).
WRITE: 201''.
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.
* display fuction modules used in program
WRITE /.
DESCRIBE TABLE i_fmodule LINES w_linnum.
WRITE: / c_fmod , AT 35 w_linnum. "#EC NOTEXT
WRITE: 201''.
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.
* display submit programs used in program
WRITE /.
DESCRIBE TABLE i_submit LINES w_linnum.
WRITE: / c_subm , AT 35 w_linnum. "#EC NOTEXT
WRITE: 201''.
IF p_subm = c_x.
ULINE (44).
WRITE: 201''.
LOOP AT i_submit.
WRITE: sy-vline,
i_submit-pname,
sy-vline.
WRITE: 201''.
ENDLOOP.
WRITE: 201''.
ULINE (44).
ENDIF.
* issue message with number of user-exits displayed
DESCRIBE TABLE i_userexit LINES w_linnum.
MESSAGE s697(56) WITH w_linnum.
ELSE. " Show in alv format
* issue message with number of user-exits displayed
DESCRIBE TABLE i_userexit LINES w_linnum.
MESSAGE s697(56) WITH w_linnum.
* Create field catalog
PERFORM create_field_catalog USING
'TYPE' 'T_USEREXIT' ' ' 'Type'.
PERFORM create_field_catalog USING
'PNAME' 'T_USEREXIT' ' ' 'Program name'.
PERFORM create_field_catalog USING
'TXT' 'T_USEREXIT' ' ' 'Enhancement'.
PERFORM create_field_catalog USING
'LEVEL' 'T_USEREXIT' c_x 'Level'.
PERFORM create_field_catalog USING
'MODNAME' 'T_USEREXIT' ' ' 'Enhancement name'.
PERFORM create_field_catalog USING
'MODTEXT' 'T_USEREXIT' ' ' 'Enhancement text'.
PERFORM create_field_catalog USING
'MODATTR-MEMBER' 'T_USEREXIT' c_x 'Member'.
PERFORM create_field_catalog USING
'MODATTR-NAME' 'T_USEREXIT' ' ' 'Project'.
PERFORM create_field_catalog USING
'MODATTR-STATUS' 'T_USEREXIT' ' ' 'Status'.
PERFORM create_field_catalog USING
'MODATTR-ANAM' 'T_USEREXIT' ' ' 'Changed by'.
PERFORM create_field_catalog USING
'MODATTR-ADAT' 'T_USEREXIT' ' ' 'Change date'.
* 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.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
is_layout = i_layout
it_fieldcat = i_fieldcat[]
it_sort = i_sort[]
i_default = c_x
i_save = 'A'
i_grid_title = w_gridtxt
TABLES
t_outtab = i_userexit.
ENDIF.
* issue message with number of user-exits displayed
DESCRIBE TABLE i_userexit LINES w_linnum.
MESSAGE s697(56) WITH w_linnum.
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.
ENDFORM. " CREATE_FIELD_CATALOG
*&--------------------------------------------------------------------&*
*& 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.
GET CURSOR FIELD w_fsel.
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.
* grey-out checkboxes if ALV selected
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_alv = c_x.
IF screen-group1 = 'A01'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ELSE.
IF screen-group1 = 'A01'.
screen-input = '1'.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form clean_string
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PO_STRING text
*----------------------------------------------------------------------*
FORM clean_string CHANGING po_string.
DATA: vl_string TYPE string.
vl_string = po_string.
WHILE sy-subrc = 0.
REPLACE '''' WITH '' INTO vl_string.
ENDWHILE.
CONDENSE vl_string NO-GAPS.
po_string = vl_string.
ENDFORM. "clean_string