Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

alv grid display using classes

Former Member
0 Likes
12,095

hi

can any one tall me a simple program

to display alv grid using classes so that i may

understand the flow of alv grid using classes.

9 REPLIES 9
Read only

amit_khare
Active Contributor
0 Likes
4,807

Azra,

Welcome to SDN.

In SE38 check the reports with name BCALV_*.

They all are examples on OO ALV only.

Check this link for documents -

Regards,

Amit

Reward all helpful replies.

Read only

uwe_schieferstein
Active Contributor
0 Likes
4,807

Hello Azra

I have posted several simplified ALV reports within the <i>ABAP Objects</i> forum (search for <b>ZUS_SDN</b>). Below you will find a few examples.

The following sample report show customer data ("Header"; KNB1) in the first ALV list and sales areas ("Detail"; KNVV) for the selected customer in the second ALV list.

*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_TWO_ALV_GRIDS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
 
REPORT  zus_sdn_two_alv_grids.
 
 
 
 
DATA:
  gd_okcode        TYPE ui_func,
*
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_splitter      TYPE REF TO cl_gui_splitter_container,
  go_cell_top      TYPE REF TO cl_gui_container,
  go_cell_bottom   TYPE REF TO cl_gui_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid,
  go_grid2         TYPE REF TO cl_gui_alv_grid,
  gs_layout        TYPE lvc_s_layo.
 
 
DATA:
  gt_knb1          TYPE STANDARD TABLE OF knb1,
  gt_knvv          TYPE STANDARD TABLE OF knvv.
 
 
 
 
 
*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.
 
  PUBLIC SECTION.
    CLASS-METHODS:
      handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          sender.
 
 
ENDCLASS.                    "lcl_eventhandler DEFINITION
 
 
 
*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.
 
  METHOD handle_double_click.
*   define local data
    DATA:
      ls_knb1      TYPE knb1.
 
    CHECK ( sender = go_grid1 ).
 
    READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
    CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
 
    CALL METHOD go_grid1->set_current_cell_via_id
      EXPORTING
*        IS_ROW_ID    =
*        IS_COLUMN_ID =
        is_row_no    = es_row_no.
 
 
*   Triggers PAI of the dynpro with the specified ok-code
    CALL METHOD cl_gui_cfw=>set_new_ok_code( 'DETAIL' ).
 
 
 
  ENDMETHOD.                    "handle_double_click
 
ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION
 
 
 
 
 
 
START-OF-SELECTION.
 
  SELECT        * FROM  knb1 INTO TABLE gt_knb1
         WHERE  bukrs  = '1000'.
 
 
* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=>screen0
      ratio                       = 90
    EXCEPTIONS
      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 splitter container
  CREATE OBJECT go_splitter
    EXPORTING
      parent            = go_docking
      rows              = 2
      columns           = 1
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    EXCEPTIONS
      cntl_error        = 1
      cntl_system_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.
 
* Get cell container
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_top.
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = go_cell_bottom.
 
* Create ALV grids
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent          = go_cell_top
    EXCEPTIONS
      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.
 
 
* Set event handler
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
 
 
  CREATE OBJECT go_grid2
    EXPORTING
      i_parent          = go_cell_bottom
    EXCEPTIONS
      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.
 
 
* Display data
  gs_layout-grid_title = 'Customers'.
  CALL METHOD go_grid1->set_table_for_first_display
    EXPORTING
      i_structure_name = 'KNB1'
      is_layout        = gs_layout
    CHANGING
      it_outtab        = gt_knb1
    EXCEPTIONS
      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.
 
  gs_layout-grid_title = 'Customers Details (Sales Areas)'.
  CALL METHOD go_grid2->set_table_for_first_display
    EXPORTING
      i_structure_name = 'KNVV'
      is_layout        = gs_layout
    CHANGING
      it_outtab        = gt_knvv  " empty !!!
    EXCEPTIONS
      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.
 
 
* Link the docking container to the target dynpro
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = syst-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      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.
 
 
* NOTE: dynpro does not contain any elements
  CALL SCREEN '0100'.
* Flow logic of dynpro (does not contain any dynpro elements):
*
*PROCESS BEFORE OUTPUT.
*  MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
*  MODULE USER_COMMAND_0100.
 
 
 
END-OF-SELECTION.
 
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.  " contains push button "DETAIL"
*  SET TITLEBAR 'xxx'.
 
 
* Refresh display of detail ALV list
  CALL METHOD go_grid2->refresh_table_display
*    EXPORTING
*      IS_STABLE      =
*      I_SOFT_REFRESH =
    EXCEPTIONS
      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.
 
 
ENDMODULE.                 " STATUS_0100  OUTPUT
 
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
 
  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.
 
*   User has pushed button "Display Details"
    WHEN 'DETAIL'.
      PERFORM entry_show_details.
 
    WHEN OTHERS.
  ENDCASE.
 
  CLEAR: gd_okcode.
 
ENDMODULE.                 " USER_COMMAND_0100  INPUT
 
