Tag Archive for workflow foundation

Workflow Foundation, Cuándo, Cómo, Dónde

Una pregunta común que recibo a diario es "cúando debo usar Workflow Foundation, en mi lógica de negocio? en mi cliente? como un almacen de persitencia?". Hace unos días un amigo me escribió un correo comentandome esto:

“Entonces en Workflow Foundation debo reemplazar mi lógica de negocio hecha en código por un workflow secuencial”

Esta pregunta coincide con algo sumamente recurrente que suelo escuchar cada vez que hablo acerca de Workflow Foundation: Dónde encaja Workflow Foundation en mi aplicación

Recuerdo a finales del año 2005 cuando las primeras Beta de la Framework 3.0 o “previews” salieron al aire, recuerdo haberme emocionado muchísimo al leer sobre las “Foundations” (de hecho, en ese tiempo estaba cambiando de plataforma y vivía en un período gris y no podía evitar el comparar cosas en .Net con cosas en lo “otro” en que trabajaba). Una de las cosas que más me llamó la atención fue Workflow Foundation, probablemente porque en uno de nuestros proyectos anteriores pasé un buen tiempo desarrollando una máquina secuencial de flujo y bueno me pareció excelente el que ahora una framework incluyera todo un toolset y “runtime” para el manejo de flujos de trabajo.

Hagamos antes un repaso rápido de qué involucra Workflow Foundation (para conocer un poco más acerca de que hace o se trata, recomiendo este link): http://msdn.microsoft.com/en-us/netframework/aa663328.aspx

  • Un runtime para ejecución de procesos (workflows)
  • Una serie de bloques o actividades básicas para la construcción de procesos (Activities)
  • Un toolset completo para el manejo y diseño de procesos (Addins, Services)

Adicionalmente la framework completa puede extenderse, o sea, embeber el runtime en nuestra aplicación, extender los flujos actuales, crear nuestras propias actividades y servicios y hasta embeber el designer de Workflows en nuestra aplicación.

Bien, entonces nace la pregunta de oro, ¿cuándo usar Workflow Foundation?. Bien, podríamos decir que WF puede usarse en las siguientes situaciones

  • Orquestación de pasos o actividades dentro de un modelo de negocio
  • Visibilidad del proceso del negocio
  • Persistencia en un proceso de negocio

Y bueno, para evitar confusiones, vale la pena mencionar cuándo a mi criterio no debe utilizarse Workflow Foundation

  • Para desarrollar la lógica de negocio del sistema
  • Para desarrollar una herramienta de programación para personal no técnico
  • Para reemplazar un DSL ya establecido en la organización
  • Para reemplazar la persistencia de otros aspectos que no están relacionados al proceso en si

Esto es importante, especialmente la primera parte, he visto muchos sistemas que buscan reemplazar o diseñar la lógica de negocio del sistema completamente desde cero usando WF, creo que ese es el ingrediente principal para futuros dolores de cabeza.

En vez de reemplazar o crear la lógica de negocio completamente desde WF, porqué mejor no “orquestamos” esa lógica mediante WF? Un buen indicador de que estamos empleando mal WF es la proliferación de codebehind en el Workflow y de Code Activities. Un buen Workflow debe ser netamente declarativo, eso elimina el uso de Code Activities, de hecho, en Workflow Foundation 4.0 las Code Activities ya no existen.

En resumidas cuentas, Workflow Foundation deben ser un agregado a la lógica de nuestra entidad de negocio y no el core de ella. Debe funcionar como un coordinador entre los pasos o secuencias de cada uno de los servicios o actividades de un proceso actual, debe ser una herramienta de extensión, no una central del desarrollo.

Bueno, como siempre, cuéntenme sus ideas, perspectivas o comentarios al respecto. Soy todo oídos :)

Book Review: Programming Windows Workflow Foundation

