如何修改ALV双击事件 实现任意单元格双击显示行详情
问题根因
原代码仅支持双击CARRID字段触发明细展示,是因为双击事件的处理方法中写死了字段校验逻辑:
CHECK ev_field_name = 'CARRID'.
ABAP中CHECK语句的逻辑是:若后续条件不成立,立刻终止当前方法的执行。这就导致只有双击的字段名匹配CARRID时,才会往下执行读取行数据、弹明细的逻辑,双击其他字段会直接退出方法,不会有任何响应。
修改方式
直接注释或删除上述CHECK校验语句即可,其余逻辑无需调整。修改后的完整可运行代码如下:
CLASS lcl_handle_dc DEFINITION. PUBLIC SECTION. METHODS double_click FOR EVENT double_click OF if_salv_gui_table_display_opt IMPORTING ev_field_name eo_row_data. ENDCLASS. CLASS lcl_handle_dc IMPLEMENTATION. METHOD double_click. DATA: ls_sflight TYPE sflight. * 移除字段限制,任意单元格双击均执行后续逻辑 * CHECK ev_field_name = 'CARRID'. * 读取双击行的全字段数据 eo_row_data->get_row_data( EXPORTING iv_request_type = if_salv_gui_selection_ida=>cs_request_type-all_fields IMPORTING es_row = ls_sflight ). * 展示当前行明细 cl_salv_ida_show_data_row=>display( iv_text = 'Flight Row Info' is_data = ls_sflight ). ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: lr_salv TYPE REF TO if_salv_gui_table_ida, lr_handle TYPE REF TO lcl_handle_dc. cl_salv_gui_table_ida=>create( EXPORTING iv_table_name = 'SFLIGHT' RECEIVING ro_alv_gui_table_ida = lr_salv ). DATA(lr_disp) = lr_salv->display_options( ). * 启用双击功能 lr_disp->enable_double_click( ). CREATE OBJECT lr_handle. SET HANDLER lr_handle->double_click FOR ALL INSTANCES. * 加载显示ALV lr_salv->fullscreen( )->display( ).
效果说明
修改后激活程序运行,双击ALV表格内任意单元格,都会自动读取对应行的完整数据并弹出明细窗口,不再限制触发字段。
内容的提问来源于stack exchange,提问作者Abapito
相关产品推荐
相关产品推荐

