2009-07-06 11 views
0

Ich habe eine Windows Workflow Foundation (3.0) Zustandsmaschine, in der ich bestimmte Zustände brauche, um den Staat basierend auf dem Alter des Staates zu ändern. Wenn der Arbeitsablauf beispielsweise in den Status X eintritt, muss der Benutzer innerhalb von 5 Tagen reagieren. Wenn dies nicht erfolgt ist, muss der Arbeitsablauf in den Zustand Y übergehen. Was ich also will, ist ein Zustand mit einer EventDriven-Aktivität, der die Aktion des Benutzers behandelt, und eine Sequenz-Aktivität mit einer Delay-Aktivität, die eine SetState-Aktivität hat verursacht den Statusübergang, wenn der Benutzer ihn nicht rechtzeitig ausgeführt hat.Wie bekomme ich eine Sequenz in eine Windows-Workflow-Zustandsmaschine?

States akzeptieren keine Sequenzaktivität direkt, also habe ich versucht, diese Logik in die StateInitialization-Aktivität zu setzen, aber sie lässt keine Verzögerungen zu. Ich könnte die Verzögerung in den vorherigen Zustand und eine andere EventDriven-Aktivität versetzen und dann in den jeweils gültigen Status übergehen, der aber nicht wirklich zum Geschäftsablauf passt.

Gibt es eine Möglichkeit, dies in State Machines zu tun oder sollte ich einen sequenziellen Arbeitsablauf verwenden?

Antwort

1

Sie können dies einfach mit State Machine Workflows erreichen.

Sie müssen eine StateInitializationActivity und eine EventDrivenActivity in Ihre Zustände einfügen. Die EventDrivenActivity akzeptiert eine Delay-Aktivität, legt die Logik nach dem Timeout dort ab, setzt beispielsweise einen anderen Zustand. Wenn der Zeitgeber früher als die Aktivitäten innerhalb der StateInitializationActivity abläuft, wird der Status geändert.

+0

Danke Kay. Ich fand die gleiche Lösung hier http://www.imason.com/blogs/jim_schwartz/archive/2008/12/15/repeating-a-state-machine-activity-indefinitely.aspx und es funktioniert (so verwende ich es) aber was ist das Ereignis, das die EventDrivenActivity antreibt? Im Rest meiner App feuere ich Ereignisse von einer Webseite ab. Diese Ereignisse werden dann von der betreffenden Aktivität im aktuellen Status behandelt. –

+1

Das Ereignis, das die EventDrivenActivity auslöst, ist die abgelaufene Verzögerungszeit. In einer EventDrivenActivity können Sie eine Aktivität setzen, die IEventActivity wie HandleExternalEventActivity, DelayActivity oder WF 3.5 ReceiveActivity implementiert. –

Verwandte Themen