Ich möcdhte den ALV zur Eingabe von Werten verwenden. Dabei möchte ich immer dann, wenn eine Zeile vom User komplett gefüllt worden ist, eine Prüfung der bereits eingegebenen Werte vornehmen, um ggfs Prüf-Fehler melden zu können.
Meine Frage: Wie geht das im ABAP? Die Events data_changed und data_changed_finished scheinen's nicht zu sein; zumindest kommen die immer dann, wenn die Zeile noch nicht fertig gefüllt ist.
Ich habe den ALV jetzt eingeschränkt, so daß er initial nur noch 1 Zeile hat, aber das Einfügen einer neuen Zeile (bzw. das Drücken des entspr Buttons) scheint keinen toolbar-Event zu werfen. - Oder heißt das Teil nur anders?
Wie du ja bereits festgestellt hast, werden die Datenänderungs-Events beim Verlassen der Zelle bzw. beim Bestätigen mit Enter ausgelöst. Dabei ist die entsprechende Zeile meist noch nicht vollständig gefüllt.
Auch gibt es keine Möglichkeit "Standard"-Funktionscodes der Toolbar im Kundencoding abzufangen.
Für dein Problem gibt es nun mehrere mögliche Herangehensweisen:
1) Die einfachste, weil auch pragmatischste, ist, dass du deine Prüfungen nur einmalig vor dem "Speichern" und komplett für alle eingegebenen Zeilen durchführst.
2) Du prüfst bei den Datenänderungs-Events vorher ob die "Vollständigkeit" für die Prüfung überhaupt gewährleistet ist, sprich ob alle notwendigen Daten für die Prüfung eingegeben wurden.
3) Du baust einen eigenen Funktionscode in die Toolbar ein, der die Prüfung der bereits eingegebenen Zeile durchführt und erst im Falle des Erfolgs eine neue Zeile hinzufügt.
4) Du verwendest kein ALV Grid sondern normale Dynpro-Felder für die Dateneingabe und einen Button "Hinzufügen" der die Daten in das ALV Grid schreibt.
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.
Ich möchte a-d-ts Ausführungen noch etwas ergänzen.
Der Datenänderungsevent wird nicht beim Verlassen der Zelle sondern beim Betreten einer anderen Zelle ausgelöst. Das ist zwar fast das Gleiche - aber eben nicht ganz.
Außerdem kann man die meisten "Standard"-Funktioncodes der Toolbar auch abfangen - man muss dazu auf die Events "BEFORE_USER_COMMAND" bzw. "AFTER_USER_COMMAND" reagieren.
Allerdings gilt das nicht - wie schon von dir bemerkt - für die Zeilenhinzufügebuttons