*&---------------------------------------------------------------------*
*&      Form  ENTRY_SHOW_DETAILS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM entry_show_details .
* define local data
  DATA:
    ld_row      TYPE i,
    ls_knb1     TYPE knb1.
 
  CALL METHOD go_grid1->get_current_cell
    IMPORTING
      e_row = ld_row.
 
  READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
  CHECK ( syst-subrc = 0 ).
 
  SELECT        * FROM  knvv INTO TABLE gt_knvv
         WHERE  kunnr  = ls_knb1-kunnr.
 
ENDFORM.                    " ENTRY_SHOW_DETAILS

Simply drill down the ALV list by double-clicking. The flow logic of the dynpro is shown below. The dynpro does not contain any elements.

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
  MODULE USER_COMMAND_0100.




*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_THREE_ALV_GRIDS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
 
REPORT  zus_sdn_three_alv_grids.
 
 
 
 
DATA:
  gd_okcode        TYPE ui_func,
*
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_splitter      TYPE REF TO cl_gui_splitter_container,
  go_splitter_2    TYPE REF TO cl_gui_splitter_container,
  go_cell_top      TYPE REF TO cl_gui_container,
  go_cell_bottom   TYPE REF TO cl_gui_container,
  go_cell_left     TYPE REF TO cl_gui_container,
  go_cell_right    TYPE REF TO cl_gui_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid,
  go_grid2         TYPE REF TO cl_gui_alv_grid,
  go_grid3         TYPE REF TO cl_gui_alv_grid.
 
 
DATA:
  gt_knb1          TYPE STANDARD TABLE OF knb1,
  gt_vbak          TYPE STANDARD TABLE OF vbak,
  gt_vbap          TYPE STANDARD TABLE OF vbap.
 
 
 
 
PARAMETERS:
  p_bukrs          TYPE bukrs  DEFAULT '1000'.
 
 
 
*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.
 
  PUBLIC SECTION.
    CLASS-METHODS:
      handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          sender.
 
 
ENDCLASS.                    "lcl_eventhandler DEFINITION
 
 
 
*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.
 
  METHOD handle_double_click.
*   define local data
    DATA:
      ls_knb1      TYPE knb1,
      ls_vbak      TYPE vbak,
      ls_vbap      TYPE vbap.
 
 
    CASE sender.
      WHEN go_grid1.
        READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
        CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
 
        CALL METHOD go_grid1->set_current_cell_via_id
          EXPORTING
*              IS_ROW_ID    =
*              IS_COLUMN_ID =
            is_row_no    = es_row_no.
 
 
*         Triggers PAI of the dynpro with the specified ok-code
        CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDERS' ).
 
 
      WHEN go_grid2.
        READ TABLE gt_vbak INTO ls_vbak INDEX e_row-index.
        CHECK ( ls_vbak-vbeln IS NOT INITIAL ).
 
        CALL METHOD go_grid1->set_current_cell_via_id
          EXPORTING
*              IS_ROW_ID    =
*              IS_COLUMN_ID =
            is_row_no    = es_row_no.
 
*         Triggers PAI of the dynpro with the specified ok-code
        CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDER_DETAILS' ).
 
 
 
      WHEN go_grid3.
        READ TABLE gt_vbap INTO ls_vbap INDEX e_row-index.
        CHECK ( ls_vbap-matnr IS NOT INITIAL ).
 
        SET PARAMETER ID 'MAT' FIELD ls_vbap-matnr.
        CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.
 
      WHEN OTHERS.
        RETURN.
    ENDCASE.
 
 
 
 
 
 
 
  ENDMETHOD.                    "handle_double_click
 
ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION
 
 
 
 
 
 
START-OF-SELECTION.
 
  SELECT        * FROM  knb1 INTO TABLE gt_knb1
         WHERE  bukrs  = p_bukrs.
 
 
* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=>screen0
      ratio                       = 90
    EXCEPTIONS
      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 splitter container
  CREATE OBJECT go_splitter
    EXPORTING
      parent            = go_docking
      rows              = 1
      columns           = 2
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    EXCEPTIONS
      cntl_error        = 1
      cntl_system_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.
 
* Get cell container
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_left.
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = go_cell_right.
 
 
* Create 2nd splitter container
  CREATE OBJECT go_splitter_2
    EXPORTING
      parent            = go_cell_left
      rows              = 2
      columns           = 1
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    EXCEPTIONS
      cntl_error        = 1
      cntl_system_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.
 
* Get cell container
  CALL METHOD go_splitter_2->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_top.
  CALL METHOD go_splitter_2->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = go_cell_bottom.
 
 
* Create ALV grids
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent          = go_cell_top
    EXCEPTIONS
      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.
 
 
 
  CREATE OBJECT go_grid2
    EXPORTING
      i_parent          = go_cell_bottom
    EXCEPTIONS
      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.
 
 
  CREATE OBJECT go_grid3
    EXPORTING
      i_parent          = go_cell_right
    EXCEPTIONS
      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.
 
 
 
 
 
