Question

J'essaie d'utiliser Windows Workflow et j'ai un modèle qui ressemble à l'image dans le lien ci-dessous:
Capture d'écran du flux de travail

Après chacune des activités d'envoi ( GetSomthing , GetSomthingElse , GetSomeMoreStuff ), la même activité personnalisée est appelée ( LogSomthingBadHappened ).

Bien que cela ne semble pas si mal sur cette image dans mon modèle réel, l'activité personnalisée est un SequenceActivty, elle comporte plusieurs nœuds et lorsque ses répétitions 3 fois commencent à rendre le flux de travail très laid.

J'aimerais faire quelque chose comme ça:
Capture d'écran du flux de travail modifié

Les branches IfElse peuvent-elles être fusionnées comme ceci?
Devrais-je utiliser un flux de travail de machine d'état à la place (je ne l'ai pas encore compris?)

Était-ce utile?

La solution

Utilisez un gestionnaire de tâches FaultHandler sur le flux de travail et générez un type d'exception spécifique que le gestionnaire interceptera. Pas le plus gracieux, mais je pense que cela devrait fonctionner.

Autres conseils

Dans les workflows séquentiels, toutes les étapes doivent apparaître dans un ordre spécifique et le chemin d'exécution est régi exclusivement par des structures de contrôle (IF, WHILE).
Modifier le chemin d'exécution de la manière que vous décrivez équivaudrait à utiliser une instruction GOTO. dans le code impératif, qui, nous le savons, entraîne une complexité inutile.

Si les activités contenues dans SequenceActivity que vous devez exécuter à différentes étapes de votre flux de travail sont exactement les mêmes, vous pouvez les intégrer dans une activité personnalisée . De cette façon, il est plus facile de les gérer car ils sont contenus dans une seule unité logique.
Dans le code impératif, cela revient à refactoriser une partie du code dupliqué dans une méthode, qui est ensuite appelée à plusieurs endroits.

Une autre solution qui pourrait fonctionner consiste à intégrer votre activité LogSomthingBadHappened dans un flux de travail personnalisé et à l'inclure plusieurs fois. Plusieurs éléments à surveiller: Le sous-flux est exécuté de manière asynchrone , si l'activité LogSomthingBadHappened a besoin d'informations d'état provenant du flux de travaux principal, il peut s'avérer difficile de les copier dans le sous-flux de travaux.

Je n'ai pas essayé cela, il se peut donc que cela ne fonctionne pas.

Je pense que la réponse de gbanfill pointe dans la bonne direction.

Pour généraliser, je définis le problème comme suit:

Existe-t-il un moyen de définir un groupe d'activités à exécuter à plusieurs endroits d'un flux de travail?
Les autres exigences sont:

  1. Le groupe d'activités ne doit être défini qu'en XAML, c.-à-d. pas de code.
  2. Le type d'entrée dans ce groupe sera bien sûr fixe, mais les valeurs réelles devraient dépendre de l'appel (comme appeler une fonction).

La meilleure solution consiste peut-être à définir des sous-flux de travail et à créer une activité personnalisée qui instancierait le sous-flux de travail et à attendre son achèvement avant de continuer.

Cette activité personnalisée doit comporter au moins deux paramètres: l'ID de sous-workflow et les paramètres d'entrée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top