Freigeben über


Steuerelement für die Vorwärtsverkettung

Bei der Vorwärtsverkettung handelt es sich um ein sehr leistungsstarkes Konzept, das die Anordnung unteilbarer Regeln in Regelsätzen mit der Definition der oder notwendigerweise sogar mit der Kenntnis von den Abhängigkeiten der Regeln untereinander ermöglicht. In einigen Szenarien möchte der Verfasser der Regeln möglicherweise die Möglichkeit besitzen, mehr Kontrolle über das Verkettungsverhalten bereitzustellen, insbesondere die Fähigkeit zum Beschränken der auftretenden Verkettungen. Dies ermöglicht dem Ersteller der Regel Folgendes:

  • Schränken Sie die wiederkehrende Ausführung von Regeln ein, die möglicherweise zu falschen Ergebnissen führt.

  • Die Leistung soll gesteigert werden.

  • Außer Kontrolle geratene Schleifen sollen verhindert werden.

Windows Workflow Foundation stellt zwei Eigenschaften zur Vereinfachung dieser Steuerungsebene bereit:

Beide dieser Werte können im RuleSet-Editor festgelegt werden.

ChainingBehavior-Eigenschaft

Die ChainingBehavior-Eigenschaft auf dem RuleSet-Objekt kann auf drei mögliche Werte festgelegt werden: Full, UpdateOnly oder None.

  • Die Full-Option ist Standard. Von ihr wird das bis zu diesem Punkt beschriebene Verhalten bereitgestellt.

  • Von der UpdateOnly-Option wird die implizite und attributbasierte Verkettung deaktiviert. Außerdem ist vorgesehen, dass die Verkettung nur bei expliziten Update-Anweisungen erfolgen soll. Dies erteilt Ihnen vollständige Kontrolle darüber, von welchen Regeln die erneute Auswertung ausgelöst wird. Normalerweise wird dies zum Verhindern zyklisch wiederkehrender Abhängigkeiten verwendet, von denen viele Regelneuausführungen verursacht werden (oder sogar außer Kontrolle geraten), oder zum Steigern der Leistung verwendet, indem nicht erforderliche Regelneuausführungen vermieden werden, um die funktionelle Vollständigkeit von RuleSet zur Verfügung zu stellen.

  • Die letzte Option ist None. Diese Option bewirkt, dass die Regeln streng linear vom Modul ausgewertet werden. Jede Regel würde nur ein Mal in der Reihenfolge ihrer Priorität ausgewertet werden. Regeln höherer Priorität könnten sich auf Regeln geringerer Priorität auswirken, das Gegenteil wäre jedoch nicht der Fall, da keine Verkettung erfolgt. Deshalb würde diese Option mit expliziten vorrangigen Zuweisungen verwendet werden, wenn nicht Abhängigkeiten der Regeln untereinander vorhanden wären.

ReevaluationBehavior-Eigenschaft

Die ReevaluationBehavior-Eigenschaft auf dem Rule-Objekt verfügt über zwei mögliche Werte: Always und Never.

  • Always ist standardmäßig eingestellt und stellt das zuvor behandelte Verhalten bereit. Die Regel wird auf Grundlage der Verkettung durch die Aktion anderer Regeln immer neu bewertet.

  • Never, wie der Name andeutet, deaktiviert diese Neubewertung. Die Regel wird ein Mal ausgewertet, wird jedoch nicht neu ausgewertet, wenn vorher Aktionen ausgeführt wurden. Dies bedeutet Folgendes: Wenn die Regel vorher ausgewertet wurde und daher die Aktion Then oder Else ausgeführt wurde, wird sie nicht neu ausgewertet. Die Ausführung einer leeren Aktionsauflistung in der Aktion Then oder Else gibt jedoch nicht an, dass eine Regel ausgeführt wurde.

Normalerweise wird diese Eigenschaft auf Regelebene zum Verhindern von Endlosschleifen verwendet, die von Abhängigkeiten der Regeln in ihren eigenen Aktionen oder anderen Regeln verursacht werden. Durch folgende Regel würde z. B. eine eigene Endlosschleife erstellt. Zum Erfüllen der funktionellen Anforderungen der Regel ist keine Neuauswertung erforderlich:

IF this.shippingCharge < 2.5 AND this.orderValue > 100
THEN this.shippingCharge = 0

Als Alternative soll die Regel neu ausgewertet werden. Der Benutzer kann aber nur bei Änderung des OrderValue-Felds das Verkettungsverhalten im RuleSet ändern, sodass eine Verkettung nur bei expliziten Update-Anweisungen erfolgt (fügen Sie anschließend die Update-Anweisungen relevanten Regelaktionen hinzu). Natürlich hätte der Benutzer dieser Regel ein zusätzliches Prädikat hinzufügen können, von dem geprüft wird, ob der Wert von ShippingCost nicht bereits 0 ist. Durch die Verkettungssteuerelemente müssen Benutzer ihre Regeln jedoch nicht mehr auf Grundlage der Auswertungsdetails sondern basierend auf ihren Geschäftsanforderungen definieren.

Halt-Funktion

Als letztes Steuerelement kann eine Halt-Funktion als Regelaktion hinzugefügt werden (geben Sie "Halt" in das Aktionsfeld Then oder Else im Editor ein). Dadurch werden die RuleSet-Ausführung sofort beendet und die Kontrolle an den aufrufenden Code zurückgegeben. Die Brauchbarkeit dieser Funktion ist natürlich nicht zwingend auf Verkettungskontrollszenarios beschränkt. Ein RuleSet mit spezifischem funktionellem Ziel, z. B. verwendet eine Halt-Funktion möglicherweise zum Beenden der Ausführung, wenn das Ziel erreicht wurde.

Siehe auch

Referenz

ChainingBehavior
ReevaluationBehavior
RuleHaltAction
RuleUpdateAction
RuleSet

Konzepte

Verwenden von RuleSets in Workflows
Regelauswertung in RuleSets

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.