ALV Grid Report Template Using Dynpro Custom Container
ALV Grid Report Template Using Dynpro Custom Container
1 Vote
*-----------------------------------------------------------------------
* LOCAL CLASS - DEFINITION
*-----------------------------------------------------------------------
CLASS lcl_event_handler DEFINITION.
METHODS on_double_click_grid
FOR EVENT double_click OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN ES_ROW_NO. "#EC NEEDED
ENDCLASS. "lcl_event_handler DEFINITION
*-----------------------------------------------------------------------
* CONSTANTS
*-----------------------------------------------------------------------
*-----------------------------------------------------------------------
* DATA - INTERNAL TABLES & WORKING AREA
*-----------------------------------------------------------------------
* Report table, displayed by ALV
DATA i_report TYPE STANDARD TABLE OF t_report.
DATA k_report TYPE t_report.
*-----------------------------------------------------------------------
* DATA - ALV
*-----------------------------------------------------------------------
CONSTANTS c_ccname TYPE scrfname VALUE 'ALV_CCTRL'.
DATA o_alvgrid TYPE REF TO cl_gui_alv_grid.
DATA o_alvcontainer TYPE REF TO cl_gui_custom_container.
DATA v_variant TYPE disvariant.
*-----------------------------------------------------------------------
* STRUCTURE
*-----------------------------------------------------------------------
************************************************************************
* Selection Screen Design
************************************************************************
* Box Data Selection
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
[data selection options]
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
** INITIALIZATION
************************************************************************
INITIALIZATION.
PERFORM set_alv_default_variant.
************************************************************************
** AT SELECTION-SCREEN
************************************************************************
AT SELECTION-SCREEN.
AT SELECTION-SCREEN ON p_vari.
PERFORM check_alv_selected_variant.
START-OF-SELECTION.
PERFORM get_data.
PERFORM process_data.
END-OF-SELECTION.
IF i_report[] IS INITIAL.
MESSAGE 'No data selected'(m04) TYPE 'S'.
ELSE.
CALL SCREEN '0100'.
ENDIF.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* Set screen status
*----------------------------------------------------------------------*
module STATUS_0100 output.
SET PF-STATUS 'REPSCR'.
SET TITLEBAR 'REPSCR'.
endmodule. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module DISPLAY_ALV OUTPUT
*&---------------------------------------------------------------------*
* Display ALV Grid Report
*----------------------------------------------------------------------*
module DISPLAY_ALV output.
PERFORM display_alv_grid.
endmodule. " DISPLAY_ALV OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* Handle user command
*----------------------------------------------------------------------*
module USER_COMMAND_0100 input.
CASE sy-ucomm.
WHEN '&BACK' OR '&EXIT' OR '&CANCEL'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
endmodule. " USER_COMMAND_0100 INPUT
*-----------------------------------------------------------------------
* LOCAL CLASS - IMPLEMENTATION
*-----------------------------------------------------------------------
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_double_click_grid.
DATA lv_row TYPE SALV_DE_ROW.
DATA lv_col TYPE SALV_DE_COLUMN.
lv_row = e_row-index .
lv_col = e_column-fieldname.
on_double_click( row = lv_row
column = lv_col ).
ENDMETHOD.
*&---------------------------------------------------------------------*
*& Form SET_ALV_DEFAULT_VARIANT
*&---------------------------------------------------------------------*
* Set default ALV variant
*----------------------------------------------------------------------*
FORM set_alv_default_variant.
*&---------------------------------------------------------------------*
*& Form F4_ALV_VARI
*&---------------------------------------------------------------------*
* popup F4 help to select an ALV layout
*----------------------------------------------------------------------*
FORM f4_alv_vari .
CLEAR lv_layout.
MOVE sy-repid TO lv_layout-report.
*&---------------------------------------------------------------------*
*& Form CHECK_ALV_SELECTED_VARIANT
*&---------------------------------------------------------------------*
* Check selected ALV variant
*----------------------------------------------------------------------*
FORM check_alv_selected_variant .
DATA lv_spec_layout TYPE disvariant.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_GRID
*&---------------------------------------------------------------------*
* Display ALV Grid Report
*----------------------------------------------------------------------*
form DISPLAY_ALV_GRID .
DATA ls_layout TYPE lvc_s_layo.
DATA li_fcat TYPE lvc_t_fcat.
DATA li_sort TYPE lvc_t_sort.
DATA lk_sort TYPE lvc_s_sort.
DATA lv_default TYPE c LENGTH 1 VALUE 'X'.
DATA lv_save TYPE c LENGTH 1 VALUE 'A'.
DATA lo_ev_handler TYPE REF TO lcl_event_handler.
* Prepare variant
v_variant-report = sy-repid.
v_variant-username = sy-uname.
IF p_vari IS NOT INITIAL.
v_variant-variant = p_vari.
ENDIF.
* Define sorting
lk_sort-fieldname = '[sort field1]'.
APPEND lk_sort TO li_sort.
lk_sort-fieldname = '[sort field2]'.
APPEND lk_sort TO li_sort.
lk_sort-fieldname = '[sort field3]'.
APPEND lk_sort TO li_sort.
lk_sort-fieldname = '[sort field4]'.
APPEND lk_sort TO li_sort.
* Display ALV
CALL METHOD o_alvgrid->set_table_for_first_display
EXPORTING
is_variant = v_variant
i_save = lv_save
i_default = lv_default
is_layout = ls_layout
CHANGING
it_outtab = i_report
it_fieldcatalog = li_fcat
it_sort = li_sort
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error =2
too_many_lines =3
others = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL METHOD o_alvgrid->refresh_table_display
EXCEPTIONS
finished =1
others =2 .
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form CHANGE_COLUMN_GRID
*&---------------------------------------------------------------------*
* change a report column attributes
*----------------------------------------------------------------------*
FORM change_column_grid USING pi_fcat TYPE lvc_t_fcat
pv_fieldname TYPE c
pv_technical TYPE c
pv_invisible TYPE c
pv_currref TYPE c
pv_quanref TYPE c
pv_fieldtextlm TYPE c
pv_fieldtexts TYPE c.
<fcat>-tech = pv_technical.
<fcat>-no_out = pv_invisible.
IF <fcat>-no_out IS NOT INITIAL OR <fcat>-tech IS NOT INITIAL.
RETURN.
ENDIF.
<fcat>-cfieldname = pv_currref.
<fcat>-qfieldname = pv_quanref.
ENDIF.
ENDFORM. " CHANGE_COLUMN
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* Get data from database
*----------------------------------------------------------------------*
FORM get_data .
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* Process data
*----------------------------------------------------------------------*
FORM process_data .