Получить содержимое из редактируемого ALV
Я разрабатываю отчет, который отображает и редактирует ALV.
Я установил PF-STATUS, добавив кнопку "Процесс". Когда эта кнопка нажата, контент, введенный в ALV пользователем, должен быть извлечен и затем обработан.
Вот как я строю свой ИВЛ:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid "program name
i_callback_user_command = 'USER_COMMAND' "user command subroutine name
i_callback_pf_status_set = 'SUB_PF_STATUS'
it_fieldcat = it_fieldcat
i_save = 'X'
TABLES
t_outtab = it_input
EXCEPTIONS
program_error = 1
OTHERS = 2.
Однако, как я это делаю, поиск идет пустым. Как я могу решить эту проблему?
Ниже у меня есть фрагмент моего кода, когда дело доходит до "Процесс".
IF r_ucomm EQ '&PROC'.
LOOP AT it_input INTO ls_input.
PERFORM process_data USING ls_input.
ENDLOOP.
ENDIF.
2 ответа
После получения экземпляра сетки ALV запустите его метод 'check_changed_data', как в примере ниже.
DATA lo_grid TYPE REF TO cl_gui_alv_grid.
IF r_ucomm EQ '&PROC'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
IF lo_grid IS NOT INITIAL.
lo_grid->check_changed_data( ).
ENDIF.
LOOP AT it_input INTO ls_input.
PERFORM process_data USING ls_input.
ENDLOOP.
ENDIF.
Вы можете создать сетку ALV напрямую, без использования функционального модуля REUSE_ALV_GRID_DISPLAY, используя метод set_table_for_first_display.
DATA go_grid TYPE REF TO cl_gui_alv_grid.
CREATE OBJECT go_grid
EXPORTING
i_parent = cl_gui_custom_container=>default_screen.
go_grid->set_table_for_first_display(
CHANGING
it_outtab = it_input
it_fieldcatalog = it_fieldcat ).
...
IF r_ucomm EQ '&PROC'.
go_grid->check_changed_data( ).
LOOP AT it_input INTO ls_input.
PERFORM process_data USING ls_input.
ENDLOOP.
ENDIF.
Пожалуйста, удалите строку REFRESH it_input. Это удаляет содержимое it_input, поэтому поиск пуст. Вы можете использовать приведенный ниже код без REFRESH it_input
IF r_ucomm EQ '&PROC'.
LOOP AT it_input INTO ls_input.
PERFORM process_data USING ls_input.
ENDLOOP.
ENDIF.