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( ).
