Einführung

Windows Workflow Foundation ist eine großartige Technologie um Workflows zu erstellen. Diese können in verschiedenen anderen Technologien benutzen werden, wie beispielsweise SharePoint, WCF, etc. In diesem Beispiel wollen wir die Windows Workflow Foundation und ASP.NET kombinieren.
In diesem Beispiel lernst du, wie man einen einfachen Workflow erstellt, der einen Eingabeparameter und einen Ausgabeparameter hat. Nach der Erstellung des Workflow werden wir diesen in eine einfache ASP.NET-Applikation integrieren.

Der Beispielcode kann aus der MSDN Sample Gallery runtergeladen werden.
 

Das Szenario

Um die Dinge einfach zu halten, erstellen wir eine einfache Begrüßungs-Applikation. Der Nutzer wird seinen Namen in eine TextBox eingeben und einen Button drücken. Daraufhin wird sein Name angezeigt. Klingt es einfach? Ist es!

File - New - Project

Starte mit der Erstellung einer leeren Visual Studio Solution:

 

Create a blank solution

 

Such dir einen beliebigen Namen für die Solution aus. Jetzt werden wir zwei Projekte zu dieser Solution hinzufügen - Eine ASP.NET Empty Web Application (Workflow.Web) und eine Activitiy Library (WorkflowLibrary).

 

Create the ASP.NET Web Application
Create the Activity Library

 

Ans Werk

Auf der Workflow-Seite

Zum Anfang lösche einfach die Activity1.xaml-Datei. Wir kommen später hierher zurück.

Unsere Webseite

Erstelle eine neue Web Form und nenne sie Default.aspx:

 

Add the Web Form

 

Wir brauchen vier Controls auf unserer Seite:
  • Ein Label, dass nur "Your name: " anzeigt
  • Eine Textbox, in der der User seinen Namen einträgt
  • Einen Button, der den Workflow starten wird
  • Ein Label, welches das Ergebnis des Workflows anzeigen wird
Der Code ist ziemlich unspektakulär; Du brauchst nur ein Click-Event auf dem Button zu erstellen:

<%@ Page Language="C# AutoEventWirkup="true" CodeBhind="Default.aspx.cs" Inherits="Workflow.Web.Default" %>
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label Text="Your name: " runat="server" />
        <asp:TextBox ID="TextBoxName" runat="server" />
        <asp:Button ID="ButtonCreateGreeting" Text="Create greeting" runat="server" onclick="ButtonCreateGreeting_Click" />
        <br />
        <asp:Label ID="LabelGreeting" Text="" runat="server" />
    </div>
    </form>
</body>
</html>

Erstellung des Workflow

Erstelle eine neue Activity mit Namen Greeting.xaml. Als erstes brauchen wir ein In-Argument und ein Out-Argument. Als In-Argument wird der Name unseres Nutzers übergeben. Das Out-Argument wird die Begrüßung speichern, die später auf unserer Webseite angezeigt wird.

Öffne den Arguments-Tab am unteren Ende des Designers. Das erste Argument hat den Namen ArgUserName, die Richtung In und den Argumententyp String. Das zweite Argumetn heißt Result, hat die Richtung Out und den Argumentypen String.
In beiden Fällen können die Defaultwerte leer gelassen werden. Das Ergebnis sollte wie folgt aussehen:

 

Creating the In and Out arguments

 

Füge eine Sequence Activity zum Workflow hinzu. Die Sequence Activity stellt sicher, dass die Kindelemente in der vorgegebenen Reihenfolge ablaufen.

 

Adding a Sequence Activity

 

Füge der Sequence Activity eine Assign Activity hinzu. Diese Activity wird die Begrüßung wird unserem vorher angelegten Result-Argument zugewiesen.
Die To-Eigenschaft soll unser Result-Argument sein. Die Value-Eigenschaft kann mit dem Expression Editor erstellt werden. Die folgende Abbilung zeigt das Ergebnis.

 

Assign the greeting to the Out argument

 

Bitte beachte, dass jeder Ausdruck im Workflow Designer in Visual Basic verfasst wird.
Das Endergebnis sollte folgendermaßen aussehen:

 

The finished workflow

 

Und jetzt: Kombinieren...

Um unsere Applikation zu vervollständigen, füge der Web-Applikation zum WorkflowLibrary-Projekt hinzu. Wir brauchen zusätzlich die WorkflowInvoker-Klasse. Also füge eine Referenz zur Assembly System.Activities hinzu.
Das Click-Event unseres Buttons sieht wie folgt aus:

protected void ButtonCreateGreeting_Click(object sender, EventArgs e)
{
    string username = TextBoxName.Text;
    Greeting greeting = new Greeting { ArgUserName = username };
    IDictionary<string, object> results = WorkflowInvoker.Invoke(greeting);
    LabelGreeting.Text = results["Result"].ToString();
}

Sieht das magisch aus? Nicht wirklich.
Als erstes holen wir uns den eingegebenen Namen aus der TextBox. Danach erstellen wir eine Instanz unseres Workflows und übergeben ihr den Nutzernamen als ein In-Argument. Um unseren Workflow zu starten benutzen wir die Invoke-Methode zusammen mit unserer Workflow-Instanz. Wir erhalten das Out-Argument als ein Dictionary, in dem der Schlüssel als string und der Wert als object abgelegt sind. Als letztes holen wir uns nur noch unser Result -Argument aus unserem Dictionary und weisen es unserem Begrüßungs-Label hinzu.
Das war's! Starte das Projekt! Das Ergebnis sollte wie folgt aussehen:

 

The result

 

Ein Blick zurück

Wir haben uns angeguckt wie man einen einfachen Workflow erstellt, der In und Out-Argument enthält und wie Werte zugewiesen werden. Wir haben auch gesehen wie man einen Workflow startet, wie man Argumente übergibt und wie man Resultate aus dem Workflow wieder rausbekommt. Auf der UI-Seite war nichts besonderes und das Vorgehen in anderen Technologien, wie bspw. Silverlight, ist ähnlich.

Siehe auch


Andere Sprachen

Dieser Artikel ist auch in den folgenden Sprachen verfügbar:

English (en-US)