2008-09-16 4 views
2

J'ai un processus métier reproductible que j'exécute chaque semaine dans le cadre de mes responsabilités de gestion de la configuration. Le processus ne change pas: je télécharge les détails de modification dans Excel, ouvre la feuille de calcul et copie les détails en fonction d'une macro, crée un document Word à partir d'un modèle d'agenda, mets à jour l'agenda avec les données Excel, Envoyez-les par email.Dois-je utiliser une machine d'état ou un flux de travail de séquence dans WF?

Ce processus est très facilement représenté dans un flux de travail séquentiel et c'est ainsi que je l'ai fait jusqu'à présent, avec COM automation pour gérer les pièces Excel et Word automatiquement. La clé dans les engrenages est qu'il y a un pas humain entre «créer un agenda» et «l'envoyer», dans lequel je passe en revue les détails du changement et je formule des questions à leur sujet, qui sont ajoutées à l'ordre du jour. J'ai actuellement une activité de suspension pour suspendre le flux de travail pendant que je fais manuellement cette partie du processus. Ma question est la suivante: est-ce que je devrais réécrire mon flux de travail pour en faire un automate à suivre une bonne pratique pour l'interaction humaine dans un processus métier, ou l'interruption est-elle une solution raisonnable?

Répondre

2

Non, je ne pense pas que vous deviez utiliser une machine d'état pour ce flux de travail. Mais, je propose de modifier l'activité de suspension parce que:

L'activité SuspendActivity arrête temporairement l'exécution du flux de travail actuel . En général, vous utilisez l'activité SuspendActivity à reflète une condition d'erreur que requiert l'attention par un administrateur .

Lorsqu'une instance de workflow est suspendue, une erreur est enregistrée en . Vous pouvez spécifier un message chaîne pour accompagner l'erreur pour aider l'administrateur à diagnostiquer le problème avec la propriété SuspendActivity Error . Une instance de workflow suspendu peut toujours recevoir les messages qui sont mis en file d'attente jusqu'à ce que le workflow soit redémarré. Toutes les informations d'état pour l'instance de workflow sont enregistrées et sont rétablies lorsque l'instance est reprise (à l'aide de la reprise).

Source: MSDN

La façon typique pour ajouter une tâche humaine dans un flux de travail (soit la séquence ou machine d'état) est de définir une interface de données externe Exchange et d'utiliser une activité HandleExternalEvent (et peut-être un CallExternalMethod). Pour plus de détails, s'il vous plaît consulter les articles suivants:

+0

Impressionnant, réponse géniale. Merci beaucoup. –

+0

Liens utiles, merci. –

2

Mise à jour: Panos fait un bon point sur l'activité Suspend. Je suis d'accord qu'il a un but différent dans l'automate de flux de travail.

Si vous pensez que vous vous inquiétez davantage de la transition du workflow entre différents états, le flux de travail de la machine d'état est idéal. Sinon, la séquence est très bien.

Le principal problème que vous devriez essayer de résoudre est que le flux de travail ne doit pas bloquer un thread en attendant l'interaction humaine (agilité du thread). Si le flux de travail est inactif et persiste pendant ce temps (comme l'utilisation de SqlWorkflowPersistenceService), cela ne devrait pas poser de problème.

Questions connexes