Persistence Interceptor
Ein Persistence Interceptor kann verwendet werden, um auf dem Server weitere Logik auszufĂĽhren, wenn ein Objekt
erstellt
verändert
gelöscht
geladen
partiell geladen
wird. Eine Persistence Interceptor kann mit per anonymer Funktion, einem IPersistenceInterceptor
oder einem Service definiert werden. Dies sieht folgendermassen aus:
ClassBuilder.PersistenceInterceptor<IDataObject>(
PersistenceEventTypes,
(dataObject, context) => {...}
);
ClassBuilder.PersistenceInterceptor<IDataObject, IPersistenceInterceptor<...>>(
PersistenceEventTypes
);
ClassBuilder.PersistenceInterceptor<IDataObject, PersistenceService>(
PersistenceEventTypes,
(dataObject, service, context) => {...}
);
Dabei gibt es folgende PersistenceEventTypes
:
PersistenceEventType | Verhalten |
---|---|
| Wird ausgefĂĽhrt beim Erstellen eines neuen Eintrags, noch bevor er gespeichert wurde. |
| Wird ausgefĂĽhrt beim Erstellen eines neuen Eintrags, nachdem er gespeichert wurde. |
| Wird ausgefĂĽhrt beim Ă„ndern eines bereits bestehendes Eintrags, noch bevor er gespeichert wurde. |
| Wird ausgefĂĽhrt beim Ă„ndern eines bereits bestehendes Eintrags, nachdem er gespeichert wurde. |
| Wird ausgeführt beim Löschen eines Eintrags, noch bevor er gelöscht wurde. |
| Wird ausgeführt beim Löschen eines Eintrags, nachdem er gelöscht wurde. |
| Wird ausgefĂĽhrt beim Laden der Daten eines Eintrags, noch bevor die Daten geholt wurden. |
| Wird ausgefĂĽhrt beim Laden der Daten eines Eintrags, nachdem die Daten geholt wurden. |
| Wird ausgefĂĽhrt beim Laden einer Ladegruppe eines Eintrags, noch bevor die Daten geholt wurden. |
| Wird ausgefĂĽhrt beim Laden einer Ladegruppe eines Eintrags, nachdem die Daten geholt wurden. |
Diese Event Typen können auch kombiniert werden, zum Beispiel kann man folgendermassen einen Event Typ definieren, der vor jedem Speichern ausgeführt wird:
var beforeSave = PersistenceEventTypes.BeforeCreate | PersistenceEventTypes.BeforeUpdate
Parameter
Im Persistence Interceptor Aufruf bekommt man je nach Definition die folgenden Parameter
Datenobjekt: Das betroffene Objekt
Context: Der Kontext der laufenden Operation
Service (optional): Eine Service den man zur Verbindung mit Logik verwenden kann
Mithilfe des Kontexts können gewisse Daten in einen State gespeichert werden, den man im dazugehörigem “After“ Event wieder aus dem Kontext lesen kann. Dieser State ist jedoch nur zwischen einem “Before”- und dem dazugehörigem “After“-Event zugänglich. Folgende Beispiele dazu:
// Im State speichern ("Before" Event)
context.SetState(dataObject, MetaProperty, value);
// Aus dem State holen ("After" Event)
context.TryGetState(dataObject, MetaProperty, out value);
// Property Changed State fĂĽr einzelnes Property speichern ("Before" Event)
context.KeepPropertyChangedStates(dataObject, MetaProperty);
// Oder auch fĂĽr alle Properties auf dem dataObject:
context.KeepAllPropertyChangedStates(dataObject);
// Prüfen ob Property geändert wurde ("Before" Event)
// Kann auch in eimen "After" Event verwendet werden,
// wenn Property im Before event gespeichert wurde
context.PropertyChanged(dataObject, MetaProperty);
// Prüfen ob irgend ein gegebenes Property geändert wurde
context.AnyPropertyChanged(dataObject, params MetaProperty[]);
// Prüfen ob alle gegebene Properties geändert wurden
context.AllPropertiesChanged(dataObject, params MetaProperty[]);
// User, der die Ă„nderung hervorgerufen hat, auslesen
context.TryGetUserIdAndName(dataObject, out userId, out userName);
Â