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.
Wenn Regeln in einer Workflowanwendung verwendet werden, sind die Regeln Teil der Assembly. In einigen Szenarien sollten Sie die RuleSets möglicherweise separat von der Assembly verwalten, sodass sie aktualisiert werden können, ohne die Workflowassembly neu zu erstellen und bereitzustellen. In diesem Beispiel können Sie RuleSets in einer Datenbank verwalten und bearbeiten und während der Laufzeit über einen Workflow auf diese RuleSets zugreifen. Dadurch können Workflowinstanzen automatisch RuleSet-Änderungen integrieren.
Das Beispiel für das External RuleSet Toolkit enthält ein Windows Forms-basiertes Tool, mit dem Sie RuleSet-Versionen in einer Datenbank verwalten und bearbeiten können. Sie enthält auch eine Aktivität und einen Hostdienst zum Ausführen dieser Regeln.
Hinweis
In diesem Beispiel ist Microsoft SQL Server erforderlich.
Visual Studio stellt einen RuleSet-Editor als Teil von Windows Workflow Foundation (WF) bereit. Sie können diesen Editor starten, indem Sie auf die Policy Aktivität in einem Workflow doppelklicken. Es serialisiert das definierte RuleSet-Objekt in die Regeldatei, die dem Workflow zugeordnet ist (eine Policy Aktivität führt eine RuleSet-Instanz für den Workflow aus). Die Regeldatei wird beim Erstellen des Workflowprojekts als Ressource in die Assembly kompiliert.
Zu den Komponenten dieses Beispiels gehören:
Ein grafisches Benutzeroberflächentool für RuleSet, mit dem Sie RuleSet-Versionen in der Datenbank bearbeiten und verwalten können.
Ein RuleSet-Dienst, der für die Hostanwendung konfiguriert ist und auf RuleSets aus der Datenbank zugreift.
Eine
ExternalPolicyAktivität, die ein RuleSet vom RuleSet-Dienst anfordert und das RuleSet auf den Workflow anwendet.
Die Interaktion der Komponenten wird in der folgenden Abbildung dargestellt. Die folgenden Abschnitte beschreiben die einzelnen Komponenten.
RuleSet-Tool
Die folgende Abbildung ist ein Screenshot des RuleSet-Tools. Im Menü "Regelspeicher " können Sie die verfügbaren RuleSets aus der Datenbank laden und geänderte RuleSets wieder im Speicher speichern. Eine Anwendungskonfigurationsdatei stellt eine Datenbankverbindungszeichenfolge für die RuleSet-Datenbank bereit. Wenn Sie das Tool starten, lädt es automatisch die RuleSets aus der konfigurierten Datenbank.
Das RuleSet-Tool wendet Haupt- und Nebenversionsnummern auf die RuleSets an, sodass Sie mehrere Versionen gleichzeitig verwalten und speichern können (das Tool bietet keine Sperr- oder andere Konfigurationsverwaltungsfeatures zusätzlich zur Versionsverwaltungsfunktion). Mit dem Tool können Sie neue RuleSet-Versionen erstellen oder vorhandene Versionen löschen. Wenn Sie auf "Neu" klicken, erstellt das Tool einen neuen RuleSet-Namen und wendet Version 1.0 an. Wenn Sie eine Version kopieren, erstellt das Tool eine Kopie der ausgewählten RuleSet-Version, einschließlich der enthaltenen Regeln, und weist neue eindeutige Versionsnummern zu. Diese Versionsnummern basieren auf den Versionsnummern vorhandener RuleSets. Sie können den RuleSet-Namen und die Versionsnummern mithilfe der zugehörigen Felder im Formular ändern.
Wenn Sie auf "Regeln bearbeiten" klicken, wird der RuleSet-Editor gestartet, wie in der folgenden Abbildung dargestellt:
Dies ist ein erneutes Hosten des Editordialogfelds, das Teil des Windows Workflow Foundation Visual Studio-Add-Ins ist. Sie bietet die gleiche Funktionalität, einschließlich IntelliSense-Unterstützung. Die Regeln werden für einen Zieltyp (z. B. einen Workflow) erstellt, der dem RuleSet im Tool zugeordnet ist; Wenn Sie im Haupttooldialogfeld auf "Durchsuchen" klicken, wird das Dialogfeld " Workflow-/Typauswahl " angezeigt, wie in Abbildung 4 dargestellt.
Abbildung 4: Workflow/Type Selector
Sie können das Dialogfeld "Workflow-/Typauswahl " verwenden, um eine Assembly und einen bestimmten Typ in dieser Assembly anzugeben. Dieser Typ ist der Zieltyp, für den die Regeln erstellt (und ausgeführt werden). In vielen Fällen ist der Zieltyp ein Workflow oder ein anderer Aktivitätstyp. Sie können jedoch ein RuleSet für jeden .NET-Typ ausführen.
Der Pfad zu der Assemblydatei und dem Typ name are stored with the RuleSet in der Datenbank. Wenn das RuleSet aus der Datenbank abgerufen wird, versucht das Tool, den Zieltyp automatisch zu laden.
Wenn Sie im Dialogfeld "Workflow-/Typauswahl" auf "OK" klicken, wird der ausgewählte Typ anhand des RuleSet überprüft, um sicherzustellen, dass der Zieltyp alle Elemente enthält, auf die von den Regeln verwiesen wird. Fehler werden im Dialogfeld "Überprüfungsfehler " angezeigt. Sie können die Änderung trotz der Fehler fortsetzen oder auf "Abbrechen" klicken. Im Menü "Extras " im Haupttooldialogfeld können Sie auf "Überprüfen " klicken, um die RuleSet-Version für die Zielaktivität erneut zu überprüfen.
Über das Menü "Daten " im Tool können Sie RuleSets importieren und exportieren. Wenn Sie auf Importieren klicken, wird ein Dialogfeld zur Dateiauswahl angezeigt, aus dem Sie eine .rules-Datei auswählen können. Dies könnte eine Datei sein, die möglicherweise ursprünglich in Visual Studio erstellt wurde oder auch nicht. Die REGEL-Datei sollte eine serialisierte RuleDefinitions Instanz enthalten, die eine Auflistung von Bedingungen und eine Auflistung von RuleSets enthält. Das Tool verwendet nicht die Bedingungsauflistung, verwendet jedoch das RuleDefinitions RULES-Format, um die Interaktion mit der Visual Studio-Umgebung zu ermöglichen.
Nachdem Sie eine Regeldatei ausgewählt haben, wird ein Dialogfeld "RuleSet-Auswahl" angezeigt. Sie können das Dialogfeld verwenden, um die RuleSets aus der Datei auszuwählen, die Sie importieren möchten (der Standardwert gibt alle RuleSets an). RuleSets in der REGEL-Datei besitzen keine Versionsnummern, da die Versionsverwaltung innerhalb eines WF-Projekts mit der Version der Assembly identisch ist. Während des Importvorgangs weist das Tool automatisch die nächste verfügbare Hauptversionsnummer zu (die Sie nach dem Import ändern können); Sie können die zugewiesenen Versionsnummern in der RuleSet-Auswahlliste sehen.
Für jedes importierte RuleSet versucht das Tool, den zugeordneten Typ aus dem Ordner "bin\Debug" unter dem Speicherort der Regeldatei (sofern vorhanden) zu suchen, basierend auf den im RuleSet verwendeten Membern. Wenn das Tool mehrere übereinstimmende Typen findet, versucht es, einen Typ basierend auf einer Übereinstimmung zwischen dem .rules-Dateinamen und dem Typnamen auszuwählen (z. B. entspricht der Typ Workflow1 Workflow1.rules). Wenn mehrere Übereinstimmungen vorhanden sind, werden Sie aufgefordert, den Typ auszuwählen. Wenn dieser Mechanismus für die automatische Identifizierung keine übereinstimmende Assembly oder einen übereinstimmenden Typ findet, können Sie nach dem Import auf " Durchsuchen " im Haupttooldialogfeld klicken, um zum zugehörigen Typ zu navigieren. Die folgende Abbildung zeigt den RuleSet Selector:
Wenn Sie im Haupttoolmenü auf "Datenexport " klicken, wird das Dialogfeld "Regelsatzauswahl " erneut angezeigt, aus dem Sie die Regelsätze aus der Datenbank bestimmen können, die exportiert werden soll. Wenn Sie auf "OK" klicken, wird ein Dialogfeld " Datei speichern " angezeigt, in dem Sie den Namen und speicherort der resultierenden REGELdatei angeben können. Da die REGEL-Datei keine Versionsinformationen enthält, können Sie nur eine RuleSet-Version mit einem bestimmten RuleSet-Namen auswählen.
PolicyFromService-Aktivität
Der Code für die PolicyFromService Aktivität ist einfach. Es funktioniert ähnlich wie die mit WF bereitgestellte Policy-Aktivität, aber anstatt das Ziel-RuleSet aus der Policy-Datei abzurufen, ruft es einen Hostdienst auf, um die RuleSet-Instanz zu erhalten. Anschließend wird das RuleSet für die Stammaktivität der Workflowinstanz ausgeführt.
Um die Aktivität in einem Workflow zu verwenden, fügen Sie einen Verweis auf die PolicyActivities und RuleSetService Assemblys aus Ihrem Workflowprojekt hinzu. Weitere Informationen zum Hinzufügen der Aktivität zur Toolbox finden Sie im Verfahren am Ende dieses Themas.
Nachdem Sie die Aktivität in Ihrem Workflow platziert haben, müssen Sie den Namen des auszuführenden RuleSet angeben. Sie können den Namen als Literalwert eingeben oder an eine Workflowvariable oder Eigenschaft einer anderen Aktivität binden. Optional können Sie Versionsnummern für das bestimmte RuleSet eingeben, das ausgeführt werden soll. Wenn Sie den Standardwert 0 für die Haupt- und Nebenversionsnummern beibehalten, wird automatisch die neueste Versionsnummer in der Datenbank für die Aktivität bereitgestellt.
RuleSet-Dienst
Der Dienst ist dafür verantwortlich, die angegebene RuleSet-Version aus der Datenbank abzurufen und an die aufrufende Aktivität zurückzugeben. Wie bereits erwähnt, ruft der Dienst die neueste Version ab, wenn die im GetRuleSet Aufruf übergebenen Haupt- und Nebenversionswerte 0 sind. An diesem Punkt gibt es keine Zwischenspeicherung von RuleSet-Definitionen oder -Instanzen; Ebenso gibt es keine Features zum Markieren von RuleSet-Versionen als "bereitgestellt", um sie von laufenden RuleSets zu unterscheiden.
Der Zugriff auf die Datenbank durch den Dienst sollte auf dem Host mithilfe einer Anwendungskonfigurationsdatei konfiguriert werden.
So führen Sie das Tool aus
Der Ordner, in dem die vom Tool verwendete RuleSet-Tabelle eingerichtet wird und der Dienst eine Setup.sql Datei enthält. Sie können die Setup.cmd Batchdatei ausführen, um die Regeldatenbank in SQL Express zu erstellen und die RuleSet-Tabelle einzurichten.
Wenn Sie die Batchdatei oder Setup.sql bearbeiten und angeben, dass sql Express nicht verwendet werden soll oder die Tabelle in einer Datenbank mit dem Namen etwas anderes als
Rulesplatziert werden soll, sollten die Anwendungskonfigurationsdateien im RuleSet-Tool undUsageSamplein Projekten mit denselben Informationen bearbeitet werden.Nachdem Sie das Skript Setup.sql ausgeführt haben, können Sie die
ExternalRuleSetToolkitLösung erstellen und dann das RuleSet-Tool aus dem ExternalRuleSetTool-Projekt starten.Die Projektmappe der
RuleSetToolkitUsageSample-Konsolenanwendung für sequentielle Workflows schließt einen Beispielworkflow ein. Der Workflow besteht aus einerPolicyFromService-Aktivität und zwei VariablenorderValueunddiscount, anhand derer das Ziel-RuleSet läuft.Um das Beispiel zu verwenden, erstellen Sie die
RuleSetToolkitUsageSampleLösung. Klicken Sie dann im Hauptmenü des RuleSet Tools auf Data-Import und navigieren Sie zum Ordner "RuleSetToolkitUsageSample", um die Datei "DiscountRuleSet.rules" auszuwählen. Klicken Sie auf die Menüoption "Regelspeicher speichern ", um das importierte RuleSet in der Datenbank zu speichern.Da auf die
PolicyActivitiesAssembly aus dem Beispielworkflowprojekt verwiesen wird, wird diePolicyFromServiceAktivität im Workflow angezeigt. Sie wird jedoch nicht standardmäßig in der Toolbox angezeigt. Gehen Sie wie folgt vor, um sie der Toolbox hinzuzufügen:Klicken Sie mit der rechten Maustaste auf die Toolbox, und wählen Sie "Elemente auswählen " aus (dies kann eine Weile dauern).
Wenn das Dialogfeld "Toolboxelemente auswählen " angezeigt wird, klicken Sie auf die Registerkarte "Aktivitäten ".
Navigieren Sie zur
PolicyActivities-Assembly in derExternalRuleSetToolkit-Lösung und klicken Sie auf „Öffnen“.Stellen Sie sicher, dass die
PolicyFromServiceAktivität im Dialogfeld "Toolboxelemente auswählen " ausgewählt ist, und klicken Sie dann auf "OK".Die Aktivität sollte nun in der Toolbox in der Kategorie "RuleSetToolkitUsageSample Components" angezeigt werden.
Der RuleSet-Dienst ist bereits auf dem Konsolenanwendungshost mit der folgenden Anweisung in Program.cs konfiguriert.
workflowRuntime.AddService(new RuleSetService());Sie können den Dienst auch auf dem Host mithilfe einer Konfigurationsdatei konfigurieren. Weitere Informationen finden Sie in der SDK-Dokumentation.
Dem Workflowprojekt wird eine Anwendungskonfigurationsdatei hinzugefügt, um die Verbindungszeichenfolge für die Datenbank anzugeben, die vom Dienst verwendet werden soll. Dies sollte dieselbe Verbindungszeichenfolge sein, die vom RuleSet-Tool verwendet wird, was auf die Datenbank verweist, die die RuleSet-Tabelle enthält.
Sie können das
RuleSetToolkitUsageSampleProjekt jetzt wie jede andere Workflowkonsolenanwendung ausführen. Drücken Sie F5 oder STRG+F5 in Visual Studio, oder führen Sie die RuleSetToolkitUsageSample.exe Datei direkt aus.Hinweis
Sie müssen das RuleSet-Tool schließen, um das Verwendungsbeispiel neu zu kompilieren, da das Tool die Verwendungsbeispielassembly lädt.