Demo program on interactive ALV using OOPS

By Swarna S, Tata Consultancy Services

*&---------------------------------------------------------------------*
*& Report  ZALV_OOINTERACTIVE                                          *
*& Author  Swarna.S.                                                   *
*& Published at SAPTechnical.com                                       *
*&---------------------------------------------------------------------*
*&     AS : Simple Interactive ALV report developed using OOPS         *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT  ZALV_OOINTERACTIVE.
*Class definition for handling double click
CLASS event_class DEFINITION DEFERRED.
*Internal table and work area declarations for dd02l and dd03l
DATA : it_dd02l TYPE TABLE OF dd02l,
       wa_dd02l TYPE dd02l,
       it_dd03l TYPE TABLE OF dd03l,
       wa_dd03l TYPE dd03l.
*data declarations for ALV Main list
DATA : ty_lay1 TYPE lvc_s_layo,
       it_fieldcat TYPE lvc_t_fcat ,
       ty_fieldcat 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_fcat TYPE lvc_t_fcat ,
       ty_fcat 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_table FOR wa_dd02l-tabname NO INTERVALS.
* Initialization event
INITIALIZATION.
*Start of selection event
START-OF-SELECTION.
*fetch data into table and field characteristics
  PERFORM fetch_data.
*ALV display for output
  PERFORM alv_output.
*&---------------------------------------------------------------------*
*&      Form  FETCH_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fetch_data .
*Select the table details
  SELECT * FROM dd02l INTO CORRESPONDING FIELDS OF TABLE it_dd02l 
WHERE tabname IN s_table
  AND tabclass = 'TRANSP'.
ENDFORM.                    " FETCH_DATA
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS event_class DEFINITION.
*Handling double click
  PUBLIC SECTION.
    METHODS:
    handle_double_click
    FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row .
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS event_class IMPLEMENTATION.
  METHOD handle_double_click.
    DATA : ls_dd02l LIKE LINE OF it_dd02l.
*Reading the selected data into a variable
    READ TABLE it_dd02l INDEX e_row-index INTO ls_dd02l.
*  *Select the field details of the selected table
    SELECT * FROM dd03l INTO CORRESPONDING FIELDS OF TABLE it_dd03l
    WHERE tabname EQ ls_dd02l-tabname.
*calling the ALV containing the field values
    CALL SCREEN 101.
  ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Module pbo_100 OUTPUT
*&---------------------------------------------------------------------*
MODULE pbo_100 OUTPUT.
*set pf-status 'XXX'.
*set titlebar 'XXX'.
ENDMODULE. " PBO_100 OUTPUT
*&---------------------------------------------------------------------*
*& Module alv_100 OUTPUT
*&---------------------------------------------------------------------*
MODULE alv_100 OUTPUT.
*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_dd02l[]
        it_fieldcatalog = it_fieldcat.
    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. " ALV_100 OUTPUT
*&---------------------------------------------------------------------*
*& Module pai_100 INPUT
*&---------------------------------------------------------------------*
MODULE pai_100 INPUT.
ENDMODULE. " pai_100 INPUT
*----------------------------------------------------------------------*
* MODULE PBO_101 OUTPUT
*----------------------------------------------------------------------*
MODULE pbo_101 OUTPUT.
*  SET PF-STATUS 'XXX'.
*  SET TITLEBAR 'XXX'.
ENDMODULE. " PBO_101 INPUT
*----------------------------------------------------------------------*
* MODULE ALV_101 OUTPUT
*----------------------------------------------------------------------*
MODULE alv_101 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.
*Sorting the output by field position
    SORT it_dd03l BY position.
*ALV for display field details
    CALL METHOD c_alv2->set_table_for_first_display
      EXPORTING
        is_layout       = ty_lay2
      CHANGING
        it_outtab       = it_dd03l[]
        it_fieldcatalog = it_fcat.
    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. " ALV_101 OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI_101 INPUT
*&---------------------------------------------------------------------*
MODULE pai_101 INPUT.
ENDMODULE. " PAI_101 INPUT
*&---------------------------------------------------------------------*
*&      Form  ALV_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_output .
  CALL SCREEN 100.