* Set event handler
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid2.
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid3.
 
 
* Display data
  CALL METHOD go_grid1->set_table_for_first_display
    EXPORTING
      i_structure_name = 'KNB1'
    CHANGING
      it_outtab        = gt_knb1
    EXCEPTIONS
      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.
 
  REFRESH: gt_vbak.
  CALL METHOD go_grid2->set_table_for_first_display
    EXPORTING
      i_structure_name = 'VBAK'
    CHANGING
      it_outtab        = gt_vbak    " empty !!!
    EXCEPTIONS
      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.
 
 
  REFRESH: gt_vbap.
  CALL METHOD go_grid3->set_table_for_first_display
    EXPORTING
      i_structure_name = 'VBAP'
    CHANGING
      it_outtab        = gt_vbap    " empty !!!
    EXCEPTIONS
      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.
 
* Link the docking container to the target dynpro
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = syst-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      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.
 
 
* NOTE: dynpro does not contain any elements
  CALL SCREEN '0100'.
* Flow logic of dynpro:
*
*PROCESS BEFORE OUTPUT.
*  MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
*  MODULE USER_COMMAND_0100.
 
 
 
END-OF-SELECTION.
 
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.  " contains push button "ORDERS"
*  SET TITLEBAR 'xxx'.
 
 
* Refresh display of detail ALV list
  CALL METHOD go_grid2->refresh_table_display
*    EXPORTING
*      IS_STABLE      =
*      I_SOFT_REFRESH =
    EXCEPTIONS
      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.
 
 
* Refresh display of detail ALV list
  CALL METHOD go_grid3->refresh_table_display
*    EXPORTING
*      IS_STABLE      =
*      I_SOFT_REFRESH =
    EXCEPTIONS
      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.
 
ENDMODULE.                 " STATUS_0100  OUTPUT
 
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
 
  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.
 
*   User has pushed button "Display Orders"
    WHEN 'ORDERS'.
      PERFORM customer_show_orders.
 
    WHEN 'ORDER_DETAILS'.
      PERFORM order_show_details.
 
    WHEN OTHERS.
  ENDCASE.
 
  CLEAR: gd_okcode.
 
ENDMODULE.                 " USER_COMMAND_0100  INPUT
 
*&---------------------------------------------------------------------*
*&      Form  CUSTOMER_SHOW_ORDERS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM customer_show_orders .
* define local data
  DATA:
    ld_row      TYPE i,
    ls_knb1     TYPE knb1.
 
  CALL METHOD go_grid1->get_current_cell
    IMPORTING
      e_row = ld_row.
 
  READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
  CHECK ( syst-subrc = 0 ).
 
  SELECT        * FROM  vbak INTO TABLE gt_vbak
         WHERE  kunnr  = ls_knb1-kunnr.
 
 
  REFRESH: gt_vbap.
 
 
 
 
ENDFORM.                    " CUSTOMER_SHOW_ORDERS
 
*&---------------------------------------------------------------------*
*&      Form  ORDER_SHOW_DETAILS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM order_show_details .
* define local data
  DATA:
    ld_row      TYPE i,
    ls_vbak     TYPE vbak.
 
  CALL METHOD go_grid1->get_current_cell
    IMPORTING
      e_row = ld_row.
 
  READ TABLE gt_vbak INTO ls_vbak INDEX ld_row.
  CHECK ( syst-subrc = 0 ).
 
  SELECT        * FROM  vbap INTO TABLE gt_vbap
         WHERE  vbeln  = ls_vbak-vbeln.
 
 
ENDFORM.                    " ORDER_SHOW_DETAILS

The context menus are always dynamically generated. Thus, when you right-click on something this raises event CONTEXT_MENU_REQUEST and when you choose a function this raises event USER_COMMAND (the naming of the events is somewhat special for CL_GUI_ALV_GRID).

The following sample report shows how to code a context menu. Instead of dynamically adding the functions to an existing context menu it is also possible to use a static context menu corresponding to a GUI status object.

*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALVGRID_EVENTS_CTXMENU
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
 
REPORT  ZUS_SDN_ALVGRID_EVENTS_CTXMENU.
 
 
 
DATA:
  gd_okcode        TYPE ui_func,
*
  gt_fcat          TYPE lvc_t_fcat,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid.
 
 
DATA:
  gt_knb1          TYPE STANDARD TABLE OF knb1.
 
 
PARAMETERS:
  p_bukrs      TYPE bukrs  DEFAULT '2000'  OBLIGATORY.
 
 
 
*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.
  PUBLIC SECTION.
    CLASS-DATA:
      ms_row     TYPE lvc_s_row.
 
    CLASS-METHODS:
      handle_context_menu_request
        FOR EVENT context_menu_request OF cl_gui_alv_grid
        IMPORTING
          e_object  " type ref to cl_ctmenu
          sender,
 
       handle_user_command
         FOR EVENT user_command OF cl_gui_alv_grid
         IMPORTING
           e_ucomm
           sender.
 
ENDCLASS.                    "lcl_eventhandler DEFINITION
 
 
*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.
 
  METHOD handle_user_command.
