0% found this document useful (0 votes)
62 views9 pages

ALV Grid Report Template Using Dynpro Custom Container

Uploaded by

viceawork05
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views9 pages

ALV Grid Report Template Using Dynpro Custom Container

Uploaded by

viceawork05
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

ALV Grid Report Template using Dynpro Custom Container

1 Vote

Here’s my ALV grid report template using dynpro custom container.


The template includes
 logic to cater for selection screen’s ALV variant, i.e. setting default variant, showing
search help, validation, and apply it into the report
 handling double click event
 define sorting sequence
 changing few common attributes of field catalog

REPORT [report name].

*-----------------------------------------------------------------------
* 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

TYPES BEGIN OF t_report.


INCLUDE TYPE [report structure].
TYPES END OF t_report.

*-----------------------------------------------------------------------
* 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.

* Box ALV Output options


SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-t04.
PARAMETERS p_vari TYPE disvariant-variant.
SELECTION-SCREEN END OF BLOCK b4.

************************************************************************
** INITIALIZATION
************************************************************************
INITIALIZATION.
PERFORM set_alv_default_variant.

************************************************************************
** AT SELECTION-SCREEN
************************************************************************
AT SELECTION-SCREEN.

AT SELECTION-SCREEN ON p_vari.
PERFORM check_alv_selected_variant.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.


PERFORM f4_alv_vari.

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.

ENDCLASS. "lcl_event_handler IMPLEMENTATION

*&---------------------------------------------------------------------*
*& Form SET_ALV_DEFAULT_VARIANT
*&---------------------------------------------------------------------*
* Set default ALV variant
*----------------------------------------------------------------------*
FORM set_alv_default_variant.

DATA lv_def_layout TYPE disvariant.

* Set variant default value


CLEAR lv_def_layout.
MOVE sy-repid TO lv_def_layout-report.
CALL FUNCTION 'LVC_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = lv_def_layout
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = lv_def_layout-variant.
ENDIF.

ENDFORM. " SET_ALV_DEFAULT_VARIANT

*&---------------------------------------------------------------------*
*& Form F4_ALV_VARI
*&---------------------------------------------------------------------*
* popup F4 help to select an ALV layout
*----------------------------------------------------------------------*
FORM f4_alv_vari .

DATA lv_layout TYPE disvariant.


DATA lv_exit TYPE c LENGTH 1.
DATA lv_spec_layout TYPE disvariant.

CLEAR lv_layout.
MOVE sy-repid TO lv_layout-report.

CALL FUNCTION 'LVC_VARIANT_F4'


EXPORTING
is_variant = lv_layout
i_save = 'A'
IMPORTING
e_exit = lv_exit
es_variant = lv_spec_layout
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lv_exit NE 'X'.
* set name of layout on selection screen
p_vari = lv_spec_layout-variant.
ENDIF.
ENDIF.

ENDFORM. " F4_ALV_VARI

*&---------------------------------------------------------------------*
*& Form CHECK_ALV_SELECTED_VARIANT
*&---------------------------------------------------------------------*
* Check selected ALV variant
*----------------------------------------------------------------------*
FORM check_alv_selected_variant .
DATA lv_spec_layout TYPE disvariant.

IF p_vari IS NOT INITIAL.


CLEAR lv_spec_layout.
MOVE p_vari TO lv_spec_layout-variant.
MOVE sy-repid TO lv_spec_layout-report.

CALL FUNCTION 'LVC_VARIANT_EXISTENCE_CHECK'


EXPORTING
i_save = 'A'
CHANGING
cs_variant = lv_spec_layout
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 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.
ENDIF.
ENDFORM. " CHECK_ALV_SELECTED_VARIANT

*&---------------------------------------------------------------------*
*& 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.

IF o_alvgrid IS NOT BOUND.

* create ALV Grid container


CREATE OBJECT o_alvcontainer
EXPORTING
container_name = c_ccname
EXCEPTIONS
cntl_error =1
cntl_system_error =2
create_error =3
lifetime_error =4
lifetime_dynpro_dynpro_link = 5
others = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* create ALV Grid object


CREATE OBJECT o_alvgrid
EXPORTING
i_parent = o_alvcontainer
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others =5 .
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* Generate field catalog


CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZBID_TRACK'
I_INTERNAL_TABNAME = 'I_REPORT'
CHANGING
ct_fieldcat = li_fcat
EXCEPTIONS
INCONSISTENT_INTERFACE =1
PROGRAM_ERROR =2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* Change column display


PERFORM change_column_grid USING li_fcat:
[EXAMPLE:]
'KUNAG' ' ' ' ' ' ' ' ' 'Quote Sold-to #'(001) 'QuotSld-to'(003),
'NETWR' ' ' ' ' 'WAERK' ' ' 'Net Value (LC)'(031) 'N.V. (LC)'(033),
'REJQTY' ' ' ' ' ' ' 'VRKME' 'Rejected Quantity'(049) 'Rejd Qty'(051),
'WAERS_RC' 'X' 'X' ' ' ' ' ' ' ' '.

* optimize column width


ls_layout-CWIDTH_OPT = 'X'.

* Prepare variant
v_variant-report = sy-repid.
v_variant-username = sy-uname.
IF p_vari IS NOT INITIAL.
v_variant-variant = p_vari.
ENDIF.

* Set event handler


CREATE OBJECT lo_ev_handler.
SET HANDLER lo_ev_handler->on_double_click_grid FOR o_alvgrid.

* 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.

endform. " DISPLAY_ALV_GRID

*&---------------------------------------------------------------------*
*& 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.

FIELD-SYMBOLS <fcat> TYPE lvc_s_fcat.

READ TABLE pi_fcat ASSIGNING <fcat> WITH KEY fieldname = pv_fieldname.


IF sy-subrc = 0.

<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.

IF pv_fieldtextlm IS NOT INITIAL.


<fcat>-reptext = <fcat>-scrtext_l = <fcat>-scrtext_m = pv_fieldtextlm.
ENDIF.

IF pv_fieldtexts IS NOT INITIAL.


<fcat>-scrtext_s = pv_fieldtexts.
ENDIF.

ENDIF.
ENDFORM. " CHANGE_COLUMN

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* Get data from database
*----------------------------------------------------------------------*
FORM get_data .

[data selection logic]

ENDFORM. " GET_DATA

*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* Process data
*----------------------------------------------------------------------*
FORM process_data .

[data processing logic]

ENDFORM. " PROCESS_DATA

You might also like