Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können die Funktion Zurückziehen verwenden, um Objekte aus dem Arbeitsspeicher des Geschäftsregelmoduls zu entfernen. In den folgenden Absätzen wird das Verhalten beschrieben, das mit dem Zurückziehen von Entitäten verschiedener Typen aus dem Arbeitsspeicher des Regelmoduls verknüpft ist.
.NET-Objekte
Ein .NET-Objekt wird mithilfe der Zurückziehen-Funktion in einer Richtlinie zurückgezogen. Diese Funktion ist im Business Rule Composer als Funktionsvokabularelement verfügbar: Ziehen Sie die Klasse (nicht die Assembly oder Methode) in den Parameter "Zurückziehen" .
Hinweis
Wenn Sie eine Methode in die Retract-Funktion ziehen, versucht die Engine, das von der Methode zurückgegebene Objekt zurückzuziehen.
Durch das Zurückziehen eines .NET-Objekts wird es aus dem Arbeitsspeicher des Regelmoduls entfernt und hat die folgenden Auswirkungen:
Regeln, die das Objekt in einem Prädikat verwenden, haben ihre Aktionen aus der Tagesordnung entfernt (sofern vorhanden).
Aktionen in der Agenda, die die Objekte verwenden, werden aus der Agenda entfernt.
Hinweis
Andere Aktionen, die sich weiter oben auf der Tagesordnung befinden, wurden möglicherweise bereits ausgeführt, bevor die Zurückziehen-Funktion aufgerufen wurde.
Das Objekt wird vom Modul nicht mehr ausgewertet.
TypedXmlDocument
Sie können entweder das ursprüngliche TypedXmlDocument zurückziehen, das in die Engine bestätigt wurde, oder eines der untergeordneten TypedXmlDocument-Elemente aus einem Knoten des übergeordneten XmlDocument-Elements zurückziehen.
Mit dem folgenden XML-Code als Beispiel können Sie entweder das TypedXmlDocument-Objekt zurücknehmen, das der Bestellung zugeordnet ist, oder eines oder beide der TypedXmlDocument-Objekte, die der Bestellposition zugeordnet sind.
<order>
<orderline customer="Joe" linenumber="001">
<product name="router" quantity="10" cost="550" />
</orderline>
<orderline customer="Jane" linenumber="002">
<product name="switch" quantity="1" cost="300" />
</orderline>
</order>
Um das Order-Objekt zurückzuziehen, ziehen Sie den obersten Knoten für das Schema im XML-Schemata-Faktenbereich. Dieser Knoten endet in ".xsd" und stellt den Dokumentstammknoten dar (nicht den Dokumentelementknoten); es verfügt über einen "/"-Selektor, der sich auf das ursprüngliche TypedXmlDocument bezieht. Wenn das übergeordnete TypedXmlDocument-Objekt zurückgezogen wird, werden alle TypedXmlDocument-Instanzen, die dem TypedXmlDocument zugeordnet sind (alle TypedXmlDocument-Instanzen, die durch Aufrufen der Assert-Funktion basierend auf den in der Richtlinie verwendeten Selektoren erstellt wurden) aus dem Arbeitsspeicher entfernt.
Um nur ein einzelnes untergeordnetes TypedXmlDocument (d. h. eine Orderline) zurückzuziehen, können Sie diesen Knoten aus dem XML-Schemabereich in die Zurückziehen-Funktion ziehen. Es ist wichtig zu beachten, dass alle TypedXmlDocuments dem TypedXmlDocument der obersten Ebene zugeordnet sind, das ursprünglich bestätigt wurde, und nicht mit dem TypedXmlDocument, das darüber in der XML-Strukturhierarchie angezeigt wird. Das Produkt ist z. B. ein TypedXmlDocument unterhalb des Orderlineobjekts; daher würde sie der Reihenfolge TypedXmlDocument zugeordnet und nicht mit der Orderline TypedXmlDocument. In den meisten Fällen ist diese Unterscheidung nicht wichtig. Wenn Sie das Bestellobjekt jedoch zurückziehen, werden auch die Bestellzeile und Produktobjekte zurückgezogen. Wenn Sie das Orderlineobjekt zurückziehen, wird nur dieses Objekt zurückgezogen und nicht das Produktobjekt.
Die Engine arbeitet nur mit Objektinstanzen (TypedXmlDocuments), die sie erstellt hat, als das TypedXmlDocument initial angegeben wurde. Wenn Sie zusätzliche Knoten erstellen, z. B. gleichgeordnete Knoten zu einem Knoten, der über einen Selektor in der Richtlinie ausgewählt wurde, werden diese Knoten nicht in den Regeln ausgewertet, es sei denn, es werden TypedXmlDocuments für sie erstellt und bestätigt. Durch das Übertragen dieser neuen TypedXmlDocuments auf niedrigerer Ebene werden sie in Regeln ausgewertet, aber das TypedXmlDocument auf oberster Ebene kennt sie nicht. Wenn das TypedXmlDocument auf oberster Ebene zurückgezogen wird, wird das neue, unabhängig dargestellte TypedXmlDocument nicht automatisch gelöscht. Wenn neue Knoten erstellt werden, ist es in der Regel am einfachsten, das vollständige XmlDocument zurückzuziehen und erneut zu erstellen.
Die TypedXmlDocument-Klasse unterstützt eine Reihe nützlicher Methoden, die innerhalb eines benutzerdefinierten .NET-Elements als Teil einer Aktion aufgerufen werden können. Dazu gehört die Möglichkeit, den XmlNode abzurufen, der dem TypedXmlDocument oder dem übergeordneten TypedXmlDocument zugeordnet ist.
GetypteDatentabelle
Sie können einzelne TypedDataRow-Elementeoder die gesamte TypedDataTable zurückziehen. Wenn Sie eine Tabelle zurückziehen, werden alle enthaltenden Zeilen aus dem Arbeitsspeicher zurückgezogen.
Um die gesamte TypedDataTable zurückzuziehen, müssen Sie eine Hilfsfunktion verwenden, um auf die Parent-Eigenschaft in TypedDataRow zuzugreifen, z. B.:
Retract(MyHelper.GetTypedDataTable(TypedDataRow))
In der vorherigen Aktion würden Sie die Tabelle in TypedDataRow ziehen. In GetTypedDataTable würden Sie den Wert von TypedDataRow.Parent zurückgeben.
Wie bei TypedXmlDocuments, wenn Sie zusätzliche TypedDataRows für dieselbe DataTable nach der Bestätigung der TypedDataTable bestätigen, werden sie als einzelne Entitäten behandelt und das Zurückziehen der TypedDataTable führt nicht zum Zurückziehen dieser zusätzlichen TypedDataRows. Nur die TypedDataRow-Elemente, die in der TypedDataTable enthalten waren, als sie festgestellt wurde, werden zurückgezogen.
DataConnection
Wenn eine DataConnection zurückgezogen wird, werden alle TypedDataRow-Elemente, die aus der Datenbank über die abfrage abgerufen werden, die von DataConnection erstellt wurde, aus dem Arbeitsspeicher zurückgezogen. Die DataConnection selbst wird auch zurückgenommen, was bedeutet, dass keine TypedDataRow-Elemente mehr über DataConnection abgerufen werden (d. h. durch die Verwendung von DataConnection in anderen Prädikaten oder Aktionen).
Bei Verwendung einer DataConnection führt jede Rücknahmeoperation eines einzelnen TypedDataRow-Elements dazu, dass die Engine in einen inkonsistenten Zustand gerät. Daher sind Vorgänge für einzelne TypedDataRow-Elemente, die einem DataConnection zugeordnet sind, nicht zulässig. Wenn Sie die Tabelle (mithilfe des DataConnection-Parameters ) in die Zurückziehen-Funktion ziehen, ziehen Sie die DataConnection zurück.