In einem Objektgenerator sollen:
- Änderungen am Zielobjekt durchgeführt werden
- Änderungen an Unterformuardaten durchgeführt werden
- Unterformulardten selektiv gelöscht werden
- Am Ende ein Statuswechsel stattfinden
Lösung:
GenerationRules (vor Generierung):
- gewünschte Änderungen an Zielobjekt
- Flag zur Identifikation als automatisch generiertes Objekt setzen (als Objektattribut oder ThreadLocal-Variable, siehe auch Regelausführung selektiv ausschalten)
Insert Rules:
- laufen normal ab, Änderungen werden in Zielobjekt übernommen
InsertFinal Rules:
- hier dürfen keine Änderungen am Zielobjekt oder Unterformulardaten gespeichert werden (save oder update Methode), ggf. generierte Objekte über Prüfung des gesetzten Flags ausschließen
GenerateFinalRules:
- hier sollten Änderungen an und das Löschen von Unterformulardaten stattfinden
- ggf. zusätzliche Änderungen am Zielobjekt (für die z.B. eine Id benötigt wird, die am Anfang noch nicht zur Verfügung steht)
- in der vorletzten auszuführenden Regel die Änderungen an Unterformulardaten und Zielobjekt speichern (update/save)
Dies führt zur Ausführung von:
UpdateRules:
- laufen normal ab
- hier kann als letzte Regel das Flag wieder entfernt werden
UpdateFinalRules:
- hier darf ebenfalls kein Update auf das Zielobjekt ausgeführt werden
Letzte GenerateFinalRule:
- Stauswechsel für Zielobjekt auslösen