Ir para o conteúdo

ALV Editável

Permitir edição direta de dados no ALV.


🔹 Com CL_GUI_ALV_GRID

DATA: lt_sflight TYPE TABLE OF sflight,
      lo_alv     TYPE REF TO cl_gui_alv_grid,
      lt_fieldcat TYPE lvc_t_fcat,
      ls_layout  TYPE lvc_s_layo.

" ... criar container e dados ...

" Marcar campo como editável no fieldcat
LOOP AT lt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fcat>).
  CASE <fs_fcat>-fieldname.
    WHEN 'PRICE' OR 'CURRENCY'.
      <fs_fcat>-edit = 'X'.  " Permitir edição
  ENDCASE.
ENDLOOP.

" Layout para edição
ls_layout-edit = 'X'.

CALL METHOD lo_alv->set_table_for_first_display
  EXPORTING
    is_layout       = ls_layout
  CHANGING
    it_outtab       = lt_sflight
    it_fieldcatalog = lt_fieldcat.

🔹 Validar Dados Editados

" Evento DATA_CHANGED
SET HANDLER handle_data_changed FOR lo_alv.

CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS handle_data_changed
      FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed.
ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_data_changed.
    " er_data_changed contém as alterações
    LOOP AT er_data_changed->mt_good_cells INTO DATA(ls_cell).
      " Validar valor
      IF ls_cell-value < 0.
        MESSAGE 'Preço não pode ser negativo' TYPE 'E'.
      ENDIF.
    ENDLOOP.
  ENDMETHOD.
ENDCLASS.