Application Development 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: 

4 LEVEL ALV BASED ON DOUBLECLICK

Former Member
0 Kudos

hi friends,

i Want to make 4 level Alv Based on Doubleclick,

Eg.

1 level :- Based On selectionscreen (ALV)

2nd level :- double click on any cell of 1st alv (ALV)

3rd level :- double click on any cell of 2st alv (ALV)

4th level :- double click on any cell of 3rd alv (Call Tranasaction)

i make till second level using class lcl_event_receiver...

i need ur help to go ahead..

thankx..

Swapnil.

1 REPLY 1

Former Member
0 Kudos

Hi Swapnil,

I tried that and got the same in first attempt itself. i am not sure where you got strucked.

Here is the sample code... try this..



REPORT Z195_ALV_LEVELS.
DATA: ispfli TYPE TABLE OF spfli.
DATA: isflight TYPE TABLE OF sflight.
DATA: iscarr TYPE TABLE OF scarr.
DATA: imara TYPE TABLE OF mara.
DATA: xspfli TYPE spfli.
DATA: gr_table TYPE REF TO cl_salv_table.
DATA: gr_table1 TYPE REF TO cl_salv_table.
DATA: gr_table2 TYPE REF TO cl_salv_table.
DATA: gr_table3 TYPE REF TO cl_salv_table.
DATA: gr_functions TYPE REF TO cl_salv_functions_list.
DATA: gr_events TYPE REF TO cl_salv_events_table.
DATA: gr_selections TYPE REF TO cl_salv_selections.
DATA: w_level TYPE sy-index.
*----------------------------------------------------------------------*
* CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS: on_user_command FOR EVENT added_function OF cl_salv_events
    IMPORTING e_salv_function,
    on_double_click FOR EVENT double_click OF cl_salv_events_table
    IMPORTING row column.
ENDCLASS. "lcl_handle_events DEFINITION
DATA: event_handler TYPE REF TO lcl_handle_events.

START-OF-SELECTION.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE ispfli FROM spfli UP TO 100 ROWS.
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = gr_table
    CHANGING
      t_table      = ispfli.
  gr_table->set_screen_status(
  pfstatus = 'SALV_TABLE_STANDARD'
  report = sy-repid
  set_functions = gr_table->c_functions_all ).
  gr_events = gr_table->get_event( ).
  CREATE OBJECT event_handler.
  SET HANDLER event_handler->on_user_command FOR gr_events.
  SET HANDLER event_handler->on_double_click FOR gr_events.
* Set up selections.
  gr_selections = gr_table->get_selections( ).
  gr_selections->set_selection_mode( 1 ). "Single
* Display
  gr_table->display( ).
*----------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_user_command.
* Get the selection rows
    DATA: lr_selections TYPE REF TO cl_salv_selections.
    DATA: lt_rows TYPE salv_t_row.
    DATA: ls_rows TYPE i.
    DATA: message TYPE string.
    CASE e_salv_function.
      WHEN 'MYFUNCTION'.
*        lr_selections = gr_table->get_selections( ).
*        lt_rows = lr_selections->get_selected_rows( ).
*        READ TABLE lt_rows INTO ls_rows INDEX 1.
*        READ TABLE ispfli INTO xspfli INDEX ls_rows.
*        CONCATENATE xspfli-carrid xspfli-connid xspfli-cityfrom xspfli-cityto
*         INTO message SEPARATED BY space.
*        MESSAGE i001(00) WITH 'You pushed the button!' message.
    ENDCASE.
  ENDMETHOD. "on_user_command
  METHOD on_double_click.
    IF w_level EQ 0.
      w_level = 1.
      PERFORM display_2ndlevel.
    ELSEIF w_level EQ 1.
      w_level = 2.
      PERFORM display_3rdlevel.
    ELSEIF w_level EQ 2.
      w_level = 3.
      PERFORM display_4thlevel.
    ELSEIF w_level EQ 3.
      w_level = 4.
      MESSAGE i001(00) WITH 'No further digging is possible'.
    ENDIF.
*    DATA: message TYPE string.
*    DATA: row_c(4) TYPE c.
*    row_c = row.
*    CONCATENATE 'Row' row_c 'Column' column INTO message SEPARATED BY space.
*    MESSAGE i001(00) WITH 'You double-clicked on ' message.
  ENDMETHOD. "on_double_click
ENDCLASS. "lcl_handle_events IMPLEMENTATION
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_2NDLEVEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_2ndlevel .
  SELECT * INTO CORRESPONDING FIELDS OF TABLE isflight FROM sflight UP TO 100 ROWS.
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = gr_table1
    CHANGING
      t_table      = isflight.
  gr_table1->set_screen_status(
  pfstatus = 'SALV_TABLE_STANDARD'
  report = sy-repid
  set_functions = gr_table1->c_functions_all ).
  gr_events = gr_table1->get_event( ).
  CREATE OBJECT event_handler.
  SET HANDLER event_handler->on_user_command FOR gr_events.
  SET HANDLER event_handler->on_double_click FOR gr_events.
* Set up selections.
  gr_selections = gr_table1->get_selections( ).
  gr_selections->set_selection_mode( 1 ). "Single
* Display
  gr_table1->display( ).

ENDFORM.                    " DISPLAY_2NDLEVEL
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_3RDLEVEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_3rdlevel .
  SELECT * INTO CORRESPONDING FIELDS OF TABLE iscarr FROM scarr UP TO 100 ROWS.
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = gr_table2
    CHANGING
      t_table      = iscarr.
  gr_table2->set_screen_status(
  pfstatus = 'SALV_TABLE_STANDARD'
  report = sy-repid
  set_functions = gr_table2->c_functions_all ).
  gr_events = gr_table2->get_event( ).
  CREATE OBJECT event_handler.
  SET HANDLER event_handler->on_user_command FOR gr_events.
  SET HANDLER event_handler->on_double_click FOR gr_events.
* Set up selections.
  gr_selections = gr_table2->get_selections( ).
  gr_selections->set_selection_mode( 1 ). "Single
* Display
  gr_table2->display( ).

ENDFORM.                    " DISPLAY_3RDLEVEL
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_4THDLEVEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_4thlevel .
  SELECT * INTO CORRESPONDING FIELDS OF TABLE imara FROM mara UP TO 100 ROWS.
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = gr_table3
    CHANGING
      t_table      = imara.
  gr_table3->set_screen_status(
  pfstatus = 'SALV_TABLE_STANDARD'
  report = sy-repid
  set_functions = gr_table3->c_functions_all ).
  gr_events = gr_table3->get_event( ).
  CREATE OBJECT event_handler.
  SET HANDLER event_handler->on_user_command FOR gr_events.
  SET HANDLER event_handler->on_double_click FOR gr_events.
* Set up selections.
  gr_selections = gr_table3->get_selections( ).
  gr_selections->set_selection_mode( 1 ). "Single
* Display
  gr_table3->display( ).

ENDFORM.                    " DISPLAY_4THLEVEL