Verwenden der Interop-Aktivität in einem .NET Framework 4-Workflow
Dieses Thema gilt für Windows Workflow Foundation 4.
Mit .NET Framework 3.0 oder .NET Framework 3.5 erstellte Aktivitäten können in einem .NET Framework 4-Workflow mithilfe der Interop-Aktivität verwendet werden. Dieses Thema enthält eine Übersicht über die Verwendung der Interop-Aktivität.
Hinweis: zu Visual Basic |
---|
Die Interop-Aktivität wird nur in der Toolbox des Workflow-Designers angezeigt, wenn für das Projekt des Workflows die Einstellung Zielframework auf .NET Framework 4 festgelegt wurde. |
Verwenden der Interop-Aktivität in Workflows von .NET Framework 4
In diesem Thema wird eine .NET Framework 3.5-Aktivitätsbibliothek erstellt, die eine DiscountCalculator
-Aktivität enthält. Der DiscountCalculator
berechnet einen Rabatt auf Grundlage einer Kaufmenge. Er besteht aus einem SequenceActivity-Objekt, das ein PolicyActivity-Objekt enthält.
Hinweis: |
---|
Die in diesem Thema erstellte .NET Framework 3.5-Aktivität implementiert die Logik der Aktivität mithilfe eines PolicyActivity-Objekts. Die Verwendung von Regeln in einem .NET Framework 4-Workflow erfordert weder eine benutzerdefinierte .NET Framework 3.5-Aktivität noch die Interop-Aktivität. Ein Beispiel zur Verwendung von Regeln in einem .NET Framework 4-Workflow ohne die Interop-Aktivität finden Sie im Beispiel Richtlinienaktivität in .NET Framework 4. |
So erstellen Sie das Projekt für die .NET Framework 3.5-Aktivitätsbibliothek
Klicken Sie auf Visual Studio 2010, und wählen Sie im Menü Datei zuerst Neu und dann Projekt aus.
Erweitern Sie im Bereich Installierte Vorlagen den Knoten Andere Projekttypen, und wählen Sie Visual Studio-Projektmappen aus.
Wählen Sie in der Liste Visual Studio-Projektmappen die Option Leere Projektmappe aus. Geben Sie PolicyInteropDemo im Feld Name ein, und klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropDemo, und wählen Sie nacheinander Hinzufügen und Neues Projekt aus.
Tipp: Wenn das Fenster Projektmappen-Explorer nicht angezeigt wird, wählen Sie im Menü Ansicht die Option Projektmappen-Explorer aus. Wählen Sie in der Liste Installierte Vorlagen die Option Visual C# und dann Workflow aus. Wählen Sie in der Dropdownliste mit den .NET Framework-Versionen .NET Framework 3.5 aus. Wählen Sie dann in der Liste Vorlagen die Option Workflowaktivitätsbibliothek aus.
Geben Sie PolicyActivityLibrary im Feld Name ein, und klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Activity1.cs, und wählen Sie dann Löschen aus. Klicken Sie zur Bestätigung auf OK.
So erstellen Sie die DiscountCalculator-Aktivität
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyActivityLibrary, und wählen Sie Hinzufügen und dann Aktivität aus.
Wählen Sie aus der Liste Visual C#-Elemente die Option **Aktivität (mit getrenntem Code)**aus. Geben Sie DiscountCalculator im Feld Name ein, und klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf DiscountCalculator.xoml, und wählen Sie Code anzeigen aus.
Fügen Sie der
DiscountCalculator
-Klasse die folgenden drei Eigenschaften hinzu:public partial class DiscountCalculator : SequenceActivity { public double Subtotal { get; set; } public double DiscountPercent { get; set; } public double Total { get; set; } }
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf DiscountCalculator.xoml, und wählen Sie Ansicht-Designer aus.
Ziehen Sie eine Policy-Aktivität aus dem Abschnitt Windows Workflow v3.0 der Toolbox, und legen Sie sie in der DiscountCalculator-Aktivität ab.
Tipp: Wenn das Fenster Toolbox nicht sichtbar ist, wählen Sie im Menü Ansicht die Option Toolbox aus.
So konfigurieren Sie die Regeln
Klicken Sie auf die neu hinzugefügte Policy-Aktivität, um diese auszuwählen, falls sie nicht bereits ausgewählt ist.
Klicken Sie im Fenster Eigenschaften auf die Eigenschaft RuleSetReference, um diese auszuwählen, und klicken Sie dann auf die Schaltfläche mit den Auslassungszeichen rechts von der Eigenschaft.
Tipp: Klicken Sie im Menü Ansicht auf Eigenschaftenfenster, falls das Fenster Eigenschaften nicht sichtbar ist. Wählen Sie Neu... aus.
Klicken Sie auf Regel hinzufügen.
Geben Sie den folgenden Ausdruck im Feld Bedingung ein.
this.Subtotal >= 50 && this.Subtotal < 100
Geben Sie den folgenden Ausdruck im Feld Then-Aktionen ein.
this.DiscountPercent = 0.075
Klicken Sie auf Regel hinzufügen.
Geben Sie den folgenden Ausdruck im Feld Bedingung ein.
this.Subtotal >= 100
Geben Sie den folgenden Ausdruck im Feld Then-Aktionen ein.
this.DiscountPercent = 0.15
Klicken Sie auf Regel hinzufügen.
Geben Sie den folgenden Ausdruck im Feld Bedingung ein.
this.DiscountPercent > 0
Geben Sie den folgenden Ausdruck im Feld Then-Aktionen ein.
this.Total = this.Subtotal - this.Subtotal * this.DiscountPercent
Geben Sie den folgenden Ausdruck im Feld Else-Aktionen ein.
this.Total = this.Subtotal
Klicken Sie auf OK, um das Dialogfeld Regelsatz-Editor zu schließen.
Stellen Sie sicher, dass das neu erstellte RuleSet-Objekt in der Liste Name ausgewählt ist, und klicken Sie auf OK.
Drücken Sie F6, um die Projektmappe zu erstellen.
Die Regeln, die der DiscountCalculator
-Aktivität in diesem Verfahren hinzugefügt wurden, sind im folgenden Codebeispiel dargestellt.
Rule1: IF this.Subtotal >= 50 && this.Subtotal < 100
THEN this.DiscountPercent = 0.075
Rule2: IF this. Subtotal >= 100
THEN this.DiscountPercent = 0.15
Rule3: IF this.DiscountPercent > 0
THEN this.Total = this.Subtotal - this.Subtotal * this.DiscountPercent
ELSE this.Total = this.Subtotal
Wenn das PolicyActivity-Objekt ausgeführt wird, werten diese drei Regeln die Eigenschaftswerte Subtotal
, DiscountPercent
und Total
der DiscountCalculator
-Aktivität aus und ändern sie, um den gewünschten Rabatt zu errechnen.
Verwenden der DiscountCalculator-Aktivität mit der Interop-Aktivität
Damit die DiscountCalculator
-Aktivität in einem .NET Framework 4-Workflow verwendet werden kann, kommt die Interop-Aktivität zum Einsatz. In diesem Abschnitt werden zwei Workflows erstellt – einer mithilfe von Code und einer mithilfe des Workflow-Designers –, um zu veranschaulichen, wie die Interop-Aktivität mit der DiscountCalculator
-Aktivität verwendet wird. Für beide Workflows wird die gleiche Hostanwendung verwendet.
So erstellen Sie die Hostanwendung
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropDemo, und wählen Sie nacheinander Hinzufügen und Neues Projekt aus.
Stellen Sie sicher, dass in der Dropdownliste mit der .NET Framework-Version .NET Framework 4 ausgewählt ist, und wählen Sie in der Liste Visual C#-Elemente die Option Konsolenanwendung für Workflows aus.
Geben Sie PolicyInteropHost im Feld Name ein, und klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropHost, und wählen Sie Eigenschaften aus.
Ändern Sie in der Dropdownliste Zielframework die Auswahl von .NET Framework 4 Client Profile in .NET Framework 4. Klicken Sie zur Bestätigung auf Ja.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropHost, und wählen Sie Verweis hinzufügen aus.
Wählen Sie auf der Registerkarte Projekte die Option PolicyActivityLibrary aus, und klicken Sie anschließend auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropHost, und wählen Sie Verweis hinzufügen aus.
Wählen Sie auf der Registerkarte .NET die Optionen System.Workflow.Activities, System.Workflow.ComponentModel und System.Workflow.Runtime aus, und klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropHost, und wählen Sie Als Startprojekt festlegen aus.
Drücken Sie F6, um die Projektmappe zu erstellen.
Verwenden der Interop-Aktivität im Code
In diesem Beispiel wird eine Workflowdefinition mithilfe von Code erstellt, der die Interop-Aktivität und die DiscountCalculator
-Aktivität enthält. Dieser Workflow wird mit dem WorkflowInvoker-Objekt aufgerufen, und die Ergebnisse der Regelauswertung werden mithilfe der WriteLine-Aktivität in die Konsole geschrieben.
So verwenden Sie die Interop-Aktivität im Code
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Program.cs, und wählen Sie Code anzeigen aus.
Fügen Sie am Anfang der Datei die folgende
using
-Anweisung hinzu.using PolicyActivityLibrary;
Entfernen Sie den Inhalt der
Main
-Methode, und ersetzen Sie ihn durch folgenden Code.static void Main(string[] args) { CalculateDiscountUsingCodeWorkflow(); }
Erstellen Sie in der
Program
-Klasse eine neue Methode namensCalculateDiscountUsingCodeWorkflow
, die den folgenden Code enthält.static void CalculateDiscountUsingCodeWorkflow() { Variable<double> Subtotal = new Variable<double> { Default = 75.99, Name = "Subtotal" }; Variable<double> DiscountPercent = new Variable<double> { Name = "DiscountPercent" }; Variable<double> Total = new Variable<double> { Name = "Total" }; Activity wf = new Sequence { Variables = { Subtotal, DiscountPercent, Total }, Activities = { new Interop { ActivityType = typeof(DiscountCalculator), ActivityProperties = { { "Subtotal", new InArgument<double>(Subtotal) }, { "DiscountPercentOut", new OutArgument<double>(DiscountPercent) }, { "TotalOut", new OutArgument<double>(Total) } } }, new WriteLine { Text = new InArgument<string>(env => string.Format("Subtotal: {0:C}, Discount {1}%, Total {2:C}", Subtotal.Get(env), DiscountPercent.Get(env) * 100, Total.Get(env))) } } }; WorkflowInvoker.Invoke(wf); }
Hinweis: Die Eigenschaften Subtotal
,DiscountPercent
undTotal
derDiscountCalculator
-Aktivität werden als Argumente der Interop-Aktivität zugänglich gemacht und an lokale Workflowvariablen in der ActivityProperties-Auflistung der Interop-Aktivität gebunden.Subtotal
wird als In-Argument hinzugefügt, da dieSubtotal
-Daten in die Interop-Aktivität übertragen werden.DiscountPercent
undTotal
werden als Out-Argumente hinzugefügt, da ihre Daten aus der Interop-Aktivität übertragen werden. Beachten Sie, dass die zwei Out-Argumente unter den NamenDiscountPercentOut
undTotalOut
hinzugefügt werden, um zu kennzeichnen, dass sie Out-Argumente darstellen. DerDiscountCalculator
-Typ wird als ActivityType der Interop-Aktivität angegeben.Drücken Sie STRG+F5, um die Anwendung zu erstellen und auszuführen. Probieren Sie unterschiedliche Werte für den
Subtotal
-Wert aus, um die verschiedenen Rabattstufen zu testen, die von derDiscountCalculator
-Aktivität bereitgestellt werden.Variable<double> Subtotal = new Variable<double> { Default = 75.99, // Change this value. Name = "Subtotal" };
Verwenden der Interop-Aktivität im Workflow-Designer
In diesem Beispiel wird ein Workflow mithilfe des Workflow-Designers erstellt. Dieser Workflow verfügt über die gleiche Funktionalität wie der Workflow im vorherigen Beispiel, hier wird der Rabatt jedoch nicht über eine WriteLine-Aktivität angezeigt. Stattdessen ruft die Hostanwendung die Rabattinformationen ab, wenn der Workflow abgeschlossen wird, und zeigt sie dann an. Außerdem sind die Daten nicht in lokalen Workflowvariablen enthalten. Die Argumente werden im Workflow-Designer erstellt, und die Werte werden vom Host übergeben, wenn der Workflow aufgerufen wird.
So hosten Sie die Policy-Aktivität mithilfe eines vom Workflow-Designer erstellten Workflows
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Workflow1.xaml, und wählen Sie Löschen aus. Klicken Sie zur Bestätigung auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PolicyInteropHost. Wählen Sie Hinzufügen und dann Neues Element aus.
Erweitern Sie den Knoten Visual C#-Elemente, und wählen Sie Workflow aus. Wählen Sie in der Liste Visual C#-Elemente die Option Aktivität aus.
Geben Sie DiscountWorkflow im Feld Name ein, und klicken Sie auf Hinzufügen.
Klicken Sie links unten im Workflow-Designer auf die Schaltfläche Argumente, um den Bereich Argumente anzuzeigen.
Klicken Sie auf Argument erstellen.
Geben Sie Subtotal im Feld Name ein, und wählen Sie aus der Dropdownliste Richtung die Option In aus. Wählen Sie Double aus der Dropdownliste Argumenttyp aus. Drücken Sie dann die EINGABETASTE, um das Argument zu speichern.
Hinweis: Wenn Double in der Dropdownliste Argumenttyp nicht aufgeführt wird, wählen Sie Nach Typen suchen aus, geben Sie System.Double im Feld Typname ein, und klicken Sie auf OK. Klicken Sie auf Argument erstellen.
Geben Sie DiscountPercent im Feld Name ein, und wählen Sie aus der Dropdownliste Richtung die Option Out aus. Wählen Sie Double aus der Dropdownliste Argumenttyp aus. Drücken Sie dann die EINGABETASTE, um das Argument zu speichern.
Klicken Sie auf Argument erstellen.
Geben Sie Total im Feld Name ein, und wählen Sie aus der Dropdownliste Richtung die Option Out aus. Wählen Sie Double aus der Dropdownliste Argumenttyp aus. Drücken Sie dann die EINGABETASTE, um das Argument zu speichern.
Klicken Sie links unten im Workflow-Designer auf die Schaltfläche Argumente, um den Bereich Argumente zu schließen.
Ziehen Sie eine Sequence-Aktivität aus dem Abschnitt Ablaufsteuerung der Toolbox, und legen Sie sie auf der Oberfläche des Workflow-Designers ab.
Ziehen Sie eine Interop-Aktivität aus dem Abschnitt Migration der Toolbox, und legen Sie sie in der Sequence-Aktivität ab.
Klicken Sie bei der Bezeichnung Hier zum Durchsuchen klicken auf die Interop-Aktivität, geben Sie DiscountCalculator im Feld Typname ein, und klicken Sie auf OK.
Hinweis: Wenn dem Workflow die Interop-Aktivität hinzugefügt wird und der DiscountCalculator
-Typ als ActivityType angegeben wird, macht die Interop-Aktivität drei In-Argumente und drei Out-Argumente verfügbar. Diese stellen die drei öffentlichen Eigenschaften derDiscountCalculator
-Aktivität dar. Die In-Argumente haben den gleichen Namen wie die drei öffentlichen Eigenschaften. Die drei Out-Argumente haben ebenfalls den gleichen Namen, jedoch mit einem angehängten Out am Ende des Eigenschaftennamens. In den folgenden Schritten werden die in den vorherigen Schritten erstellten Workflowargumente an die Argumente der Interop-Aktivität gebunden.Geben Sie DiscountPercent im Feld VB-Ausdruck eingeben rechts von der DiscountPercentOut-Eigenschaft ein, und drücken Sie die TAB-TASTE.
Geben Sie Subtotal im Feld VB-Ausdruck eingeben rechts von der Subtotal-Eigenschaft ein, und drücken Sie die TAB-TASTE.
Geben Sie Total im Feld VB-Ausdruck eingeben rechts von der TotalOut-Eigenschaft ein, und drücken Sie die TAB-TASTE.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Program.cs, und wählen Sie Code anzeigen aus.
Fügen Sie am Anfang der Datei die folgende
using
-Anweisung hinzu.using System.Collections.Generic;
Kommentieren Sie den Aufruf der
CalculateDiscountInCode
-Methode in derMain
-Methode aus, und fügen Sie den folgenden Code hinzu.Hinweis: Wenn Sie das oben beschriebene Verfahren nicht ausgeführt haben und der Main
-Standardcode vorhanden ist, ersetzen Sie den Inhalt vonMain
durch den folgenden Code.static void Main(string[] args) { CalculateDiscountUsingDesignerWorkflow(); //CalculateDiscountUsingCodeWorkflow(); }
Erstellen Sie in der
Program
-Klasse eine neue Methode namensCalculateDiscountUsingDesignerWorkflow
, die den folgenden Code enthält.static void CalculateDiscountUsingDesignerWorkflow() { double SubtotalValue = 125.99; Dictionary<string, object> wfargs = new Dictionary<string, object> { {"Subtotal", SubtotalValue} }; Activity wf = new DiscountWorkflow(); IDictionary<string, object> outputs = WorkflowInvoker.Invoke(wf, wfargs); Console.WriteLine("Subtotal: {0:C}, Discount {1}%, Total {2:C}", SubtotalValue, (double)outputs["DiscountPercent"] * 100, outputs["Total"]); }
Drücken Sie STRG+F5, um die Anwendung zu erstellen und auszuführen. Ändern Sie den Wert von
SubtotalValue
im folgenden Code, um eine andereSubtotal
-Menge anzugeben.double SubtotalValue = 125.99; // Change this value.
Übersicht über die Regelfunktionen
Das WF-Regelmodul bietet Hilfe bei der prioritätsbasierten Verarbeitung von Regeln, wobei Vorwärtsverkettung unterstützt wird. Regeln können für ein einzelnes Element oder für die Elemente einer Auflistung ausgewertet werden. Eine Übersicht über Regeln und Informationen zu einer bestimmten Regelfunktionalität finden Sie in der folgenden Tabelle.
Regelfunktionen | Dokumentation |
---|---|
Übersicht über Regeln |
Einführung in das Regelmodul von Windows Workflow Foundation |
RuleSet |
Verwenden von RuleSets in Workflows und RuleSet |
Auswertung von Regeln |
|
Regelverkettung |
Steuerelement für die Vorwärtsverkettung und Vorwärtsverketten von Regeln |
Verarbeiten von Auflistungen in Regeln |
|
Verwenden der PolicyActivity |
Verwenden der PolicyActivity-Aktivität und PolicyActivity |
In .NET Framework 4 erstellte Workflows verwenden nicht alle Regelfunktionen, die von WF bereitgestellt werden, z. B. deklarative Aktivitätsbedingungen und Bedingungsaktivitäten wie das ConditionedActivityGroup-Objekt und das ReplicatorActivity-Objekt. Bei Bedarf ist diese Funktionalität für Workflows verfügbar, die mit .NET Framework 3.0 und .NET Framework 3.5 erstellt wurden. Weitere Informationen finden Sie unter Migrieren von Workflows.