Pregunta

Estoy tratando de usar Windows Workflow y tengo un modelo que se parece a la imagen en el siguiente enlace:
Captura de pantalla del flujo de trabajo

Después de cada una de las actividades de envío ( GetSomthing , GetSomthingElse , GetSomeMoreStuff ) se llama a la misma actividad personalizada ( LogSomthingBadHappened ).

Si bien puede que no se vea tan mal en esta imagen en mi modelo real, la actividad personalizada es una SequenceActivty, tiene bastantes nodos, y cuando se repite 3 veces comienza a hacer que el flujo de trabajo se vea muy feo.

Me gustaría hacer algo como esto:
Captura de pantalla editada del flujo de trabajo

¿Se pueden fusionar las ramas IfElse de esta manera?
¿Debería usar un flujo de trabajo de la máquina de estado en su lugar (aún no lo he resuelto)?

¿Fue útil?

Solución

Utilice un FaultHandler en el flujo de trabajo y arroje un tipo de excepción específico que el controlador detectará. No es el más elegante, pero creo que debería funcionar.

Otros consejos

En los flujos de trabajo secuenciales, todos los pasos deben aparecer en un orden específico, y la ruta de ejecución está regulada exclusivamente por las estructuras de control (IF, WHILE).
La alteración de la ruta de ejecución de la manera que usted describe sería como usar una instrucción GOTO en código imperativo, que sabemos conduce a una complejidad innecesaria.

Si las actividades contenidas en la SequenceActivity que necesita ejecutar en diferentes etapas de su flujo de trabajo son exactamente las mismas, puede incrustarlas en una actividad personalizada . De esta manera, es más fácil administrarlos, ya que están contenidos en una sola unidad lógica.
En el código imperativo, esto sería como refactorizar una porción de código duplicado en un método, que luego se invoca en varios lugares.

Otra alternativa que podría funcionar es poner su actividad LogSomthingBadHappened en un flujo de trabajo personalizado e incluirla varias veces. Hay que tener en cuenta varias cosas: el subflujo de trabajo se ejecuta asincrónicamente , si la actividad LogSomthingBadHappened necesita información de estado del flujo de trabajo principal, copiarlo en el flujo de trabajo secundario puede ser difícil.

No he intentado esto, por lo que puede que ni siquiera funcione.

Creo que la respuesta de gbanfill apunta a la dirección correcta.

Para generalizar, defino el problema como:

¿Hay alguna manera de definir un grupo de actividades que se ejecutarán en varios lugares de un flujo de trabajo?
Otros requisitos son:

  1. El grupo de actividades debe definirse solo en XAML, es decir, sin código.
  2. El tipo de entrada a este grupo, por supuesto, será fijo, pero los valores reales dependerán de la llamada (como llamar a una función).

Quizás la forma de hacerlo es definir subflujos de trabajo y crear una actividad personalizada que cree una instancia del subflujo de trabajo y espere a que se complete antes de continuar.

Esta actividad personalizada debe tener al menos dos parámetros: el ID del subflujo de trabajo y los parámetros de entrada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top