背景:报表ALV显示数据后,需要将过滤后的数据推送到另一个系统。
实现:通过类CL_GUI_ALV_GRID的方法GET_FILTERED_ENTRIES获取被过滤掉的内表数据行号,筛选后的ALV内表数据=内表数据-被过滤掉的内表数据。
DATA: lt_filter TYPE lvc_t_fidx,
ls_filter TYPE int4.
DATA: lo_grid TYPE REF TO cl_gui_alv_grid,
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
CALL METHOD lo_grid->get_filtered_entries
IMPORTING
et_filtered_entries = lt_filter.
CASE e_ucomm.
WHEN 'SELALL'.
CLEAR gs_item.
LOOP AT gt_item INTO gs_item.
CLEAR ls_filter.
READ TABLE lt_filter INTO ls_filter WITH KEY table_line = sy-tabix.
IF sy-subrc EQ 0.
gs_item-sel = 'X'.
MODIFY gt_item FROM gs_item.
CLEAR gs_item.
CLEAR ls_filter.
ENDIF.
ENDLOOP.
WHEN 'DELALL'.
CLEAR gs_item.
LOOP AT gt_item INTO gs_item.
CLEAR ls_filter.
READ TABLE lt_filter INTO ls_filter WITH KEY table_line = sy-tabix.
IF sy-subrc EQ 0.
CLEAR gs_item-sel.
MODIFY gt_item FROM gs_item.
CLEAR gs_item.
CLEAR ls_filter.
ENDIF.
ENDLOOP.
ENDCASE.