2008-09-16 10 views
2

Ich habe einen wiederholbaren Geschäftsprozess, den ich jede Woche als Teil meiner Konfigurationsmanagementaufgaben ausführe. Der Prozess ändert sich nicht: Ich lade Änderungsdetails in Excel herunter, öffne die Tabelle und kopiere Details basierend auf einem Makro, erstelle ein Word-Dokument aus einer Agenda-Vorlage, aktualisiere die Agenda mit den Excel-Daten, erstelle PDFs aus dem Word-Dokument und mailen Sie sie aus.Soll ich eine Zustandsmaschine oder einen Sequenz-Workflow in WF verwenden?

Dieser Prozess ist sehr einfach in einem Sequenz-Workflow dargestellt und so habe ich es bisher, mit COM-Automatisierung, um die Excel- und Word-Stücke automatisch zu behandeln. Der Haken bei den Getrieben ist, dass es einen menschlichen Schritt zwischen "Agenda erstellen" und "sende es" gibt, wobei ich die Änderungsdetails überprüfe und Fragen über sie formuliere, die auf die Tagesordnung gesetzt werden. Ich habe derzeit eine Suspend-Aktivität, um den Workflow zu unterbrechen, während ich diesen Teil des Prozesses manuell mache.

Meine Frage ist, sollte ich meinen Workflow neu schreiben, um es zu einer State-Machine zu machen, um eine Best Practice für die menschliche Interaktion in einem Geschäftsprozess zu befolgen, oder ist die Suspend-Aktivität eine vernünftige Lösung?

Antwort

2

Nein, ich denke nicht, dass Sie für diesen Workflow eine Zustandsmaschine verwenden müssen. Aber schlage ich die Aktivität Suspend zu ändern, weil:

Die SuspendActivity Aktivität vorübergehend die Ausführung des aktuellen Workflow beendet. In der Regel verwenden Sie die Aktivität SuspendActivity widerspiegeln einen Fehlerzustand, der von einem Administrator erforderlich ist.

Wenn ein Workflow Instanz ausgesetzt wird, wird ein Fehler protokolliert. Sie können eine Nachricht Zeichenfolge angeben, um den Fehler zu begleiten, um der Administrator zu helfen, das Problem mit der Eigenschaft SuspendActivity Error zu diagnostizieren. Ein angehaltener Workflow Instanz kann weiterhin Nachrichten empfangen, die in der Warteschlange stehen, bis der Workflow neu gestartet wird. Alle Informationen des Status für die Workflowinstanz werden gespeichert und wiederhergestellt, wenn die Instanz wieder aufgenommen wird (mit Resume).

Quelle: MSDN

Der typische Weg, um eine menschliche Aufgabe in einem Workflow für das Hinzufügen (entweder Sequenz oder eine Zustandsmaschine) ist ein externer Datenaustausch-Schnittstelle und verwenden Sie eine HandleExternalEvent Aktivität (und möglicherweise zu definieren ein CallExternalMethod-Aktivität). Weitere Einzelheiten finden Sie in den folgenden Artikeln:

+0

Super, tolle Antwort. Vielen Dank. –

+0

Nützliche Links, danke. –

2

Update: Panos macht ein guter Punkt, um Aktivität Suspend. Ich stimme zu, dass es einen anderen Zweck im Workflow-Automaten hat.

Wenn Sie das Gefühl haben, dass Sie sich mehr Gedanken über den Workflow zwischen verschiedenen Zuständen machen, ist der Workflow für Zustandsautomaten ideal. Ansonsten ist die Reihenfolge in Ordnung.

Das Hauptproblem, das Sie lösen sollten, ist, dass der Arbeitsablauf keinen Thread binden sollte, während auf die menschliche Interaktion gewartet wird (Thread-Agilität). Wenn der Arbeitsablauf während dieser Zeit inaktiv ist (z. B. SqlWorkflowPersistenceService), sollte dies kein Problem darstellen.