Freigeben über


Erstellen einer Aktivität zur Laufzeit mit DynamicActivity

Dieses Thema gilt für Windows Workflow Foundation 4.

DynamicActivity ist eine konkrete, versiegelte Klasse mit einem öffentlichen Konstruktor. DynamicActivity kann zur Zusammenstellung von Aktivitätsfunktionen zur Laufzeit mit einem Aktivitäts-DOM verwendet werden.

DynamicActivity-Funktionen

DynamicActivity hat Zugriff auf Ausführungseigenschaften, Argumente und Variablen, jedoch keinen Zugriff auf Laufzeitdienste, wie z. B. die Planung untergeordneter Aktivitäten oder die Nachverfolgung.

Eigenschaften der obersten Ebene können mit Argument-Workflowobjekten festgelegt werden. In imperativem Code werden diese Argumente mittels CLR-Eigenschaften für einen neuen Typ erstellt. In XAML werden sie mit dem x:Class-Tag und dem x:Member-Tag deklariert.

Der Designer-Zugriff für die mit DynamicActivity konstruierten Aktivitäten erfolgt über ICustomTypeDescriptor. Im Designer erstellte Aktivitäten können dynamisch mit Load geladen werden, wie in der folgenden Prozedur veranschaulicht.

So erstellen Sie zur Laufzeit eine Aktivität mit imperativem Code

  1. Öffnen Sie Visual Studio 2010.

  2. Wählen Sie Datei, Neu, Projekt. Wählen Sie unter Visual C# im Fenster Projekttypen die Option Workflow 4.0 und danach den Knoten v2010 aus. Wählen Sie im Fenster Vorlagen die Option Konsolenanwendung für sequenzielle Workflows. Geben Sie dem neuen Projekt den Namen DynamicActivitySample.

  3. Klicken Sie mit der rechten Maustaste im HelloActivity-Projekt auf Workflow1.xaml, und wählen Sie Löschen.

  4. Öffnen Sie die Datei Program.cs. Fügen Sie am Anfang der Datei die folgende Direktive hinzu.

    using System.Collections.Generic;
    
  5. Ersetzen Sie den Inhalt der Main-Methode durch den folgenden Code, mit dem eine Sequence-Aktivität erstellt wird, die eine einzelne WriteLine-Aktivität enthält. Diese wird der Implementation-Eigenschaft einer neuen dynamischen Aktivität zugewiesen.

    //Define the input argument for the activity
    var textOut = new InArgument<string>();
    //Create the activity, property, and implementation
                Activity dynamicWorkflow = new DynamicActivity()
                {
                    Properties = 
                    {
                        new DynamicActivityProperty
                        {
                            Name = "Text",
                            Type = typeof(InArgument<String>),
                            Value = textOut
                        }
                    },
                    Implementation = () => new Sequence()
                    {
                        Activities = 
                        {
                            new WriteLine()
                            {
                                Text = new InArgument<string>(env => textOut.Get(env))
                            }
                        }
                    }
                };
    //Execute the activity with a parameter dictionary
                WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } });
                Console.ReadLine();
    
  6. Führen Sie die Anwendung aus. Ein Konsolenfenster mit dem Text "Hello World!" wird angezeigt.

So erstellen Sie zur Laufzeit eine Aktivität mit XAML

  1. Öffnen Sie Visual Studio 2010.

  2. Wählen Sie Datei, Neu, Projekt. Wählen Sie unter Visual C# im Fenster Projekttypen die Option Workflow 4.0 und danach den Knoten v2010. Wählen Sie im Fenster Vorlagen die Option Konsolenanwendung für Workflows. Geben Sie dem neuen Projekt den Namen DynamicActivitySample.

  3. Öffnen Sie Workflow1.xaml im HelloActivity-Projekt. Klicken Sie unten im Designer auf die Option Argumente. Erstellen Sie ein neues In-Argument mit dem Namen TextToWrite und dem Typ String.

  4. Ziehen Sie eine WriteLine-Aktivität aus dem Bereich Primitive der Toolbox auf die Designeroberfläche. Weisen Sie der Text-Eigenschaft der Aktivität den Wert TextToWrite zu.

  5. Öffnen Sie die Datei Program.cs. Fügen Sie am Anfang der Datei die folgende Direktive hinzu.

    using System.Activities.XamlIntegration;
    
  6. Ersetzen Sie den Inhalt der Main-Methode durch folgenden Code.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });
    Console.ReadLine();
    
  7. Führen Sie die Anwendung aus. Ein Konsolenfenster mit dem Text "Hello World!" wird angezeigt.

  8. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei "Workflow1.xaml", und wählen Sie Code anzeigen. Beachten Sie, dass die Aktivitätsklasse mit x:Class und die Eigenschaft mit x:Property erstellt wird.

Siehe auch

Aufgaben

DynamicActivity-Erstellung

Konzepte

Erstellen von Workflows mit imperativem Code