03-18-2009 7:12 AM
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.
03-18-2009 9:03 AM
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