Получить содержимое из редактируемого ALV - PullRequest
0 голосов
/ 19 декабря 2018

Я разрабатываю отчет, который отображает и редактирует 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 ]

0 голосов
/ 26 декабря 2018

После извлечения экземпляра сетки 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.
0 голосов
/ 20 декабря 2018

Пожалуйста, удалите строку REFRESH it_input. Это удаляет содержимое it_input, поэтому поиск пуст.Вы можете использовать приведенный ниже код без ОБНОВИТЬ it_input

IF r_ucomm EQ '&PROC'.

 LOOP AT it_input INTO ls_input.
   PERFORM process_data USING ls_input.
 ENDLOOP.

ENDIF.
...