Soll ich eine Zustandsmaschine oder eine Sequenz Workflow in WF verwenden?
Frage
Ich habe einen wiederholbaren Business-Prozess, den ich jede Woche im Rahmen meiner Konfigurationsmanagementaufgaben auszuführen. Der Prozess ändert sich nicht: Ich Änderung Details in Excel herunterladen, die Tabelle öffnen und Details zu einem Makro abschreiben basieren, erstellen Sie ein Word-Dokument von einer Agenda-Vorlage, aktualisieren Sie die Tagesordnung mit den Excel-Daten, erstellen Sie PDF-Dateien aus dem Word-Dokument, und mailen sie aus.
Dieser Prozess ist sehr einfach in einer Sequenz Workflow dargestellt und das ist, wie ich es habe bisher mit COM-Automatisierung der Excel und Word Stücke automatisch zu handhaben. Der Schraubenschlüssel in den Gängen ist, dass es ein Mensch Schritt zwischen „schaffen Agenda“ und „es auszusenden“, wobei ich die Änderungsdetails und formulieren Fragen über sie, die auf die Tagesordnung gesetzt werden. Im Moment habe ich eine Aktivität Suspend den Workflow zu unterbrechen, während ich dieses Stück des Prozesses manuell tun.
Meine Frage ist, soll ich meinen Workflow neu zu schreiben, um es eine Zustandsmaschine zu machen eine bewährte Methode für die menschliche Interaktion in einem Geschäftsprozess zu folgen, oder ist die Suspend-Aktivität eine vernünftige Lösung?
Lösung
Nein, ich glaube nicht, dass Sie eine Zustandsmaschine für diesen Workflow verwenden. Aber schlage ich die Suspend-Aktivität zu ändern, weil:
Die SuspendActivity Aktivität vorübergehend stoppt die Ausführung der aktuelle Workflow. Normalerweise verwenden Sie die SuspendActivity Aktivität spiegeln eine Fehlerbedingung, die erfordert Aufmerksamkeit durch eine Administrator.
Wenn ein Workflow Instanz wird suspendiert, ein Fehler ist, angemeldet. Sie können eine Mitteilung angeben String, den Fehler zu begleiten, um zu helfen der Administrator das Problem diagnostizieren mit dem SuspendActivity Fehler Eigentum. A suspendiert Workflow Instanz kann immer noch Nachrichten empfangen , die sich bis zum Workflow-Warteschlange gestellt wird neu gestartet. Der ganze Staat Informationen für die Workflow-Instanz gespeichert und wird, wenn die wieder Beispiel wieder aufgenommen wird (mit Lebenslauf).
Quelle: MSDN
Der typische Weg, um eine menschliche Aufgabe in einem Workflow (entweder Sequenz oder eine Zustandsmaschine) zum Hinzufügen ist ein externer Datenaustausch-Schnittstelle zu definieren und eine HandleExternalEvent Aktivität (und möglicherweise eine CallExternalMethod Aktivität) verwenden. Weitere Einzelheiten finden Sie in den folgenden Artikeln:
Andere Tipps
Update: Panos macht ein guter Punkt, um Aktivität Suspend. Ich bin damit einverstanden es hat einen anderen Zweck im Workflow-Automaten.
Wenn Sie das Gefühl haben, mehr über Workflow-Übergang zwischen verschiedenen Zuständen sich Gedanken, dann Zustandsmaschine Workflow ist ideal. Ansonsten ist Folge ganz gut.
Das Hauptproblem zu lösen Sie versuchen sollten, ist, dass der Arbeitsablauf sollte nicht einen Thread binden, während für die menschliche Interaktion (Thread Agilität) wartet. Wenn der Workflow idled wird und während dieser Zeit blieb (wie unter Verwendung von SqlWorkflowPersistenceService ), sollte es kein Problem sein.