Erneutes Bestätigen
Erneute Überprüfung bedeutet, die Assert-Funktion für ein Objekt aufzurufen, das sich bereits im Arbeitsspeicher der Engine befindet. Ein Befehl zum erneuten Übergeben entspricht der Ausgabe eines Befehls zum Zurückziehen des Objekts, gefolgt von einem Befehl zum Bestätigen.
Das Objekt wird zunächst zurückgezogen, und alle Aktionen in der Agenda für Regeln, die das Objekt verwenden (in einem Prädikat oder einer Aktion), werden entfernt. Im Anschluss wird das Objekt erneut in den Arbeitsspeicher übergeben und wie ein soeben übergebenes Objekt ausgewertet. Dies bedeutet, dass alle Regeln, die das Objekt in einem Prädikat verwenden, erneut ausgewertet und ihre Aktionen der Agenda entsprechend hinzugefügt werden. Alle Regeln, die zuvor als "true" ausgewertet wurden und nur das -Objekt in ihren Aktionen verwenden, werden der Agenda erneut hinzugefügt.
Wenn ein TypedXmlDocument (TXD) der obersten Ebene erneut überprüft wird, weisen die untergeordneten TXDs, die erstellt werden, wenn die TXD der obersten Ebene anfänglich behauptet wird, je nach Dem Zustand der untergeordneten TXDs unterschiedliche Verhaltensweisen auf. Im Fall eines neuen untergeordneten Knotens oder eines untergeordneten Knotens, der modifiziert ist, was bedeutet, dass mindestens eines seiner Felder in der Richtlinie mithilfe einer Regelaktion geändert wurde, wird eine Assert- oder Reassert-Aktion auf dem untergeordneten Knoten ausgeführt. Alle vorhandenen untergeordneten Knoten, die nicht geändert wurden, verbleiben im Arbeitsspeicher. Im folgenden vereinfachten Beispielszenario wird das Verhalten der untergeordneten Knoten beim erneuten Übergeben ihres übergeordneten Knotens beschrieben.
Angenommen, es gibt derzeit drei TXD-sim Arbeitsspeicher: P, C1, C2und C3. P ist der TXD der obersten Ebene, der übergeordnete Knoten; jeder untergeordnete Knoten enthält ein Feld x.
P
C1 (C1.x = 1)
C2 (C2.x = 1)
C3 (C3.x = 1)
Nehmen wir weiter an, dass die folgenden Vorgänge im Ergebnis einer Regelaktion ausgeführt wurden:
Der Feldwert (x) für C2wird aktualisiert.
C3 wird mithilfe von Benutzercode gelöscht.
Ein zusätzlicher untergeordneter Knoten, D, wird P mithilfe von Benutzercode hinzugefügt.
Hinweis
Bei Vorgängen, von denen die Geschäftsregel-Engine nichts merkt, wird ein Knoten nicht als geändert gekennzeichnet. Dies gilt beispielsweise, wenn Sie einen Knoten in einer externen Anwendung programmgesteuert hinzufügen, löschen oder ändern.
Die neue Darstellung der Objekte im Arbeitsspeicher sieht folgendermaßen aus.
P
C1 (C1.x = 1)
C2 (C2.x = 0)
D
Überprüfen Sie nun P. Die folgenden Punkte fassen das Verhalten der untergeordneten Knoten zusammen:
Knoten C2 wird erneut überprüft, da er nach der Aktualisierung des Felds modifiziert wurde.
Knoten C3 wird aus dem Arbeitsspeicher zurückgezogen.
Knoten D wird im Arbeitsspeicher behauptet.
Knoten C1 bleibt im Arbeitsspeicher unverändert, da er vor der erneuten Überprüfung von P nicht aktualisiert wurde.
Wenn Reassert für einen TypedDataRow ausgegeben wird, wird diese Zeile zurückgezogen und dann in den Arbeitsspeicher eingefügt. Wenn Reassert für die TypedDataTable ausgegeben wird, werden alle zugeordneten TypedDataRowszurückgezogen und dann behauptet.
Alle TypedDataRow-Elemente, die über dataConnection abgerufen werden, werden zurückgezogen. Alle Prädikate, die die DataConnection verwenden, werden dann erneut ausgewertet, sodass die DataConnection erneut zum Erstellen der relevanten TypedDataRows zurückgerufen wird.