*   define local data
    DATA:
      ls_knb1     TYPE knb1,
      ls_col_id   TYPE lvc_s_col.
 
    CHECK ( e_ucomm = 'XD03' ).
 
    READ TABLE gt_knb1 INTO ls_knb1 INDEX ms_row-index.
    CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
 
 
    SET PARAMETER ID 'KUN' FIELD ls_knb1-kunnr.
    SET PARAMETER ID 'BUK' FIELD ls_knb1-bukrs.
 
    CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
 
 
  ENDMETHOD.                    "handle_user_command
 
  METHOD handle_context_menu_request.
*   define local data
    DATA:
      lt_rows    TYPE lvc_t_row.
 
    CLEAR: ms_row.
    CALL METHOD go_grid1->get_selected_rows
      IMPORTING
        et_index_rows = lt_rows.
    READ TABLE lt_rows INTO ms_row INDEX 1.
 
    e_object->add_separator( ).
    CALL METHOD e_object->add_function
      EXPORTING
        fcode       = 'XD03'
        text        = 'Display Customer'
*        ICON        =
*        FTYPE       =
*        DISABLED    =
*        HIDDEN      =
*        CHECKED     =
*        ACCELERATOR =
        .
 
 
 
  ENDMETHOD.                    "handle_context_menu_request
 
ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION
 
 
START-OF-SELECTION.
 
  SELECT        * FROM  knb1 INTO TABLE gt_knb1
         WHERE  bukrs  = p_bukrs.
 
 
 
* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=>screen0
      ratio                       = 90
    EXCEPTIONS
      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
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent          = go_docking
    EXCEPTIONS
      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.
 
* Set event handler
  SET HANDLER:
    lcl_eventhandler=>handle_user_command         FOR go_grid1,
    lcl_eventhandler=>handle_context_menu_request for go_grid1.
 
 
* Build fieldcatalog and set hotspot for field KUNNR
  PERFORM build_fieldcatalog_knb1.
 
 
 
* Display data
  CALL METHOD go_grid1->set_table_for_first_display
    CHANGING
      it_outtab       = gt_knb1
      it_fieldcatalog = gt_fcat
    EXCEPTIONS
      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.
 
 
 
 
* Link the docking container to the target dynpro
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = syst-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      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.
 
 
* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.
* NOTE: no dynpro elements on screen. Flow logic as shown below:
*PROCESS BEFORE OUTPUT.
*  MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
*  MODULE USER_COMMAND_0100.
 
END-OF-SELECTION.
 
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.
 
 
ENDMODULE.                 " STATUS_0100  OUTPUT
 
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
 
  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.
 
 
    WHEN OTHERS.
  ENDCASE.
 
  CLEAR: gd_okcode.
 
ENDMODULE.                 " USER_COMMAND_0100  INPUT
 
 
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG_KNB1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog_knb1 .
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.
 
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'KNB1'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_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.
 
 
*  LOOP AT gt_fcat INTO ls_fcat
*          WHERE ( fieldname = 'KUNNR'  OR
*                  fieldname = 'ERNAM' ).
*    ls_fcat-hotspot = abap_true.
*    MODIFY gt_fcat FROM ls_fcat.
*  ENDLOOP.
 
 
ENDFORM.                    " BUILD_FIELDCATALOG_KNB1

Regards

Uwe

Read only

0 Likes
4,807

Hi,

Can you please help me in getting two ALV's on the same screen side by side.

Read only

0 Likes
4,807

Hello Satish

You can take the sample report ZUS_SDN_TWO_ALV_GRIDS as shown above. Simply make the following changes in order to display the two ALV lists left/right instead of top/bottom:

DATA:
...
"  go_cell_top      TYPE REF TO cl_gui_container,
"  go_cell_bottom   TYPE REF TO cl_gui_container,
  go_cell_left      TYPE REF TO cl_gui_container,
  go_cell_right   TYPE REF TO cl_gui_container,
...
" NOTE: not really necessary but increases readability of the report




* Create splitter container
  CREATE OBJECT go_splitter
    EXPORTING
      parent            = go_docking
"      rows              = 2
"      columns           = 1      " top / bottom
      rows              = 1
      columns           = 2       " left / right
    EXCEPTIONS
      cntl_error        = 1
      cntl_system_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.
 
* Get cell container
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_left.
  CALL METHOD go_splitter->get_container
    EXPORTING
"      row       = 2
"      column    = 1   " top / bottom
      row       = 1
      column    = 2    " left / right
    RECEIVING
      container = go_cell_right.

That's all.

Regards,

Uwe

Read only

Former Member
Read only

Former Member
0 Likes
4,807

Hi frnd,

Just go to SE38

type BCALV* - do F4 - u wll get lots of program to refer.

If u want to see only OO ALV display releted Programs

type BCALV_GRID* and do F4

reward ,

If helps..

Read only

Former Member
0 Likes
4,807

Check out this:

SALV_DEMO_TABLE_REAL_SIMPLE.

Using the class CL_SALV_TABLE you can create an ALV OO display with two instructions:

For example:

