So auch hier. Nachdem ich den letzten Artikel geschrieben hatte lief alles so wie immer und war bestens!
Nachdem ich heute den Code ein wenig refaktorieren wollte, entwarf ich eine viel einfachere und wirkungsvollere Methode (was normalerweise nicht das Ziel eines Refactorings sein sollte!):
Alles was man nun noch benötigt ist ein
KEY-EXIT in der Startmaske:
COPY ('TRUE', 'GLOBAL.EXIT_IMMEDIATE');
EXIT_FORM (no_validate);
und ein WHEN-FORM-NAVIGATE in allen anderen Masken
DEFAULT_VALUE ('FALSE', 'GLOBAL.EXIT_IMMEDIATE');
IF :GLOBAL.EXIT_IMMEDIATE = 'TRUE' THEN
EXIT_FORM (no_validate);
END IF;
Diese Technik arbeitet mit einer Kettenreaktion. Jede geschlossene Maske lässt den Fokus auf eine noch geöffnete Maske überspringen, in der dann der WHEN-FORM-VNAVIGATE ausgeführt wird. Diese Maske wird dann auch wieder geschlossen usw... Dies geschieht, da die globale Variable AUTOCLOSE auf TRUE gesetzt wurde.
Nach der letzten Maske ist somit die gesamte Applikation beendet und wir haben das Ziel erreicht, dass wir zu Beginn beabsichtigten.
Wenn einige dieser Masken weitere Masken per Call_Form starten, dann benötigt man hier dem WHEN-WINDOW-ACTIVATED als Event, da der WHEN-FORM-NAVIGATE nicht zündet, wenn der Fokus an die Maske zurückübermittelt wird.
Das ist nun mit Abstand die einfachste Lösung dieses Problems, die ich kenne?
Viel Spass damit
Gerd
Keine Kommentare:
Kommentar veröffentlichen