7/3/2007
Microsoft ha publicado una solución para mostrar un conjunto de funcionalidades del Framework 3.0 y Windows Vista en www.dinnernow.net
Disclaimer: La solución es un buen ejemplo de las cosas que se pueden hacer con la plataforma pero no siempre es una guía de buenas prácticas para realizar una aplicación.
Estuve mirando la parte que tiene que ver con Workflow y encontré algunas cosas interesantes para ver que describo a continuación
La solución en "C:\Dinnernow\solution\DinnerNow – OrderProcessing" es la que contiene lo asociado al workflow en WF de DinnerNow.
Tiene 3 folders:
El workflow principal ProcessOrder utiliza las siguientes activities:
- SaveOrderActivity: Simplemente graba la orden. Lo único interesante aquí es el manejo de una dependencyproperty de tipo clase (aunque no está bien resuelto)
- splitOrdersActivity: Pasa de la Orden que entra a una orden interna (una especie de mapping). También lo único que hace es manejar un par de DependencyProperties personalizadas.
- Replicator: Utiliza el replicator de WF para procesar cada una de las ordenes del array construido en el activity anterior
- OrderPlaceHolder: Un activity de tipo sequence que en realidad solamente se utiliza para inicializar la orden que se va a trabajar en cada iteración del replicador. El replicador en la inicialización de cada Child llena la propiedad de esta activity.
- InvokeWorkflow: Llama al workflow de máquina de estados
- Code Activity: Actualiza la instancia de ejecución en una variable (no sé el objetivo)
- InitiateDelivery: Una sequence activity personalizada que en realidad no hace nada internamente.
- CreateCorrelation: una activity personalizada que hereda de CallExternalMethod. Lo interesante de esta activity es que la interfaz a la que se asocia y el método que invoca están directamente conectados por código en la activity. Además, al hacer override del MethodName y del InterfaceType y ponerle BrowsableAttribute(false), no se ven en el editor (y no se pueden cambiar J)
- SubWorkflowCompleted: una activity personalizada que hereda de HandleExternalActivity y tiene el mismo truco que en la anterior para la interfaz y el evento.
- LogToConsole: Actividad de log simple, hereda de activity y lo único que hace es escribir en la consola el mensaje que se puede poner en el workflow.