DATA: lr_my_ref_to_table TYPE REF TO cl_salv_table.

cl_salv_table=>factory( 
IMPORTING r_salv_table = lr_my_ref_to_table 
EXPORTING t_table = <your_table_to_display> ).

An then call the display method of your instance:

lr_my_ref_to_table->display( ).

.

And that's it.

Hope this helps,

Roby.

Read only

Former Member
0 Likes
4,807

Hello Azra,

Please see the following program.

REPORT zindra_alv1.

&----


  • Global data definitions for ALV

&----


&----


  • Object reference

&----


  • ALV Grid instance reference

DATA: gr_alvgrid TYPE REF TO cl_gui_alv_grid,

  • Custom container instance reference

gr_ccontainer TYPE REF TO cl_gui_custom_container.

&----


  • Internal Table

&----


  • Field catalog table

DATA: gt_fieldcat TYPE lvc_t_fcat,

  • Internal table holding list data

gt_list TYPE STANDARD TABLE OF sflight.

&----


  • Work area

&----


  • Layout structure

DATA: gs_layout TYPE lvc_s_layo,

  • Field catalog structure

gs_fcat TYPE lvc_s_fcat.

&----


  • Variables

&----


DATA: ok_code TYPE sy-ucomm,

save_ok TYPE sy-ucomm,

  • Name of the custom control added on the screen

gv_custom_control_name TYPE scrfname VALUE 'CC_ALV'.

&----


  • Calling the screen where ALV output is displayed

&----


CALL SCREEN 100.

&----


*& Module STATUS_0100 OUTPUT

&----


  • PBO

----


MODULE status_0100 OUTPUT.

  • PF Status

SET PF-STATUS 'MENU'.

  • ALV display

PERFORM display_alv.

ENDMODULE. " STATUS_0100 OUTPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • PAI

----


MODULE user_command_0100 INPUT.

save_ok = ok_code.

CLEAR ok_code.

IF save_ok EQ 'EXIT'.

LEAVE PROGRAM.

ENDIF.

ENDMODULE. " USER_COMMAND_0100 INPUT

&----


*& Form display_alv

&----


  • ALV display

----


FORM display_alv.

PERFORM get_data.

PERFORM create_alv.

ENDFORM. " display_alv

&----


*& Form get_data

&----


  • Fetch data to be displayed in the list

----


FORM get_data.

SELECT * FROM sflight

INTO TABLE gt_list.

ENDFORM. " get_data

&----


*& Form create_alv

&----


  • Create and set or Refresh ALV

----


FORM create_alv.

  • Checking whether an instance of the container (or ALV Grid) exists.

IF gr_alvgrid IS INITIAL.

  • If not, creating and setting ALV for the first display.

  • Creating custom container instance

CREATE OBJECT gr_ccontainer

EXPORTING

container_name = gv_custom_control_name

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5

OTHERS = 6.

  • Creating ALV Grid instance

CREATE OBJECT gr_alvgrid

EXPORTING

i_parent = gr_ccontainer

EXCEPTIONS

error_cntl_create = 1

error_cntl_init = 2

error_cntl_link = 3

error_dp_create = 4

OTHERS = 5.

  • Preparing field catalog.

PERFORM prepare_field_catalog CHANGING gt_fieldcat.

  • Preparing layout structure

PERFORM prepare_layout CHANGING gs_layout.

  • Method to display ALV grid

CALL METHOD gr_alvgrid->set_table_for_first_display

EXPORTING

is_layout = gs_layout

CHANGING

it_outtab = gt_list

it_fieldcatalog = gt_fieldcat

EXCEPTIONS

invalid_parameter_combination = 1

program_error = 2

too_many_lines = 3

OTHERS = 4.

ELSE.

  • If an instance of the container (or ALV Grid) exists, refreshing it.

CALL METHOD gr_alvgrid->refresh_table_display

EXCEPTIONS

finished = 1

OTHERS = 2.

ENDIF.

ENDFORM. " create_alv

&----


*& Form prepare_field_catalog

&----


  • Subroutine to populate field catalog

----


  • <--P_GT_FIELDCAT Table to describe the field catalog

----


FORM prepare_field_catalog CHANGING p_gt_fieldcat TYPE lvc_t_fcat.

  • Generating the field catalog semi automatically

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'

EXPORTING

i_structure_name = 'SFLIGHT'

CHANGING

ct_fieldcat = p_gt_fieldcat

EXCEPTIONS

inconsistent_interface = 1

program_error = 2

OTHERS = 3.

LOOP AT p_gt_fieldcat INTO gs_fcat.

CASE gs_fcat-fieldname.

WHEN 'CARRID'.

gs_fcat-outputlen = '10'.

gs_fcat-coltext = 'Airline Carrier ID'.

MODIFY p_gt_fieldcat FROM gs_fcat.

WHEN 'FLDATE'.

gs_fcat-just = 'C'.

gs_fcat-hotspot = 'X'.

MODIFY p_gt_fieldcat FROM gs_fcat.

ENDCASE.

ENDLOOP.

ENDFORM. " prepare_field_catalog

