How to make an ALV report respond to a hotspot clicks ? A brief demo on hotspot clicks, double clicks, ALV selections and handling menu actions. For key fields to other documents you can make the report more interactive with drill-down functionality to more detailed information. To respond to a double click (or single click / otspot click) you'll need to set up a method which will be called responding to the actual double click. To do this a local class is added to the program by filling in it's definition and its implementation.
- Define a local (handler) class - lcl_event_manager
- The event manager should have a constructor and a method for handling user-command actions, double click and hotspot click. Each method should be set to respond to an event (respectively: added_function, double_click or click_link)
- The constructor should "set handlers" for the events, which will make the (local) class respond to the actual events
- Each method will be triggered when the event is thrown, and for each method an example processing response is available on the example
- The selection mode for the overall of the ALV was set to 2, multiple selection
- User command processing ('DO_IT') is simulated by typing it directly into the command box (adding a menu into a "ready-to-copy" abap coding example is not possible, so you will have to set your own menu)
- Note that a field should be set to "hotspot" to make the click link setup work, in the example this was done with field matnr
Example: Respond to a double click from a cell on the ALV grid
report z_alv_interactive_demo. class lcl_event_manager definition deferred. data: gt_data type table of mara, gw_data type mara, go_salv type ref to cl_salv_table, go_event_man type ref to lcl_event_manager. * Note - the user interface MAIN_MENU on this program was copied from * SAPLSLVC_FULLSCREEN / STANDARD_FULLSCREEN *----------------------------------------------------------------------- * CLASS lcl_event_manager DEFINITION *----------------------------------------------------------------------- class lcl_event_manager definition. public section. methods: constructor importing r_object type ref to cl_salv_table, 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, on_link_click for event link_click of cl_salv_events_table importing row column. private section. data: go_salv type ref to cl_salv_table. endclass. "lcl_event_manager DEFINITION *----------------------------------------------------------------------- * CLASS lcl_event_manager IMPLEMENTATION *----------------------------------------------------------------------- class lcl_event_manager implementation. method constructor. data: lo_events type ref to cl_salv_events_table. go_salv = r_object. lo_events = go_salv->get_event( ). set handler on_user_command for lo_events. set handler on_double_click for lo_events. set handler on_link_click for lo_events. endmethod. method on_user_command. data: lt_rows type salv_t_row, lv_row type int4, lo_selections type ref to cl_salv_selections. case e_salv_function. when 'DO_IT'. "<= An action from your menu * Get the selected entries lo_selections = go_salv->get_selections( ). lt_rows = lo_selections->get_selected_rows( ). loop at lt_rows into lv_row. read table gt_data index lv_row into gw_data. gw_data-matnr = '*processed*'. modify gt_data index lv_row from gw_data. endloop. go_salv->refresh( ). "Will also display endcase. endmethod. "on_user_command method on_double_click. read table gt_data index row into gw_data. gw_data-matnr = '*doubleclicked*'. modify gt_data index row from gw_data. go_salv->refresh( ). endmethod. "on_double_click method on_link_click. read table gt_data index row into gw_data. gw_data-matnr = '*linkclicked*'. modify gt_data index row from gw_data. go_salv->refresh( ). endmethod. "on_link_click endclass. start-of-selection. select * from mara into table gt_data up to 30 rows. cl_salv_table=>factory( importing r_salv_table = go_salv changing t_table = gt_data ). data: lrf_selections type ref to CL_SALV_SELECTIONS, lrf_columns_table type ref to CL_SALV_COLUMNS_TABLE, lrf_column_table type ref to CL_SALV_COLUMN_TABLE. * Set the selection mode: allow multiple lines to be selected lrf_selections = go_salv->get_selections( ). lrf_selections->set_selection_mode( 2 ). * Set a field to clicklink field: lrf_columns_table = go_salv->get_columns( ). lrf_columns_table->set_optimize( abap_true ). "Always a good idea lrf_column_table ?= lrf_columns_table->get_column( 'MATNR' ). lrf_column_table->set_cell_type( if_salv_c_cell_type=>hotspot ). CREATE OBJECT go_event_man EXPORTING r_object = go_salv. go_salv->display( ).