Otro gran anuncio en el PDC. Dentro de WinFX se incluirá un engine genérico de workflow llamado Windows Workflow Foundation. Además de convertirse en el workflow core de todos los productos de Microsoft (Biztalk, Sharepoint, Office) podrá ser utilizado para implementar workflows personalizables dentro de nuestras aplicaciones. Esto tiene unas consecuencias muy importantes, porque muchas veces nuestra aplicación necesita "parametrizar" la lógica de negocio y hasta ahora teníamos 3 opciones:
* Utilizar Biztalk. Aunque es la solución usada en muchas ocasiones no es su escenario más indicado. Biztalk trata de integración y orquestación de procesos, no de una lógica de negocio interna a una sola aplicación.
* Implementarlo nosotros. Ufff, lo he visto muchas veces y es algo muy complicado si queremos hacerlo bien. No sólo tenemos que guardar la definición del proceso en la base de datos o en un XML, también necesitamos un editor gráfico que permita modelizar ese proceso y un engine potente que permita ejecutar de forma eficiente el workflow.
* No hacer nada. Muchas veces era lo recomendable. Si nuestro proceso cambia poco podemos permitirnos modificar la lógica de la aplicación directamente en el código y recompilarla.
Workflow Foundation nos da otra opción más mucho más aconsejable. Se trata de un engine que podemos llamar directamente desde nuestra aplicación (in-process) y que es capaz de ejecutar un workflow definido en un fichero XML. El worflow está definido por actividades que no son más que clases .NET que contienen la lógica a ejecutar. Por defecto tenemos multitud de actividades (envío de email, transacciones, acceso a datos, llamadas a servicios web...). El workflow permite añadir control de flujo (if...else, bucles, paralelismo, etc.) y puede mantener el estado en una base de datos. Por supuesto tenemos un diseñador que está dentro de Visual Studio y con el que podemos definir y modificar workflows de forma visual. Tiene detalles muy buenos, como el poder definir reglas que se puedan modificar externamente sin cambiar el workflow, la depuración directa desde Visual Studio, trazas, posibilidad de incrustar el diseñador en otra aplicación y un montón de cosas más que puedes consultar aquí.