&----


*& Form prepare_layout

&----


  • Preparing layout structure

----


  • <--P_GS_LAYOUT Layout structure

----


FORM prepare_layout CHANGING p_gs_layout TYPE lvc_s_layo.

p_gs_layout-zebra = 'X' .

p_gs_layout-grid_title = 'Flight Info System'.

p_gs_layout-smalltitle = 'X'.

ENDFORM. " prepare_layout

You can also refer to following URL for very useful info.

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a41...

Award points if useful.

Regards

Indrajit.

Read only

sonu_p2
Active Participant
0 Likes
4,807

Hello Azra,

Check out the code below

PROGRAM ZSAC_DBCLK_ALVOO MESSAGE-ID ZSAC_PUR_MSG.

type-pools : slis.

CONSTANTS : C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'.

DATA: gt_outtab type table of ZSAC_EDIT, wa_gt_outtab like line of gt_outtab.

tables :

ekko, "Purchasing Document Header

ekpo. "Purchasing Document Item

**********************FOR EDITABLE ALV**********************

DATA :g_grid TYPE REF TO cl_gui_alv_grid,

g_custom_container TYPE REF TO cl_gui_custom_container,

gs_layout TYPE lvc_s_layo,

g_max type i value 100,

gte_fieldcat type lvc_t_fcat,

gse_fieldcat like line of gte_fieldcat.

**********************FOR DOCKING CONTAINER LEFT**********************

DATA : dock_left type ref to cl_gui_docking_container,

sd_container type ref to cl_gui_custom_container,

s_grid_dock_left type ref to cl_gui_alv_grid.

***********************FOR DOCKING CONTAINER RIGHT**********************

*

*

*DATA : dock_right type ref to cl_gui_docking_container,

  • sd_container type ref to cl_gui_custom_container,

  • s_grid_dock_right type ref to cl_gui_alv_grid.

DATA : s_container type ref to cl_gui_custom_container,

s_grid type ref to cl_gui_alv_grid,

gt_fieldcat type lvc_t_fcat,

gs_fieldcat like line of gt_fieldcat.

DATA : s_container1 type ref to cl_gui_custom_container,

s_grid1 type ref to cl_gui_alv_grid,

gt_fieldcat1 type lvc_t_fcat,

gs_fieldcat1 like line of gt_fieldcat1.

TYPES : BEGIN OF IT_EKKO_STRUCT,

ebeln TYPE ekko-ebeln, "Purchasing Document Number

bukrs TYPE ekko-bukrs, "Company Code

END OF IT_EKKO_STRUCT.

DATA : IT_EKKO TYPE TABLE OF IT_EKKO_STRUCT,

IT_EKKO_WA LIKE LINE OF IT_EKKO.

DATA: ok_code TYPE sy-ucomm ,

TXT_PURDOC LIKE ekpo-ebeln.

TYPES : BEGIN OF IT_EKPO_STRUCT,

ebeln TYPE ekpo-ebeln,

ebelp TYPE ekpo-ebelp,

matnr TYPE ekpo-matnr,

werks TYPE ekpo-werks,

kunnr TYPE ekpo-kunnr,

bukrs TYPE ekko-bukrs,

END OF IT_EKPO_STRUCT.

DATA : IT_EKPO TYPE TABLE OF IT_EKPO_STRUCT,

IT_EKPO_WA LIKE LINE OF IT_EKPO.

*----


*

  • CLASS Z_MAIN DEFINITION

*----


*

*

*----


*

CLASS Z_MAIN DEFINITION.

PUBLIC SECTION.

METHODS : SELECTION , FIRSTDIS ,SECONDDIS , DOCKING ,EDITABLE_ALV.

METHODS on_dblclick FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row.

METHODS handle_dbclk

FOR EVENT double_click OF cl_gui_alv_grid

IMPORTING e_row.

ENDCLASS. "Z_MAIN DEFINITION

*----


*

  • CLASS Z_MAIN IMPLEMENTATION

*----


*

*

*----


*

CLASS Z_MAIN IMPLEMENTATION.

                      • METHOD FOR SELECTING RECORDS *******************

METHOD SELECTION.

SELECT ebeln ebelp matnr werks kunnr

FROM EKPO

INTO CORRESPONDING FIELDS OF TABLE IT_EKPO

WHERE ebeln = TXT_PURDOC.

SELECT ebeln bukrs

FROM ekko

INTO CORRESPONDING FIELDS OF TABLE it_ekko

WHERE ebeln = TXT_PURDOC.

ENDMETHOD. "SELECTION

                      • DISPLAYING FIRST ALV GRID *******************

METHOD FIRSTDIS.

PERFORM fld_cat.

IF s_container is INITIAL.

CREATE OBJECT s_container

EXPORTING container_name = 'SS_CONTAINER'.

CREATE OBJECT s_grid

EXPORTING i_parent = s_container.

CALL METHOD s_grid->set_table_for_first_display

CHANGING

it_outtab = it_ekko

it_fieldcatalog = gt_fieldcat.

ENDIF.

