In Zeiten von Klassen und generischem Coding wirken die Tabellenpflege und ihre Zeitpunkte wie Konstruktionen aus der tiefsten Steinzeit. (Zumindest für mich)
Aber nichtsdestotrotz werden sie noch verwendet und daher musste ich mich wohl oder übel auch darin einarbeiten.
Hier meine Erfahrungen damit:
Generell ist aufzupassen ob ein Zeitpunkt mehrfach oder nur einmal aufgerufen wird und ob man die Daten der Anzeige (EXTRACT) oder die Gesamtmenge (TOTAL) bearbeiten möchte.
Am Besten nach Anlage der Form-Routine einen Break-Point einfügen und einmal aufrufen. Mit F7 zurück zur Aufrufstelle, dann kann man sich ein Bild davon machen wie man die jeweilige Form-Routine implementieren muss.
Hier zwei Codeschnippsel dazu, die ich immer wieder kopiere und entsprechend anpasse:
Die Daten die gespeichert werden sollen verändern
Code: Alles auswählen.
LOOP AT total.
MOVE <vim_total_struc> TO workarea.
IF ...
* modifizieren
<action> = aendern.
ENDIF.
IF <action> NE original.
* Daten speichern
MOVE workarea TO <vim_total_struc>.
MODIFY total.
* Anzeige mofizieren
READ TABLE extract WITH KEY <vim_xtotal_key>.
IF sy-subrc EQ 0.
MOVE workarea TO <vim_extract_struc>.
MODIFY extract INDEX sy-tabix.
ENDIF.
ENDIF.
ENDLOOP.
Abbrechen des Speicher Vorgangs
Code: Alles auswählen.
LOOP AT extract.
READ TABLE total WITH KEY <vim_xextract_key>.
IF sy-subrc EQ 0.
MOVE <vim_total_struc> TO workarea.
IF ....
vim_abort_saving = abap_true.
"oder MESSAGE e....
ENDIF.
ENDLOOP.
CLEAR sy-subrc. "GANZ WICHTIG!!! <-- Danach wird im Standard nämlich abgefragt und vim_abort_saving würde ignoriert werden
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.
ECC: 6.18
Basis: 7.50