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