Lyriance-labs

Welcome on Lyriance-labs. A site powered by the Lyriance team.

Feel free to create your account and share your knowledge...

Home SAP Tech ABAP ABAP - Program examples Utils and Tools Searching texts in programs with events on ALV (REUSE_ALV_EVENTS_GET)

Searching texts in programs with events on ALV (REUSE_ALV_EVENTS_GET)

E-mail Print PDF

This program can be used to search strings in all selected programs. The result is displayed in a Grid List. The selection of ALV's item (with double click)  execute the transaction "SE38" with selected program in parameter.

*&---------------------------------------------------------------------------------*
*& Report ZUTILS_SEARCHTEXT_IN_PROGRAMS
*&
*&---------------------------------------------------------------------------------*
*& Author : Lyriance
*& Date : 12/06/2008
*& Modified : 10/10/2008
*& Purpose : Search a text in a list of programs with events on Grid List.
*&---------------------------------------------------------------------------------*

REPORT ZUTILS_SEARCHTEXT_IN_PROGRAMS NO STANDARD PAGE HEADING LINE-SIZE 255.

*-----------------------------------------------------------------------------------*
* Declaration
*-----------------------------------------------------------------------------------*
" Type Pools
TYPE-POOLS: slis.

* SAP Tables
TABLES : trdir.

* Internal Tables
TYPES :
" Store the program's name
BEGIN OF t_prog,
name(40),
END OF t_prog,

" Store the program lines
BEGIN OF t_text,
line(255),
END OF t_text,

" Store the results
BEGIN OF t_results,
name(40),
line TYPE sytabix,
text(255),
END OF t_results.

DATA : gt_prog TYPE STANDARD TABLE OF t_prog WITH HEADER LINE,
gt_text TYPE STANDARD TABLE OF t_text WITH HEADER LINE,
gt_results TYPE STANDARD TABLE OF t_results WITH HEADER LINE.

" ALV data declarations
DATA : gd_fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid.

DATA : gt_events TYPE slis_t_event,
gs_events TYPE slis_alv_event.

CONSTANTS :
k_form_user_command TYPE slis_formname VALUE 'USER_COMMAND'.

*-----------------------------------------------------------------------------------*
* Selection screen
*-----------------------------------------------------------------------------------*
* Parameters

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-b01.
PARAMETERS : p_text(50) OBLIGATORY.
SELECT-OPTIONS : s_prog FOR trdir-name OBLIGATORY.
SELECTION-SCREEN END OF BLOCK block1.

*-----------------------------------------------------------------------------------*
* START-OF-SELECTION
*-----------------------------------------------------------------------------------*
START-OF-SELECTION.

* Filling t_prog with selected programs
SELECT * FROM trdir WHERE name IN s_prog.
gt_prog-name = trdir-name.
APPEND gt_prog.
ENDSELECT.
* Searching code of programs
LOOP AT gt_prog .
REFRESH : gt_text.
" Read lines of a program
READ REPORT gt_prog INTO gt_text.
" Loop on lines
LOOP AT gt_text.
TRANSLATE gt_text TO UPPER CASE.
" Searching the pattern in the program line
SEARCH gt_text-line FOR p_text.
IF sy-subrc = 0.
gt_results-name = gt_prog.
gt_results-line = sy-tabix.
gt_results-text = gt_text-line.
APPEND gt_results.
ENDIF.
CLEAR gt_text.
ENDLOOP.
CLEAR gt_prog.
ENDLOOP.

*-----------------------------------------------------------------------------------*
* END-OF-SELECTION
*-----------------------------------------------------------------------------------*
END-OF-SELECTION.

gd_repid = sy-repid.
" Init fieldcatalog
PERFORM build_fieldcatalog.
" Init layout
PERFORM build_layout.
" Build the events tab
PERFORM make_alv_event.
" Display the list
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
is_layout = gd_layout
it_fieldcat = gd_fieldcatalog[]
i_save = 'X'
it_events = gt_events
TABLES
t_outtab = gt_results
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.

ENDIF.

*-----------------------------------------------------------------------------------*
*-----------------------------------------------------------------------------------*
* Routines
*-----------------------------------------------------------------------------------*
*-----------------------------------------------------------------------------------*
*-----------------------------------------------------------------------------------*
* Form BUILD_FIELDCATALOG
*-----------------------------------------------------------------------------------*
FORM build_fieldcatalog.
gd_fieldcatalog-fieldname = 'NAME'.
gd_fieldcatalog-seltext_m = 'Program name'.
gd_fieldcatalog-col_pos = 0.
gd_fieldcatalog-outputlen = 10.
gd_fieldcatalog-emphasize = 'X'.
gd_fieldcatalog-key = 'X'.
APPEND gd_fieldcatalog TO gd_fieldcatalog.
CLEAR gd_fieldcatalog.

gd_fieldcatalog-fieldname = 'LINE'.
gd_fieldcatalog-seltext_m = 'Line'.
gd_fieldcatalog-col_pos = 1.
APPEND gd_fieldcatalog TO gd_fieldcatalog.
CLEAR gd_fieldcatalog.

gd_fieldcatalog-fieldname = 'TEXT'.
gd_fieldcatalog-seltext_m = 'Text'.
gd_fieldcatalog-col_pos = 2.
APPEND gd_fieldcatalog TO gd_fieldcatalog.
CLEAR gd_fieldcatalog.

ENDFORM. "build_fieldcatalog

*&-----------------------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&-----------------------------------------------------------------------------------*
* Build layout for ALV grid report
*------------------------------------------------------------------------------------*
FORM build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
ENDFORM. " BUILD_LAYOUT .

*&-----------------------------------------------------------------------------------*
*& Form make_alv_event
*&-----------------------------------------------------------------------------------*
* Events of ALV GRID
*-------------------------------------------------------------------------------------*
FORM make_alv_event.
CLEAR: gs_events, gt_events.
REFRESH: gt_events.

* Standard events
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_events.

* Event user-command
READ TABLE gt_events WITH KEY name = slis_ev_user_command INTO gs_events.
MOVE k_form_user_command TO gs_events-form.
MODIFY gt_events FROM gs_events INDEX sy-tabix.
ENDFORM. " make_alv_event

*&-----------------------------------------------------------------------------------*
*& Form user_command
*&-----------------------------------------------------------------------------------*
* user command
*-------------------------------------------------------------------------------------*
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
IF p_selfield-value NE space.
CASE p_selfield-tabname.
WHEN '1'.
READ TABLE gt_results INDEX p_selfield-tabindex.
WHEN OTHERS.
EXIT.
ENDCASE.
ELSE.
EXIT.
ENDIF.
CASE p_selfield-fieldname. "Field name where it was double clicked
WHEN 'NAME'.

SET PARAMETER ID 'RID' FIELD p_selfield-value.
CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN.
WHEN OTHERS.
EXIT.
ENDCASE.
ENDFORM. "user_command
Last Updated ( Tuesday, 25 November 2008 10:35 )