Methodenaufrufreihenfolge beim Speichern
In ACBSO sind folgende virtuelle Methoden definiert, die im Zusammenhang mit dem Speichervorgang stehen:
protected virtual bool OnSave()
protected virtual Msg OnPreSave()
protected virtual void OnPostSave()
Diese können Sie überschreiben, um auf den Speichervorgang in Ihrem BSO Einfluss zu nehmen. Vergessen Sie beim Überschreiben nicht den base-Auftruf!
Mit der OnSave()-Methode wird der Speichervorgang eingeleitet. Die OnSave()-Methode führt dann eine Serie von Methodenaufrufen durch:
- Aufruf von
protected MsgWithDetails NotifyAllPreSave()
:
"NotifyAllPreSave()" iteriert über alle Geschäftsobjekte, die denselben Datenkontext besitzen und ruft dann die OnPreSave()-Methode auf. Falls diese Methode in einer Ableitung überschrieben wurde und eine Msg-Instanz anstatt eines Null-Wertes zurückgegeben wird, dann wird der Speichervorgang abgebrochen und ein Dialogfenster öffnet sich mit den Fehlermeldungen. Andernfalls geht es mit Schritt 2 weiter: - Aufruf von
public bool ACComponent.ACSaveChanges()
:
Diese Methode ist in ACComponent definiert. Sie ruft auf der virtuellen "IACEntityObjectContext Database"-Eigenschaft die ACSaveChanges-Methode auf. Falls der Speichervorgang nicht erfolgreich war, wird ein Dialogfenster geöffnet und die Fehlermeldungen angezeigt. Andernfalls geht es mit Schritt 3 weiter: - Aufruf von
protected vois NotifyAllPostSave()
:
"NotifyAllPostSave()" iteriert über alle Geschäftsobjekte, die denselben Datenkontext besitzen und ruft dann die OnPostSave()-Methode auf, um alle Geschäftsobjekte über den erfolgreichen Speichervorgang zu informieren.
Methodenaufrufreihenfolge beim Rückgängig machen
In ACBSO sind folgende virtuelle Methoden definiert, die im Zusammenhang mit der Rückgängigmachung stehen:
protected virtual bool OnPreUndoSave()
protected virtual Msg OnPreUndoSave()
protected virtual void OnPostUndoSave()
Diese können Sie überschreiben, um auf die Rückgängigmachung in Ihrem BSO Einfluss zu nehmen. Vergessen Sie beim Überschreiben nicht den base-Auftruf!
Mit der OnUndoSave()-Methode wird die Rückgängig-Aktion eingeleitet. Die OnUndoSave()-Methode führt dann eine Serie von Methodenaufrufen durch:
- Aufruf von
protected MsgWithDetails NotifyAllPreUndoSave()
:
"NotifyAllPreUndoSave()" iteriert über alle Geschäftsobjekte, die denselben Datenkontext besitzen und ruft dann die OnPreUndoSave()-Methode auf. Falls diese Methode in einer Ableitung überschrieben wurde und eine Msg-Instanz anstatt eines Null-Wertes zurückgegeben wird, dann wird der Rückgängigvorgang abgebrochen und ein Dialogfenster öffnet sich mit den Fehlermeldungen. Andernfalls geht es mit Schritt 2 weiter: - Aufruf von
public bool ACComponent.ACUndoChanges()
:
Diese Methode ist in ACComponent definiert. Sie ruft auf der virtuellen "IACEntityObjectContext Database"-Eigenschaft die ACUndoChanges-Methode auf. Falls der Rückgängigvorgang nicht erfolgreich war, wird ein Dialogfenster geöffnet und die Fehlermeldungen angezeigt. Andernfalls geht es mit Schritt 3 weiter: - Aufruf von
protected vois NotifyAllPostUndoSave()
:
"NotifyAllPostUndoSave()" iteriert über alle Geschäftsobjekte, die denselben Datenkontext besitzen und ruft dann die OnPostUndoSave()-Methode auf, um alle Geschäftsobjekte über die erfolgreiche Rückgängigmachung zu informieren.
Vorabprüfung
Im Kapitel für synchrone Methoden haben Sie das Prinzip der IsEnabled-Methoden kennengelernt. IsEnabled-Methoden dienen zur Deaktiverung von UI-Buttons per CommandBinding. Mit dieser Technik kann auch die Speicher- und Rückgängigtaste im Menüband deaktiviert werden. Diese Prüfungslogik sollte durch Überschreiben der virtuellen Methoden
protected virtual bool OnIsEnabledSave()
protected virtual bool OnIsEnabledUndoSave()
implementiert werden. Vergessen Sie beim Überschreiben nicht den base-Auftruf!
Mit dem Aufruf der Methode protected bool NotifyAllIsEnabledSave()
und protected bool NotifyAllIsEnabledUndoSave()
können Sie alle Geschäftsobjekte, die mit demselben Datenbankkontext arbeiten, auf einmal abfragen. Bei der Iteration wird die Methode OnIsEnabledSave() bzw. OnIsEnabledUndoSave() auf jedem Geschäftsobjekt aufgerufen. Ist der Rückgabewert falsch, dann erlaubt ein Geschäftsobjekt die Speicherung bzw. Rückgängigmachung nicht.
Benutzerabfrage forcieren
Falls ein Datenbankkontext geändert wurde und Sie möchten, dass der Benutzer aufgefordert wird zu bestätigen ob der die Änderungen übernehmen oder rückgängig machen will, rufen Sie die Methode public virtual bool ACSaveOrUndoChanges()
auf. Der Rückgabewert der Methode ist wahr, wenn der Benutzer die Speicherung oder das Rückgängigmachen bestätigt hat.