Interactive ALV Report using Class by implementing Double click Event.The sample code is follows:
1.Create a program with 2 screens and custom container to hold ALV.
*** Tables
TABLES : vbak,vbap.
***Class definition for handling double click
CLASS event_class DEFINITION DEFERRED.
*** Internal table and work area declarations
DATA : it_vbak TYPE TABLE OF vbak,
wa_vbak TYPE vbak,
it_vbap TYPE TABLE OF vbap,
wa_vbap TYPE vbap.
*** data declarations for ALV Main list
DATA : ty_lay1 TYPE lvc_s_layo,
it_fcat1 TYPE lvc_t_fcat ,
ty_fcat1 TYPE lvc_s_fcat ,
c_alv1 TYPE REF TO cl_gui_alv_grid,
c_cont1 TYPE REF TO cl_gui_custom_container,
event_receiver TYPE REF TO event_class.
*** data declarations for ALV Interactive list
DATA : ty_lay2 TYPE lvc_s_layo,
it_fcat2 TYPE lvc_t_fcat ,
ty_fcat2 TYPE lvc_s_fcat ,
c_alv2 TYPE REF TO cl_gui_alv_grid,
c_cont2 TYPE REF TO cl_gui_custom_container.
**Select options for multiple values and NOT ranges
SELECT-OPTIONS : s_AUDAT FOR vbak-AUDAT .
START-OF-SELECTION.
CALL SCREEN 100.
*** class definiotion
CLASS event_class DEFINITION.
PUBLIC SECTION.
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row.
ENDCLASS.
*** Class implementation
CLASS event_class IMPLEMENTATION.
METHOD handle_double_click.
READ TABLE it_vbak INDEX e_row-index INTO wa_vbak.
SELECT * FROM vbap INTO CORRESPONDING FIELDS OF TABLE it_vbap
WHERE vbeln EQ wa_vbak-vbeln.
*calling the ALV containing the field values
CALL SCREEN 101.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module STATUS_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
endmodule. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module PROCESS_MAIL_LIST OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module PROCESS_MAIL_LIST output.
SELECT * from vbak INTO TABLE it_vbak where AUDAT in s_AUDAT.
***Check if there is no custom container in screen 100
IF c_cont1 IS INITIAL.
***Creating object of container
CREATE OBJECT c_cont1
EXPORTING
container_name = 'CCONT'.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***Creating object of alv
CREATE OBJECT c_alv1
EXPORTING
i_parent = c_cont1.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***alv layout
PERFORM alv_100_layout.
***alv field catalogue
PERFORM alv_100_fieldcat.
***Displaying the ALV grid
CALL METHOD c_alv1->set_table_for_first_display
EXPORTING
is_layout = ty_lay1
CHANGING
it_outtab = it_vbak[]
it_fieldcatalog = it_fcat1.
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 object of the event class and setting handler for double click
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_double_click FOR c_alv1.
ENDIF.
endmodule. " PROCESS_MAIL_LIST OUTPUT
*&---------------------------------------------------------------------*
*& Form ALV_100_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_100_LAYOUT .
ty_lay1-grid_title = 'Sale Order Header Details'.
ty_lay1-zebra = 'X'.
ty_lay1-no_toolbar = 'X'.
endform. " ALV_100_LAYOUT
*&---------------------------------------------------------------------*
*& Form ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_100_FIELDCAT .
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 1.
ty_fcat1-fieldname = 'VBELN'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Sale Order'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 2.
ty_fcat1-fieldname = 'AUDAT'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Document Date'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 3.
ty_fcat1-fieldname = 'VKORG'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Sales Org.'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 4.
ty_fcat1-fieldname = 'VTWEG'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Distr. Channel'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 5.
ty_fcat1-fieldname = 'SPART'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Division'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
endform. " ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
*& Module PROCESS_INTERACTIVE_LIST OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module PROCESS_INTERACTIVE_LIST output.
*Check if the Custom container exists.
IF c_cont2 IS INITIAL.
***Creating container object
CREATE OBJECT c_cont2
EXPORTING
container_name = 'CDCONT'.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***creating ALV grid for interactive list
CREATE OBJECT c_alv2
EXPORTING
i_parent = c_cont2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***ALV layout
PERFORM alv_101_layout.
***ALV fieldcatalogue
PERFORM alv_101_fieldcat.
*ALV for display field details
CALL METHOD c_alv2->set_table_for_first_display
EXPORTING
is_layout = ty_lay2
CHANGING
it_outtab = it_vbap[]
it_fieldcatalog = it_fcat2.
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.
endmodule. " PROCESS_INTERACTIVE_LIST OUTPUT
*&---------------------------------------------------------------------*
*& Form ALV_101_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_101_LAYOUT .
ty_lay2-grid_title = 'Sale Order Item Details'.
ty_lay2-zebra = 'X'.
ty_lay2-no_toolbar = 'X'.
endform. " ALV_101_LAYOUT
*&---------------------------------------------------------------------*
*& Form ALV_101_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_101_FIELDCAT .
REFRESH it_fcat2.
CLEAR ty_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 1.
ty_fcat2-fieldname = 'VBELN'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Sales Document'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 2.
ty_fcat2-fieldname = 'POSNR'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Item'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 3.
ty_fcat2-fieldname = 'MATNR'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Material'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 3.
ty_fcat2-fieldname = 'ARKTX'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Material Des'.
ty_fcat2-outputlen = 25.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 3.
ty_fcat2-fieldname = 'NETWR'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Net.Value'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
endform. " ALV_101_FIELDCAT
1.Create a program with 2 screens and custom container to hold ALV.
*** Tables
TABLES : vbak,vbap.
***Class definition for handling double click
CLASS event_class DEFINITION DEFERRED.
*** Internal table and work area declarations
DATA : it_vbak TYPE TABLE OF vbak,
wa_vbak TYPE vbak,
it_vbap TYPE TABLE OF vbap,
wa_vbap TYPE vbap.
*** data declarations for ALV Main list
DATA : ty_lay1 TYPE lvc_s_layo,
it_fcat1 TYPE lvc_t_fcat ,
ty_fcat1 TYPE lvc_s_fcat ,
c_alv1 TYPE REF TO cl_gui_alv_grid,
c_cont1 TYPE REF TO cl_gui_custom_container,
event_receiver TYPE REF TO event_class.
*** data declarations for ALV Interactive list
DATA : ty_lay2 TYPE lvc_s_layo,
it_fcat2 TYPE lvc_t_fcat ,
ty_fcat2 TYPE lvc_s_fcat ,
c_alv2 TYPE REF TO cl_gui_alv_grid,
c_cont2 TYPE REF TO cl_gui_custom_container.
**Select options for multiple values and NOT ranges
SELECT-OPTIONS : s_AUDAT FOR vbak-AUDAT .
START-OF-SELECTION.
CALL SCREEN 100.
*** class definiotion
CLASS event_class DEFINITION.
PUBLIC SECTION.
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row.
ENDCLASS.
*** Class implementation
CLASS event_class IMPLEMENTATION.
METHOD handle_double_click.
READ TABLE it_vbak INDEX e_row-index INTO wa_vbak.
SELECT * FROM vbap INTO CORRESPONDING FIELDS OF TABLE it_vbap
WHERE vbeln EQ wa_vbak-vbeln.
*calling the ALV containing the field values
CALL SCREEN 101.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module STATUS_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
endmodule. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module PROCESS_MAIL_LIST OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module PROCESS_MAIL_LIST output.
SELECT * from vbak INTO TABLE it_vbak where AUDAT in s_AUDAT.
***Check if there is no custom container in screen 100
IF c_cont1 IS INITIAL.
***Creating object of container
CREATE OBJECT c_cont1
EXPORTING
container_name = 'CCONT'.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***Creating object of alv
CREATE OBJECT c_alv1
EXPORTING
i_parent = c_cont1.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***alv layout
PERFORM alv_100_layout.
***alv field catalogue
PERFORM alv_100_fieldcat.
***Displaying the ALV grid
CALL METHOD c_alv1->set_table_for_first_display
EXPORTING
is_layout = ty_lay1
CHANGING
it_outtab = it_vbak[]
it_fieldcatalog = it_fcat1.
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 object of the event class and setting handler for double click
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_double_click FOR c_alv1.
ENDIF.
endmodule. " PROCESS_MAIL_LIST OUTPUT
*&---------------------------------------------------------------------*
*& Form ALV_100_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_100_LAYOUT .
ty_lay1-grid_title = 'Sale Order Header Details'.
ty_lay1-zebra = 'X'.
ty_lay1-no_toolbar = 'X'.
endform. " ALV_100_LAYOUT
*&---------------------------------------------------------------------*
*& Form ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_100_FIELDCAT .
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 1.
ty_fcat1-fieldname = 'VBELN'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Sale Order'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 2.
ty_fcat1-fieldname = 'AUDAT'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Document Date'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 3.
ty_fcat1-fieldname = 'VKORG'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Sales Org.'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 4.
ty_fcat1-fieldname = 'VTWEG'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Distr. Channel'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
CLEAR ty_fcat1.
ty_fcat1-row_pos = 1.
ty_fcat1-col_pos = 5.
ty_fcat1-fieldname = 'SPART'.
ty_fcat1-tabname = 'VBAK'.
ty_fcat1-coltext = 'Division'.
ty_fcat1-outputlen = 10.
APPEND ty_fcat1 TO it_fcat1.
endform. " ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
*& Module PROCESS_INTERACTIVE_LIST OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module PROCESS_INTERACTIVE_LIST output.
*Check if the Custom container exists.
IF c_cont2 IS INITIAL.
***Creating container object
CREATE OBJECT c_cont2
EXPORTING
container_name = 'CDCONT'.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***creating ALV grid for interactive list
CREATE OBJECT c_alv2
EXPORTING
i_parent = c_cont2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***ALV layout
PERFORM alv_101_layout.
***ALV fieldcatalogue
PERFORM alv_101_fieldcat.
*ALV for display field details
CALL METHOD c_alv2->set_table_for_first_display
EXPORTING
is_layout = ty_lay2
CHANGING
it_outtab = it_vbap[]
it_fieldcatalog = it_fcat2.
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.
endmodule. " PROCESS_INTERACTIVE_LIST OUTPUT
*&---------------------------------------------------------------------*
*& Form ALV_101_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_101_LAYOUT .
ty_lay2-grid_title = 'Sale Order Item Details'.
ty_lay2-zebra = 'X'.
ty_lay2-no_toolbar = 'X'.
endform. " ALV_101_LAYOUT
*&---------------------------------------------------------------------*
*& Form ALV_101_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form ALV_101_FIELDCAT .
REFRESH it_fcat2.
CLEAR ty_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 1.
ty_fcat2-fieldname = 'VBELN'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Sales Document'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 2.
ty_fcat2-fieldname = 'POSNR'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Item'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 3.
ty_fcat2-fieldname = 'MATNR'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Material'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 3.
ty_fcat2-fieldname = 'ARKTX'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Material Des'.
ty_fcat2-outputlen = 25.
APPEND ty_fcat2 TO it_fcat2.
ty_fcat2-row_pos = 1.
ty_fcat2-col_pos = 3.
ty_fcat2-fieldname = 'NETWR'.
ty_fcat2-tabname = 'VBAP'.
ty_fcat2-coltext = 'Net.Value'.
ty_fcat2-outputlen = 10.
APPEND ty_fcat2 TO it_fcat2.
endform. " ALV_101_FIELDCAT
No comments:
Post a Comment