Auf Englisch lesen

Freigeben über


Zurückziehen

Sie können die Funktion Zurückziehen verwenden, um Objekte aus dem Arbeitsspeicher der Geschäftsregel-Engine zu entfernen. In den folgenden Abschnitten wird beschrieben, wie sich das Zurückziehen verschiedener Entitätstypen aus dem Arbeitsspeicher der Geschäftsregel-Engine auswirkt.

.NET-Objekte

Ein .NET-Objekt wird mithilfe der Funktion Retract in einer Richtlinie zurückgezogen. Diese Funktion ist im Business Rule Composer als Functions-Vokabularelement verfügbar: Ziehen Sie die Klasse (nicht die Assembly oder Methode) in den Parameter Retract.

Hinweis

Wenn Sie eine Methode in die Retract-Funktion ziehen, versucht die Engine, das von der -Methode zurückgegebene Objekt zurückzuziehen.

Das Zurückziehen eines .NET-Objekts aus dem Arbeitsspeicher der Geschäftsregel-Engine hat die folgenden Auswirkungen:

  • Im Falle von Regeln, die das Objekt in einem Prädikat verwenden, werden die Aktionen der Regeln aus der Agenda entfernt (sofern in der Agenda Aktionen vorhanden sind).

  • Aktionen in der Agenda, die die Objekte verwenden, werden aus der Agenda entfernt.

    Hinweis

    Andere Aktionen, die weiter oben auf der Agenda stehen, wurden möglicherweise bereits ausgeführt, bevor die Funktion Zurückziehen aufgerufen wurde.

  • Das Objekt wird von der Engine nicht länger ausgewertet.

TypedXmlDocument

Sie können entweder das ursprüngliche TypedXmlDocument , das bestätigt wurde, in die Engine zurückziehen oder eines der untergeordneten TypedXmlDocument-Elemente, die von einem Knoten des übergeordneten XmlDocument erstellt wurden, zurückziehen.

Anhand des folgenden XML-Beispiels können Sie entweder das typedXmlDocument , das der Reihenfolge zugeordnet ist, oder eines oder beide der TypedXmlDocument-Elementezurückziehen, die der Orderline 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>  

Zum Zurückziehen des "order"-Objekts würden Sie den obersten Knoten für das Schema in den Bereich XML Schemas Fact ziehen. Dieser Knoten endet mit ".xsd" und stellt den Stammknoten des Dokuments dar (nicht den Dokumentelementknoten); es verfügt über einen "/"-Selektor, der auf das anfängliche TypedXmlDocument verweist. Wenn das übergeordnete TypedXmlDocument zurückgezogen wird, werden alle TypedXmlDocument-Instanzen , die dem TypedXmlDocument zugeordnet sind (alle TypedXmlDocument-Instanzen, die durch Aufrufen der Assert-Funktion basierend auf selektoren erstellt wurden, die in der Richtlinie verwendet werden) aus dem Arbeitsspeicher entfernt.

Wenn Sie nur ein einzelnes untergeordnetes TypedXmlDocument (also eine Orderline) zurückziehen möchten, können Sie diesen Knoten aus dem Bereich XML-Schemas in die Funktion Retract ziehen. Es ist wichtig zu beachten, dass alle TypedXmlDocument-Elementedem ursprünglich bestätigten TypedXmlDocument der obersten Ebene und nicht dem TypedXmlDocument zugeordnet sind, das darüber in der XML-Strukturhierarchie angezeigt wird. Beispielsweise ist product ein TypedXmlDocument unterhalb des Orderline-Objekts; Daher wäre es der Reihenfolge TypedXmlDocument und nicht der Orderline TypedXmlDocument zugeordnet. In den meisten Fällen ist dieser Unterschied nicht von Bedeutung. Wenn Sie das "order"-Objekt jedoch zurückziehen, werden die "orderline"- und "product"-Objekte ebenfalls zurückgezogen. Wenn Sie das "orderline"-Objekt zurückziehen, wird nur dieses Objekt zurückgezogen, und nicht das "product"-Objekt.

Die Engine arbeitet nur mit und verfolgt Objektinstanzen (TypedXmlDocuments) nach, die sie erstellt hat, als das TypedXmlDocument anfänglich bestätigt 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 Regeln ausgewertet, es sei denn , TypedXmlDocumentwird für sie erstellt und bestätigt. Durch die Durchsetzung dieser neuen TypedXmlDocuments auf niedrigerer Ebene werden sie in Regeln ausgewertet, aber das TypedXmlDocument der obersten Ebene hat keine Kenntnis davon. Wenn das TypedXmlDocument der obersten Ebene zurückgezogen wird, wird das neue, unabhängig behauptete TypedXmlDocument-Elementnicht automatisch zurückgezogen. Wenn neue Knoten erstellt werden, ist es daher in der Regel am einfachsten, das vollständige XmlDocument zurückzuziehen und erneut zu bestätigen.

Die TypedXmlDocument-Klasse unterstützt eine Reihe nützlicher Methoden, die innerhalb eines benutzerdefinierten .NET-Members 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.

TypedDataTable

Sie können entweder einzelne TypedDataRowsoder die gesamte TypedDataTable zurückziehen. Wenn Sie eine Tabelle zurückziehen, werden alle enthaltenen Zeilen aus dem Arbeitsspeicher zurückgezogen.

Um die gesamte TypedDataTable zurückzuziehen, müssen Sie eine Hilfsfunktion verwenden, um auf die Parent-Eigenschaft für TypedDataRow zuzugreifen, z. B.:

Retract(MyHelper.GetTypedDataTable(TypedDataRow))  

In der vorherigen Aktion haben Sie die Tabelle in TypedDataRow gezogen. In GetTypedDataTable geben Sie den Wert von TypedDataRow.Parent zurück.

Wie bei TypedXmlDocuments: Wenn Sie zusätzliche, neue TypedDataRowsfür dieselbe DataTable nach dem Bestätigen 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 TypedDataRow-Elemente. Nur die TypedDataRow-Elemente, die in der TypedDataTable enthalten waren, als sie bestätigt wurde, werden zurückgezogen.

DataConnection

Wenn eine DataConnection zurückgezogen wird, werden alle TypedDataRow-Elemente, die über die von DataConnection erstellte Abfrage aus der Datenbank abgerufen werden, aus dem Arbeitsspeicher zurückgezogen. Die DataConnection selbst wird ebenfalls zurückgezogen, was bedeutet, dass keine TypedDataRow-Smehr über die DataConnection abgerufen werden (d. h. durch Die Verwendung von DataConnection in anderen Prädikaten oder Aktionen).

Bei Verwendung einer DataConnection versetzt jeder Rückzugsvorgang für einen einzelnen TypedDataRow die Engine in einen inkonsistenten Zustand. Daher sind Vorgänge für einzelne TypedDataRow-S, die einer DataConnection zugeordnet sind, nicht zulässig. Wenn Sie die Tabelle (mit dem Parameter DataConnection ) in die Retract-Funktion ziehen, ziehen Sie die DataConnection zurück.

Weitere Informationen

Engine-Steuerungsfunktionen