ENDMETHOD. "FIRSTDIS

                      • DISPLAYING SECOND ALV GRID *******************

METHOD SECONDDIS.

PERFORM fld_cat1.

IF s_container1 is INITIAL.

CREATE OBJECT s_container1

EXPORTING container_name = 'SP_CONTAINER'.

CREATE OBJECT s_grid1

EXPORTING i_parent = s_container1.

CALL METHOD s_grid1->set_table_for_first_display

CHANGING

it_outtab = it_ekpo

it_fieldcatalog = gt_fieldcat1.

ENDIF.

ENDMETHOD. "SECONDDIS

                      • DOUBLE CLICK EVENTS *******************

METHOD on_dblclick.

READ TABLE it_ekko INDEX e_row INTO it_ekko_wa.

LEAVE TO SCREEN 0400.

ENDMETHOD. "on_dblclick

                      • DISPLAYING DOCKING CONTAINER *******************

METHOD DOCKING.

SELECT ebeln ebelp matnr werks kunnr

FROM EKPO

INTO CORRESPONDING FIELDS OF TABLE IT_EKPO.

  • WHERE ebeln = TXT_PURDOC.

SELECT ebeln bukrs

FROM ekko

INTO CORRESPONDING FIELDS OF TABLE it_ekko.

  • WHERE ebeln = TXT_PURDOC.

PERFORM fld_cat.

IF sd_container is INITIAL.

CREATE OBJECT sd_container

EXPORTING

container_name = 'SS_DOCK'

EXCEPTIONS

OTHERS = 1.

ENDIF.

IF dock_left is INITIAL.

CREATE OBJECT dock_left

EXPORTING side = cl_gui_docking_container=>dock_at_left

ratio = 25.

ENDIF.

CREATE OBJECT s_grid_dock_left

EXPORTING i_parent = dock_left.

CALL METHOD s_grid_dock_left->set_table_for_first_display

CHANGING

it_outtab = it_ekpo

it_fieldcatalog = gt_fieldcat.

ENDMETHOD. "DOCKING

********************EDITABLE ALV METHOD ***********

METHOD EDITABLE_ALV.

IF g_custom_container IS INITIAL.

CREATE OBJECT g_custom_container

EXPORTING container_name = 'ALV_EDIT'.

CREATE OBJECT g_grid

EXPORTING i_parent = g_custom_container.

*§1.Set status of all cells to editable using the layout structure.

gs_layout-edit = 'X'.

select * from ZSAC_EDIT into table gt_outtab up to g_max rows.

CALL METHOD g_grid->set_table_for_first_display

EXPORTING i_structure_name = 'zsac_edit'

is_layout = gs_layout

i_bypassing_buffer = space

  • is_variant = ws_f_grid_disvar

  • i_save = ws_c_grid_save

CHANGING it_outtab = gt_outtab.

CALL METHOD g_grid->set_ready_for_input

EXPORTING

i_ready_for_input = 1.

ENDIF.

ENDMETHOD. "EDITABLE_ALV

METHOD handle_dbclk.

READ TABLE it_ekko INDEX e_row INTO it_ekko_wa.

ENDMETHOD. "handle_hotspot_click

ENDCLASS. "Z_MAIN IMPLEMENTATION

*&----


*

*& Module STATUS_0100 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0100 OUTPUT.

ENDMODULE. " STATUS_0100 OUTPUT

*&----


*

*& Module USER_COMMAND_0100 INPUT

*&----


*

  • text

*----


*

MODULE USER_COMMAND_0100 INPUT.

DATA : obj1 type ref to Z_MAIN.

CREATE OBJECT : obj1.

CALL METHOD obj1->SELECTION.

CASE SY-UCOMM.

WHEN 'SEARCH'.

LEAVE TO SCREEN 0300.

WHEN 'EDIT'.

LEAVE TO SCREEN 0600.

WHEN 'DOCK'.

LEAVE TO SCREEN 0500.

WHEN 'TREE'.

LEAVE TO SCREEN 0700.

WHEN 'CANCEL'.

LEAVE PROGRAM.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

*&----


*

*& Module STATUS_0300 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0300 OUTPUT.

SET PF-STATUS 'ALV1'.

CALL METHOD obj1->FIRSTDIS.

SET HANDLER obj1->on_dblclick FOR s_grid.

ENDMODULE. " STATUS_0300 OUTPUT

*&----


*

*& Form fld_cat

*&----


*

  • text

*----


*

FORM fld_cat.

gs_fieldcat-fieldname = 'EBELN'.

gs_fieldcat-tabname = 'IT_EKKO'.

gs_fieldcat-reptext = 'Purchasing Document'.

gs_fieldcat-outputlen = 20.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'BUKRS'.

gs_fieldcat-tabname = 'IT_EKKO'.

gs_fieldcat-reptext = 'Company Code'.

gs_fieldcat-outputlen = 20.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

ENDFORM. "fld_cat

*&----


*

*& Form fld_cat1

*&----


*

  • text

*----


*

FORM fld_cat1.

gs_fieldcat1-fieldname = 'EBELN'.

