Eine der Verbesserungen von VS 2010 die auf uns zukommen, ist die überarbeitete Workflowfoundation. Und da muß ich sagen, diese wird für uns Entwickler endlich verwendbar. Diesesmal ist es wirklich so, dass man Workflows designed und diese dann im Prinzip schon laufen ohne sich noch um viel drumherum kümmern zu müssen.
Anhand eines kleinen Authentifizierungsbeispieles möchte ich zeigen, wie einfach es nun geworden ist. Natürlich reizt dieses Beispiel bei weitem nicht den Funktionsumfang aus, aber man bekommt einen ersten Eindruck.
Design des Workflows
Zuallererst legt man im VStudio ein neues Workflow Projekt an, in diesem Fall ein Sequence Workflow.
Ist das Projekt geladen, wird ein Basis Workflow ohne Funktion angezeigt. Zuallererst wollen wir den Benutzernamen überprüfen und im nächsten Schritt das Passwort. Dazu wird die IF – Bedingung verwendet.
Da in diesem Beispiel an den Workflow Parameter übergeben werden, müssen diese ebenfalls definiert werden.
Dazu gibt es im Workflow Designer eine Möglichkeit lokale Variablen und Übergabe Parameter zu erstellen.
Klappt man nun den Workflow auf erhält man folgende Ansicht.
Diese zeigt, dass die IF Bedingung aus einer “Condition” und einem “Then”, “Else” Zweig besteht. Wie in jeder IF Anweisung wird eine Bedingung angegeben die auf True/False überprüft wird. Je nachdem wird dann der Then oder Else Zweig verwendet. Unsere Condition heisst Username = “Hubert”. Hier möchte ich noch anmerken, dass zum Eingeben von Conditions ein vollständiger VB Editor zur Verfügung steht der auch Intellisense unterstützt.
Ist unsere Bedingung gültig, wird die nächste IF Bedingung aufgerufen, welche das Passwort überprüft. Ist der Benutzername falsch, wird eine Exception ausgelöst und der Workflow abgebrochen.
Ist das Passwort ebenfalls gültig, wird die Variable Passed auf TRUE gesetzt. Ansonsten auf FALSE und der Workflow beendet.
Anpassnungen im Code
Nachdem unser Workflow nun designed ist, müssen wir einige Änderungen am Code vornehmen, damit die Parameter an den Workflow übergeben werden.
Dictionary<string, object> objParameters = new Dictionary<string, object>();
objParameters.Add("Username", Console.ReadLine());
objParameters.Add("Password", Console.ReadLine());
objParameters.Add("Passed", false);
Dazu wird ein Dictionary Objekt verwendet. Die Items im Dicitonary haben als Key den selben Namen wie die im Workflow angelegten Argumente – anhand dieses Names passiert letztendlich das Matching.
WorkflowInstance myInstance = new WorkflowInstance(new Sequence1(), objParameters);
Um die Werte an den Workflow zu übergeben, muß man noch das erstellen der Instanz um das Dictionary erweitern.
myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e) {
syncEvent.Set();
Console.WriteLine(e.Outputs["Passed"].ToString());
};
Ist der Workflow durchgelaufen, wird der OnCompleted Event aufgerufen in dem man mittels e.Outputs auf das Result Dictionary zugreifen kann – in meinem Fall auf die Variable Passed, die im Workflow gesetzt wurde.
Conclusio
Wie man anhand dieses Beispieles sieht, kann man sehr einfach und schnell einen Workflow designen und diesen verwenden. Auch bei so einem einfachen Beispiel freut man sich schon darauf WF4 in zukünftigen Projekten einzusetzen. Das schaut nach einem sehr mächtigen Werkzeug aus!