Hallo debianfan,
es gibt 3 Arten von ALV in ABAP:
1) Funktionsbaustein REUSE_ALV_GRID(_DISPLAY)
2) Klasse CL_GUI_ALV_GRID
3) Klasse CL_SALV_TABLE
Nummer 1 und 2 kannst du edtitierbar machen. Nummer 1 durch deine beschriebene Methode, Nummer 2 durch die Methode SET_READY_FOR_INPUT und weitere.
Ich würde Dir grundsätzlich empfehlen, für editierbare ALV die Nummer 2, Klasse CL_GUI_ALV_GRID zu nehmen, das habe ich schon oft mit Erfolg getan. Offiziell unterstützt SAP keine editierbaren ALV. Du kannst du Funktionen aber super nutzen, wenn du weißt, was du machen musst.
Für CL_GUI_ALV_GRID kannst du z. B. folgende Methoden nutzen:
Code: Alles auswählen.
oref_alv_list->register_edit_event(
EXPORTING i_event_id =
cl_gui_alv_grid=>mc_evt_enter ).
oref_alv_list->register_edit_event(
EXPORTING i_event_id =
cl_gui_alv_grid=>mc_evt_modified ).
oref_alv_list->set_ready_for_input(
EXPORTING i_ready_for_input = 1 ).
Nachdem du den Feldkatalog und die Handler definiert hast:
1. Eigenen GUI-Status erstellen und die Speichertaste (Diskette) oben links mit einem User-Command belegen, z. B. 'SAVE'.
2. Wenn der User die Speichertaste drückt, wird eine Methode UPDATE ausgeführt.
3. In dieser Methode stellst du sicher, dass die Änderungen auf dem ALV sich auch auf die interne Tabelle übertragen haben:
Code: Alles auswählen.
oref_alv_list->check_changed_data(
IMPORTING e_valid = alles_ok ).
IF alles_ok <> 'X'.
MESSAGE text-101 TYPE 'I'.
* Fehler beim Verproben von Änderungen auf dem ALV-Grid
RETURN.
ENDIF.
4. Mit dieser internen Tabelle, die durch den User auf dem ALV-Grid geändert wurde, kannst du jetzt ganz normale weiterarbeiten und Datenbankoperationen wie INSERT oder UPDATE machen.
Hier sind noch hilfreiche weitere Links:
http://www.tricktresor.de/blog/alv-editierbar-machen/
http://sapabap-4.blogspot.de/2016/04/ed ... eport.html
Viele Grüße
- as