Извлечение отфильтрованных данных из ALV в ABAP

Существует ли простой способ получения данных ALV, которые отображаются, когда в этом ALV также используются фильтры?

Используемый ALV является объектом CL_GUI_ALV_GRID. Когда он показывается пользователю, по умолчанию в него помещается фильтр. У пользователя также есть кнопка, которая обрабатывает данные в ALV. Как я могу убедиться, что процесс работает только с отображаемыми данными, даже если пользователь помещает свои собственные фильтры в ALV?

Например: ALV создается из itab, который имеет 10 строк, но поскольку в ALV также передан фильтр, отображаются только 8 строк. При нажатии кнопки я хочу работать только с 8 строками, которые в данный момент отображаются пользователю.

Я попытался найти функциональный модуль для этой цели, но я могу найти только FM, который работает с выбранными строками в ALV.

** РЕДАКТИРОВАТЬ:** Кроме того, существует метод, называемый get_filtered_entries, но он извлекает только те записи, которые НЕ отображаются. Использование этого будет довольно трудоемким, чтобы сделать перевод для отображаемых записей. get_filtered_entries

Заранее спасибо.

1 ответ

Решение

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 немного, и не похоже, что фильтрованная версия исходной таблицы вообще существует. Строки фильтруются, сортируются, группируются и сразу переносятся в таблицу ячеек. Похоже, что получить отображаемые строки без недостатка производительности практически невозможно.

Другие вопросы по тегам