ENDFORM.                    " ALV_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  ALV_100_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_100_layout .
  ty_lay1-grid_title = 'TABLES'.
  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_fieldcat.
  ty_fieldcat-row_pos = 1.
  ty_fieldcat-col_pos = 1.
  ty_fieldcat-fieldname = 'TABNAME'.
  ty_fieldcat-tabname = 'GT_DD02L'.
  ty_fieldcat-coltext = 'TableName'.
  ty_fieldcat-outputlen = 10.
  APPEND ty_fieldcat TO it_fieldcat.
  CLEAR ty_fieldcat.
  ty_fieldcat-row_pos = 1.
  ty_fieldcat-col_pos = 2.
  ty_fieldcat-fieldname = 'TABCLASS'.
  ty_fieldcat-tabname = 'GT_DD02L'.
  ty_fieldcat-coltext = 'CATEGORY'.
  ty_fieldcat-outputlen = 10.
  APPEND ty_fieldcat TO it_fieldcat.
  CLEAR ty_fieldcat.
  ty_fieldcat-row_pos = 1.
  ty_fieldcat-col_pos = 3.
  ty_fieldcat-fieldname = 'AS4USER'.
  ty_fieldcat-tabname = 'GT_DD02L'.
  ty_fieldcat-coltext = 'CREATED'.
  ty_fieldcat-outputlen = 10.
  APPEND ty_fieldcat TO it_fieldcat.
  CLEAR ty_fieldcat.
  ty_fieldcat-row_pos = 1.
  ty_fieldcat-col_pos = 4.
  ty_fieldcat-fieldname = 'AS4DATE'.
  ty_fieldcat-tabname = 'GT_DD02L'.
  ty_fieldcat-coltext = 'DATE'.
  ty_fieldcat-outputlen = 10.
  APPEND ty_fieldcat TO it_fieldcat.
  CLEAR ty_fieldcat.
  ty_fieldcat-row_pos = 1.
  ty_fieldcat-col_pos = 5.
  ty_fieldcat-fieldname = 'AS4TIME'.
  ty_fieldcat-tabname = 'GT_DD02L'.
  ty_fieldcat-coltext = 'TIME'.
  ty_fieldcat-outputlen = 10.
  APPEND ty_fieldcat TO it_fieldcat.
  CLEAR ty_fieldcat.
  ty_fieldcat-row_pos = 1.
  ty_fieldcat-col_pos = 6.
  ty_fieldcat-fieldname = 'CONTFLAG'.
  ty_fieldcat-tabname = 'GT_DD02L'.
  ty_fieldcat-coltext = 'Delivery Class'.
  ty_fieldcat-outputlen = 15.
  APPEND ty_fieldcat TO it_fieldcat.
  CLEAR ty_fieldcat.
ENDFORM.                    " ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  ALV_101_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_101_layout .
  ty_lay2-grid_title = 'FIELDS'.
  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_fieldcat.
  REFRESH it_fcat.
  CLEAR ty_fcat.
  ty_fcat-row_pos = 1.
  ty_fcat-col_pos = 1.
  ty_fcat-fieldname = 'FIELDNAME'.
  ty_fcat-tabname = 'GT_DD03L'.
  ty_fcat-coltext = 'Fieldname'.
  ty_fcat-outputlen = 10.
  APPEND ty_fcat TO it_fcat.
  ty_fcat-row_pos = 1.
  ty_fcat-col_pos = 2.
  ty_fcat-fieldname = 'CHECKTABLE'.
  ty_fcat-tabname = 'GT_DD03L'.
  ty_fcat-coltext = 'CHECKTABLE'.
  ty_fcat-outputlen = 10.
  APPEND ty_fcat TO it_fcat.
  ty_fcat-row_pos = 1.
  ty_fcat-col_pos = 3.
  ty_fcat-fieldname = 'KEYFLAG'.
  ty_fcat-tabname = 'GT_DD03L'.
  ty_fcat-coltext = 'Key Flag'.
  ty_fcat-outputlen = 10.
  APPEND ty_fcat TO it_fcat.
ENDFORM.                    " ALV_101_FIELDCAT

Selection screen

First Basic Output.

 

On double clicking the table name we get the fields in the table as 

 

Please send us your feedback/suggestions at webmaster@SAPTechnical.COM 

HomeContribute About Us Privacy Terms Of Use • Disclaimer • SafeCompanies: Advertise on SAPTechnical.COM | Post JobContact Us  

Graphic Design by Round the Bend Wizards

footer image footer image