gs_fieldcat1-tabname = 'IT_EKPO'.

gs_fieldcat1-reptext = 'Purchasing Document'.

gs_fieldcat1-outputlen = 20.

APPEND gs_fieldcat1 TO gt_fieldcat1.

CLEAR gs_fieldcat1.

gs_fieldcat1-fieldname = 'EBELP'.

gs_fieldcat1-tabname = 'IT_EKPO'.

gs_fieldcat1-reptext = 'Item Number'.

gs_fieldcat1-outputlen = 20.

APPEND gs_fieldcat1 TO gt_fieldcat1.

CLEAR gs_fieldcat1.

gs_fieldcat1-fieldname = 'WERKS'.

gs_fieldcat1-tabname = 'IT_EKPO'.

gs_fieldcat1-reptext = 'Plant'.

gs_fieldcat1-outputlen = 20.

APPEND gs_fieldcat1 TO gt_fieldcat1.

CLEAR gs_fieldcat1.

ENDFORM. "fld_cat1

*&----


*

*& Module STATUS_0400 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0400 OUTPUT.

SET PF-STATUS 'ALV2'.

CALL METHOD obj1->SECONDDIS.

ENDMODULE. " STATUS_0400 OUTPUT

*&----


*

*& Module USER_COMMAND_0300 INPUT

*&----


*

  • text

*----


*

MODULE USER_COMMAND_0300 INPUT.

*

ENDMODULE. " USER_COMMAND_0300 INPUT

*&----


*

*& Module USER_COMMAND_0400 INPUT

*&----


*

  • text

*----


*

MODULE USER_COMMAND_0400 INPUT.

ENDMODULE. " USER_COMMAND_0400 INPUT

*&----


*

*& Module STATUS_0500 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0500 OUTPUT.

SET PF-STATUS 'DOCKINGCONTAINER'.

CALL METHOD obj1->DOCKING.

SET HANDLER obj1->handle_dbclk FOR s_grid_dock_left.

ENDMODULE. " STATUS_0500 OUTPUT

*&----


*

*& Form handle_double_click

*&----


*

  • text

*----


*

  • -->IS_ROW_NO text

  • -->I_COLUMN_ID text

*----


*

FORM handle_double_click USING is_row_no TYPE lvc_s_roid

i_column_id TYPE lvc_s_col.

READ TABLE it_ekko INTO it_ekko_wa INDEX is_row_no-row_id.

ENDFORM. "handle_double_click

*&----


*

*& Module STATUS_0600 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0600 OUTPUT.

SET PF-STATUS 'EDITALV'.

CALL METHOD obj1->EDITABLE_ALV.

ENDMODULE. " STATUS_0600 OUTPUT

*&----


*

*& Module USER_COMMAND_0600 INPUT

*&----


*

  • text

*----


*

MODULE USER_COMMAND_0600 INPUT.

case sy-ucomm.

WHEN 'SAVE'.

call method g_grid->check_changed_data.

UPDATE zsac_edit FROM TABLE gt_outtab.

ENDCASE.

ENDMODULE. " USER_COMMAND_0600 INPUT

*&----


*

*& Form EDIT_FIELDCAT

*&----


*

  • text

*----


*

FORM EDIT_FIELDCAT.

gse_fieldcat-fieldname = 'ZEMPID'.

gse_fieldcat-tabname = 'ZSAC_EDIT'.

gse_fieldcat-edit = 'X'.

gse_fieldcat-reptext = 'Employee id'.

gse_fieldcat-outputlen = 20.

APPEND gse_fieldcat TO gte_fieldcat.

CLEAR gse_fieldcat.

gse_fieldcat-fieldname = 'ZPROJNAME'.

gse_fieldcat-tabname = 'ZSAC_EDIT'.

gse_fieldcat-edit = 'X'.

gse_fieldcat-reptext = 'Project Name'.

gse_fieldcat-outputlen = 20.

APPEND gse_fieldcat TO gte_fieldcat.

CLEAR gse_fieldcat.

gse_fieldcat-fieldname = 'ZEMPNAME'.

gse_fieldcat-tabname = 'ZSAC_EDIT'.

gse_fieldcat-edit = 'X'.

gse_fieldcat-reptext = 'Employee Name'.

gse_fieldcat-outputlen = 20.

APPEND gse_fieldcat TO gte_fieldcat.

CLEAR gse_fieldcat.

gse_fieldcat-fieldname = 'ZEMPDES'.

gse_fieldcat-tabname = 'ZSAC_EDIT'.

gse_fieldcat-edit = 'X'.

gse_fieldcat-reptext = 'Employee Designation'.

gse_fieldcat-outputlen = 20.

APPEND gse_fieldcat TO gte_fieldcat.

CLEAR gse_fieldcat.

ENDFORM. "EDIT_FIELDCAT

*&----


*

*& Module STATUS_0700 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0700 OUTPUT.

  • SET PF-STATUS 'xxxxxxxx'.

ENDMODULE. " STATUS_0700 OUTPUT

Reward points if helpful 🙂

Thanks,

Sachin