从ABAP中的ALV检索过滤数据

时间:2017-09-19 10:44:56

标签: abap alv

是否有一种简单的方法可以检索在ALV上还使用过滤器时显示的ALV数据?

使用的ALV是CL_GUI_ALV_GRID的对象。向用户显示时,默认情况下会在其上放置一个过滤器。用户还有一个处理ALV中数据的按钮。即使用户将自己的过滤器放在ALV上,如何确保该过程仅适用于显示的数据?

例如:ALV是从具有10行的itab创建的,但由于ALV上还传递了一个过滤器,因此只显示了8行。按下按钮时,我只想使用当前向用户显示的8行。

我已经尝试为此目的找到一个功能模块,但我只能找到一个适用于ALV中所选行的FM。

**编辑:**此外,还有一个名为get_filtered_entries的方法,但这只会检索那些未显示的条目。使用它对翻译显示的条目非常耗时。 get_filtered_entries

提前致谢。

1 个答案:

答案 0 :(得分:4)

GET_FILTERED_ENTRIES返回排除行索引的表。你只需要跳过处理中的那些。

" Copy original table
DATA(lit_buffer) = it_out[]. 

" Get excluded rows
o_grid->get_filtered_entries(
  IMPORTING
    et_filtered_entries = DATA(lit_index)
).

" Reverse order to keep correct indizes; thnx futu
SORT lit_index DESCENDING.

" Remove excluded rows from buffer
LOOP AT lit_index ASSIGNING FIELD-SYMBOL(<index>).
  DELETE lit_buffer INDEX <index>.
ENDLOOP.

编辑:我稍微调试了cl_gui_alv_grid,似乎根本不存在原始表的过滤版本。对这些行进行过滤,排序,分组并立即转移到单元格表中。看起来几乎不可能在没有性能缺陷的情况下获得显示的行。