2011-05-25 13 views
11

Actualmente estamos construyendo una aplicación que hace uso de un proceso de aprobación no simple, que implica múltiples niveles de aprobación, volviendo, revisión, notificaciones, etc ..¿Cuál es el mejor diseño para una aplicación web que adopta WF?

Debido a dicho requisito, se les pidió que hacer uso de un marco de flujo de trabajo también para facilitar la transparencia del proceso.

En el prototipo hemos incorporado con éxito el flujo de trabajo y funciona bien. sin embargo, no podemos determinar las acciones que deberían estar disponibles para el usuario. Por ejemplo, tengo las siguientes operaciones de recepción: create(), managerApprove(), RAApprove(), ORMApprove() ... ahora si las llamo por orden, usando el nombre de usuario correcto, entonces funcionarán. Obviamente, si no los llamo por orden, arrojarán una FaultException porque no está en el estado correcto. La pregunta es, ¿cómo sabré qué funciones están disponibles para exponer en la interfaz de usuario? Por ejemplo, si actualmente está esperando la aprobación del administrador, simplemente muestre un botón de aprobación para el administrador ...

Como solución alternativa, he creado otro servicio WCF que recupera los mismos datos de la base de datos y luego determina el estado correcto de la IU (qué acciones puede realizar el usuario). Creo que esto es una duplicación de lógica, ya que eso ya se supone en la WF.

Además, si el WF cambia, entonces mi servicio separado de WCF podría romperse. Por ejemplo, si cambio el orden de aprobación en el flujo de trabajo, entonces también necesito actualizar la lógica en el servicio WCF. De lo contrario, mostraría un estado de página no válida y al hacer clic en aprobar invocará el método incorrecto y provocará una excepción de falla.

Cualquier ayuda será muy apreciada ... Soy realmente nuevo en WF4.

ACTUALIZACIÓN:

Mi colega poner mi pregunta de esta manera:

¿Cuál es el mejor diseño para una aplicación web que adopta WF?

Las principales razones por las WF se está considerando - Los flujos de trabajo involucrados están ejecutando a largo - Los flujos de trabajo son los flujos de trabajo humanos - que necesitan para coordinar las acciones de las personas reales - Proceso de Transparencia

Además, ¿cómo debería integrar el flujo de trabajo con la interfaz de usuario? ¿Cómo sabrá la IU en qué estado debería estar y qué páginas mostrar qué usuarios?

Respuesta

5

El flujo de trabajo en sí no expone la información directamente. Está allí ya que cada Receive pendiente es un marcador nombrado y el nombre del marcador contiene la acción SOAP que admite, así como el contrato de servicio y el espacio de nombres. La forma más sencilla de hacerlo es agregar SqlWorkflowInstanceStore a WorkflowServiceHost y verificar la columna con los marcadores pendientes. No es perfecto ya que esto le dará la información tal como fue persistida por última vez, que no es necesariamente el estado actual, pero me ha funcionado en una serie de aplicaciones. Solo asegúrese de configurar TimeToPersist a un valor bastante bajo y agregue algunas actividades de Persist en lugares estratégicos.

+0

Supongo que es una forma. pero se siente como un truco. – Mel

+0

Tienes razón porque es. Lo que hace el trabajo si no hay una buena manera de hacerlo. – Maurice

+0

Tenía la esperanza de que hubiera una mejor manera ... Estoy empezando a darme la impresión de que WF realmente está perjudicando el diseño ... parece que estamos haciendo lo correcto al usar WF pero también forzados a hacer cosas "incorrectas" como un efecto secundario. – Mel

0

Un enfoque muy simple sería simular el flujo de trabajo administrando el estado de las aprobaciones. Imagine que tiene diferentes botones/páginas para que diferentes usuarios aprueben diferentes etapas ("crear", "aprobación de gerente", "aprobación de RA", etc.) del proceso de aprobación. Este es un enfoque muy antiguo de la escuela.

Si utiliza este enfoque, deberá distribuir su flujo de trabajo (lógica/proceso) en diferentes lugares (páginas).Obviamente, esta es una desventaja de este enfoque, especialmente cuando su flujo de trabajo cambia mucho o sus soluciones necesitan ejecutar diferentes versiones de un flujo de trabajo.

Si desea utilizar Workflow Foundation, la manera más fácil es la sugerida por Maurice.

La otra opción es utilizar otras herramientas que escalarían más y son más flexibles que WF. He usado WF (aunque no la última versión), BizTalk y SharePoint.

Si su solución requiere interactuar con otras aplicaciones, recomiendo usar BizTalk.

Cuestiones relacionadas