Später löschen
Siehe auch: Änderungen später speichern
Ereignisaktion - Kurzfassung
Zweck: Merkt eine Entität zum Löschen beim Abschluss der aktuellen Transaktion vor.
Die Ereignisaktion Später löschen legt für das aktuelle Bezugsobjekt innerhalb der Ereignisbehandlung eine Vormerkung zum Löschen an.
Beim Abschluss der Transaktion wird die betreffende Entität daraufhin gelöscht, sofern sie überhaupt bzw. noch existiert.
►HINWEIS◄ Für ein Bezugsobjekt, das noch nie gespeichert wurde, hat das Ausführen von Später löschen in der Regel keinen Effekt. Im Kontext einer Erfassungsmaske, die direkt nach dem Ausführen von "Neu" oder "Kopieren" ein volatiles Eingabeobjekt bereitstellt, kann dieses durch den Aufruf einer Ereignisbehandlung mit der Ereignisaktion Später löschen also nicht etwa "verworfen" werden.
Definition des Bezugsobjekts
Das aktuelle Bezugsobjekt ist im einfachsten Fall die durch den Datenkontext der Ereignisbehandlung bestimmte Entität.
Allerdings gibt es auch Ereignisaktionen (z. B. Ausführen mit oder Für jeden Eintrag wiederholen (Schleife)), die das aktuelle Bezugsobjekt zur Laufzeit vorübergehend übersteuern können. Die Konfiguration der Ereignisaktion sieht dabei jeweils einen definierten Block von Ereignisaktionen vor, die im Kontext des abweichenden Bezugsobjekts ausgeführt werden sollen. Zur Laufzeit gilt für diese Ereignisaktionen das abweichende Bezugsobjekt als aktuelles Bezugsobjekt, wie ggf. über den Wert der Variablen entity nachvollzogen werden kann. Auch die Ereignisaktion Später löschen bezieht sich innerhalb eines solchen Aktionsblocks ausschließlich auf die vorübergehend als Bezugsobjekt definierte Entität.
Innerhalb einer Ereignisaktion, die ein abweichendes Bezugsobjekt vorsieht, können in der Regel Wertauflöser eingesetzt werden, um ein konkretes Bezugsobjekt zu definieren:
Eventuell kann das Datenobjekt einer Entität direkt über eine Variable oder ein Objekt-Feld aufgelöst werden.
Oft muss auch der Wertauflöser Eingabeobjekt (Typsicher) verwendet werden, z. B. um das Datenobjekt einer Entität ausgehend von einer Referenz auf dessen ID (id) zu beschaffen (u. a. Verknüpfter Entitätstyp bzw. Verknüpfter Positionstyp).
►WICHTIG◄ Die Ereignisaktion Später löschen sollte nur mit eigenständigen Entitäten als Bezugsobjekt ausgeführt werden und z. B. nicht mit Attributen oder Positionen von Geschäftsobjekten. Zur Laufzeit findet keine entsprechende Prüfung statt und das Ausführen der Ereignisaktion für ein Bezugsobjekt, das eigentlich (interaktiv) nicht eigenständig gespeichert werden kann, führt möglicherweise zu unerwarteten Ergebnissen beim Abschluss der Transaktion.
Vormerkung zum Löschen
Die Vormerkung zum Löschen berücksichtigt den zum Zeitpunkt der Ausführung der Ereignisaktion Später löschen anwendbaren Anmeldekontext (Firma, Rolle, Benutzer), der zur Laufzeit durch die Ereignisaktion Ausführen als temporär abweichend von der aktuellen Sitzung definiert sein kann.
Wird die Ereignisaktion Später löschen innerhalb derselben Transaktion mehrfach für dasselbe Bezugsobjekt ausgeführt, berücksichtigt die Vormerkung ausschließlich den Anmeldekontext der letzten Ausführung.
Dieser Anmeldekontext gibt den Ausschlag für die Prüfung auf Berechtigungen zum Löschen des Bezugsobjekts.
Dass das Löschen nicht unmittelbar durch das Ausführen der Ereignisaktion Später löschen ausgelöst wird, bedingt außerdem folgende Effekte:
Wenn nach dem Ausführen von Später löschen für dieselbe Transaktion ein Rollback (durch eine Abbrechen oder eine "echte" Process Exception) ausgelöst wird, entfällt das "später Löschen" und die betreffende Entität bleibt erhalten.
Der Zeitpunkt der Ausführung der Ereignisaktion für ein bestimmtes Bezugsobjekt innerhalb derselben Transaktion ist unerheblich. Bis zum Abschluss der Transaktion besteht (innerhalb und außerhalb der Transaktion) Zugriff auf das zu löschende Bezugsobjekt.
Das wiederholte Ausführen der Ereignisaktion für dasselbe Bezugsobjekt innerhalb derselben Transaktion ist wirkungslos, außer wenn dabei unterschiedliche Anmeldekontexte verwendet werden (s. o.).
Ausführen des Löschens
Die Vormerkung zum Löschen wird erst mit dem Abschluss der laufenden Transaktion berücksichtigt. Sofern eines der vorgemerkten Bezugsobjekte durch die Transaktion nicht ohnehin gelöscht wurde, wird dann versucht dieses explizit zu löschen. Falls dieser Versuch fehlschlägt, weil eine Fehlermeldung auftritt, gilt die Transaktion insgesamt als Fehlschlag und ein Rollback wird ausgeführt. Diesbezüglich sind die folgenden Aspekte zu bedenken:
Der im Zuge der Vormerkung anwendbare Anmeldekontext (s. o.) muss über die Berechtigung zum "Löschen" des Bezugsobjekts verfügen.
Das Ausführen der Ereignisaktion Später löschen im Try-Block einer Try-Catch-Aktion führt nicht dazu, dass Fehler abgefangen werden, die erst "später" (beim Löschen) auftreten.
►HINWEISE◄
Da im Rahmen von Tests das Löschen von Objekten generell nicht unterstützt wird, zeigt die Ereignisaktion Später löschen im Testmodus keinerlei Wirkung.
Falls innerhalb derselben Transaktion für dasselbe Bezugsobjekt nicht nur die Ereignisaktion Später löschen sondern auch Änderungen später speichern ausgeführt wurde, bestehen beim Abschluss der Transaktion für das Bezugsobjekt Vormerkungen zum Speichern und zum Löschen. Dann entfällt das Speichern komplett und zwar auch in dem Sonderfall, dass ein "volatiles" Bezugsobjekt anliegt, also eines, das nicht gelöscht werden kann, weil es noch nie gespeichert wurde.
Beispiel
Wenn eine beliebige Entität gelöscht wird, sollen automatisch auch alle Dokumente gelöscht werden, die dieser Entität zugewiesen sind.
Konfiguration:
Eine Ereignisbehandlung für das Auslösende Ereignis "Löschen" wird wie rechts abgebildet konfiguriert:
Wenn alle relevanten Dokumente eine Vormerkung zum Löschen erhalten haben, wird die Transaktion abgeschlossen. Erst dann verschwinden die als Eingabewert der Ereignisbehandlung übergebene Entität und alle zugewiesenen Dokumente wirklich aus der Datenbank. ►HINWEIS◄ Es wird vorausgesetzt, dass im Anmeldekontext für alle relevanten Dokumente mindestens die Berechtigung zum "Lesen" (für die Suche (Ereignisaktion)) und zum "Löschen" gegeben ist. Falls die Suche (Ereignisaktion) mindestens ein Dokument zurückgibt, für das "Lesen" zulässig aber "Löschen" nicht zulässig ist, tritt beim Abschluss der Aktion ein Fehler auf, der einen Rollback der Transaktion auslöst. Dann ist das Löschen für alle Dokumente und die Entität selbst unwirksam.
|
|
Die oben nur zugeklappt dargestellte Suche (Ereignisaktion) sollte wie rechts abgebildet konfiguriert werden:
|
|