ABAP-ALV自定义全选
在ALV报表中,我们可以通过设置布局LVC_S_LAYO的SEL_MODE和BOX_FNAME属性,来使用系统标准的选择功能。但出于用户需求,开发人员有时需要提供自定义选择按钮,文章给出了考虑过滤器的全选按钮示例。
DEMO
如果是函数式的ALV,首先要定义全局对象GO_ALV,类型为CL_GUI_ALV_GRID,然后通过以下子例程获取ALV对象。
FORM get_alv_object .
CHECK sy-batch = abap_false. "后台执行无法获取ALV对象
IF go_alv IS NOT BOUND.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_alv.
ENDIF.
ENDFORM.
获取ALV对象后,通过以下子例程实现全选或者取消全选。
FORM frm_sel_line USING p_sel TYPE abap_bool.
MODIFY gt_alv FROM VALUE #( sel = p_sel ) TRANSPORTING sel WHERE sel <> p_sel.
"过滤条目不选择
IF p_sel = abap_true.
CALL METHOD go_alv->get_filtered_entries
IMPORTING
et_filtered_entries = DATA(lt_filterf).
LOOP AT lt_filterf INTO DATA(ls_filterf).
READ TABLE gt_alv ASSIGNING FIELD-SYMBOL(<ls_alv>) INDEX ls_filterf.
IF <ls_alv> IS ASSIGNED.
<ls_alv>-sel = abap_false.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.