写这篇博文的时候,问题应该没有得到圆满的解决,只是用一种变通的方式解决的,不知道园子里的同学有没有更好的解决方式。
问题描述:当ALV处于编辑状态的时候,在ALV的顶部有标准按钮出现,如insert row 、delete row等。在用户点击delete row的时候,希望后台给出一个提示,确认用户需要删除该记录。现在的问题是,用标准的ALV事件无法扑捉到delete row按钮的触发时机,标准的ALV事件只能扑捉到自定义按钮的事件。
解决思路:屏蔽掉标准按钮delete row ,添加一个自定义按钮,在自定义按钮中扑捉事件。
实现方法:
1、屏蔽掉标准按钮
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table . lo_interfacecontroller = wd_this->wd_cpifc_alv_comp( ). DATA lv_value TYPE REF TO cl_salv_wd_config_table. lv_value = lo_interfacecontroller->get_model( ).
DATA: lf_functions TYPE salv_wd_t_function_std_ref, lf_function TYPE REF TO cl_salv_wd_function_std, wa_function LIKE LINE OF lf_functions. *删除标准的删除按钮 lf_functions = lv_value->if_salv_wd_function_settings~get_functions_std( ). LOOP AT lf_functions INTO wa_function. IF wa_function-id = 'SALV_WD_INPUT_DELETE'. lf_function = lv_value->if_salv_wd_function_settings~get_function_std( 'SALV_WD_INPUT_DELETE' ). lf_function->set_visible( cl_wd_uielement=>e_visible-none ). ENDIF. ENDLOOP.
2、添加自定义按钮
lv_function = lv_value->if_salv_wd_function_settings~GET_FUNCTION( id = 'DELETE' ). IF lv_function IS INITIAL . * create button object CREATE OBJECT lr_button_delete. * set text for button lr_button_delete->set_text( 'Delete Row' ). * set function id lv_function = lv_value->if_salv_wd_function_settings~create_function( id = 'DELETE' ). * add button to toolbar lv_function->set_editor( lr_button_delete ). * set visible: 01-hide;02-display lv_function->set_visible( '02' ).
3、触发自定义按钮事件
a、添加ALV标准事件
其中ALV_COMP为我定义的ALV实例名。
b、添加代码
该方法的参数形如:
IF r_param->id = 'DELETE'.
……添加自己的代码
endif.
总结:该方法不算很好,写出来是想看看园子里面有没有更好解决方案。
转载于:https://www.cnblogs.com/sodmecai/archive/2012/04/18/2455390.html
相关资源:JAVA上百实例源码以及开源项目