Programming Windows Workflow Foundation Días atrás terminé de leer uno de mis primeros libros sobre Workflow Foundation, “Programming Windows Workflow Foundation – Practical WF Techniques and Examples using XAML and C#” de K. Scott Allen publicado por Packt Publishing. Un libro simple, sencillo, corto y conciso para aquel que simplemente ha escuchado acerca de Workflow Foundation y quiere aprender de qué se trata y como explotarlo o sacarle provecho a esta tecnología. El libro, como muchos otros de la Editorial Packt, es un libro básico, para principiantes pero a la vez no se queda corto, profundiza en las áreas que debe hacerlo y le deja la oportunidad al lector de sumergirse por su propia cuenta e ir más allá de los ejemplos expuestos en el libro (ejemplos relativamente sencillos y fáciles de completar, nada del otro mundo). El libro es corto (a mi criterio una gran ventaja ya que muchos quieren algo de “fácil digestión” y que puedan leer rápidamente un fin de semana) y consta de sólo 8 capítulos con alrededor de 233 páginas que incluyen tópicos tales como: introducción a la tecnología, creación de workflows, explicación de cada una de las actividades de la librería base de actividades, creación de actividades customizadas, hosting del runtime de workflow foundation, workflows secuenciales y de estado, intercomunicación de workflows y manejo de reglas y condiciones. En general cosas que me gustaron del libro:

  • El libro es bastante corto y de muy fácil lectura
  • El libro es bastante simple y sus ejemplos sencillos y fáciles de hacer
  • La narrativa del autor es sumamente sencilla de seguir
  • El libro contiene la información básica y necesaria para comenzar a usar Workflow Foundation

Sin embargo, creo que muchos de estos puntos también son la debilidad del libro, por ejemplo

  • El libro no incluye información útil sobre como efectivamente hacer hosting de Workflow Foundation en una aplicación web
  • El libro fue hecho y esta orientado al desarrollo con Workflow Foundation 3.0, en la versión 3.5 las cosas (especialmente interoperatibilidad con servicios) cambiaron drásticamente
  • El libro no ahonda en algunos detalles a consideración del autor, por ejemplo, como se trabajan los servicios (especialmente web services) en un Workflow Secuencial
  • Creo que al capítulo de extensión de actividades (Actividades customizadas) le falto un poco más de contenido, es decir, ¿cuándo necesitamos una actividad customizada? o cómo utilizar binders propios de Visual Studio en nuestras actividades.

Bueno, en general, si usted ya es un feliz usuario de Workflow Foundation 3.0 no le recomendaría este libro, probablemente para referencia rápida; pero si usted esta pensando en conocer Workflow Foundation, ya sea para sus aplicaciones actuales o para un uso futuro (por ejemplo, no entiende WF en Sharepoint) definitivamente lo recomiendo, es algo que en un descansado fin de semana puede leer y comprender, en fin, una excelente guía rápida de aprendizaje.

Advertencia: Encontré entre mis post guardados esta review pero al parecer nunca la publiqué, la review es de muchos meses atrás.

Windows Workflow InvokeWebService Activity and Client Credentials

En los últimos meses he estado ya más que aburrido en Microsoft Workflow Foundation, una relativamente impresionante framework de creación de flujos de trabajo de forma declarativa (o por lo menos así lo mencionan teóricamente, luego conversamos más de esto). Hoy mi cliente me menciona que uno de sus workflows no funciona, si, así de descriptivo…

Revisando el tracelog del proceso me doy cuenta que simplemente se debe a que dentro del Workflow existe una InvokeWebService Activity, yep, esta es una actividad de Workflow Foundation 3.0 diseñada para consumir viejos servicios ASMX.

Como recordaremos nuestro viejo ASMX no soporta configurar cosas como credenciales desde el archivo de configuración (como lo soporta WCF obviamente) y esto puede hacerse fácilmente desde código, el problema es que a “simple vista” nuestra InvokeWebService Activity no presenta una forma de cambiar las credenciales, es cuando un poco de lectura en MSDN nos ayuda enormemente :)

Bien, si bien no podemos “settear” las credenciales de un webservice directamente en el designer, lo podemos hacer en “código” antes que el servicio sea invocado, eso lo logramos con un handler al evento Invoking

Lo demás es simple manejo de credenciales en ASMX webservices.

// C# Code: Dentro del codebehind del workflow
protected void InvokeWebService_Invoking(Object sender, InvokeWebServiceEventArgs e) {
    var proxy = e.WebServiceProxy as MyWebServiceDefinition;
    if (proxy == null) return;
    proxy.ClientCrendetials =
        new System.Net.NetworkCredential("usuario", "password");
}
' VB Code
Public Sub InvokeWebService_Invoking(e As InvokeWebServiceEventArgs)
    Dim proxy = CType(e.WebServiceProxy, MyWebServiceDefinition)
    If proxy IsNot Nothing Then
        proxy.Credentials = New System.Net.NetworkCredentials("usuario", "password")
    End If
End Sub

Ojo con las definiciones anteriores, WebServiceProxy retorna tipo Object, por lo que hay que castearlo al tipo del webservice en específico.

Suficiente Workflow Foundation por hoy… Por cierto, les interesa el tema? ¿les gustaría más de WF en el futuro?

Saludos!