.NET Fx: Casos de estudio de uso de Windows Workflow Foundation!

Muchas veces me he preguntado (y me han preguntado) hasta que punto Windows Workflow Foundation (WF) ha tenido éxito como tecnología para el modelado de flujos de trabajo más allá del uso extendido que tiene en plataformas que lo implementan y usan como SharePoint, Dynamics, TFS o System Center. Y hoy, a través de este post Jurgen Willis por fin he encontrado una buena respuesta ya que recopila varios casos de estudio de uso de WF fuera de estas plataformas. Sin duda, una buena referencia qué tener a mano para cuando alguien nos haga la pregunta de si se usa o no WF en desarrollos a medida.

VS 2010 & .NET Framework 4.0: Novedades en WF 4.0 (IV)!

Continuando con la serie de posts (puedes acceder al último post de la serie desde este enlace) sobre novedades de Windows Workflow Foundation 4.0 (WF 4.0), en esta ocasión os dejo un par de recursos más que interesantes para continuar con la inmersión en la tecnología de creación de flujos de trabajo de Microsoft:

image004.png

Y hasta aquí llega este nuevo post sobre novedades de WF 4.0. Espero que os haya resultado interesante.

VS 2010 & .NET Fx 4.0: Novedades en WF 4.0 (III)!

Siguiendo con la serie de post en torno a las novedades de Windows Workflow Foundation 4.0 (WF 4.0, puedes leer también las partes I y II), en esta ocasión voy a tratar sobre lo fácil que resulta definir argumentos y variables en Visual Studio 2010 para poder comunicarnos con un workflow de WF 4.0. Empecemos.

Diseñando el workflow

Como siempre, lo primero que vamos a hacer es diseñar el workflow de WF 4.0 con Visual Studio 2010:

  • Iniciamos Visual Studio 2010 y creamos un proyecto de workflow (de tipo secuencial).
  • En el diseñador de workflows, arrastramos una actividad de tipo Assign a la superficie de diseño.
  • Para crear argumentos y variables en un workflow de WF 4.0, disponemos en el diseñador de dos botones que nos permiten añadirlos de forma muy sencilla.
  • Por ejemplo, para añadir argumentos basta con pulsar el botón Arguments y añadir los argumentos que necesitemos. Estos pueden ser de entrada o de salida. En nuestro caso, crearemos un argumento de entrada y otro de salida.
  • A continuación, configuramos la propiedad To de la actividad Assign añadiéndole uno de estos argumentos que acabamos de crear utilizando para ello el editor de expresiones (os recuerdo que dicho editor usa sintaxis VB.NET).
image image image
  • Seguimos el mismo procedimiento para configurar la propiedad Value de la actividad Assign.

image

Codificando la gestión de los argumentos

Una vez que hemos definido los argumentos de entrada y salida del workflow, ya solo nos falta definir las clases de gestión correspondientes:

  • Clase para el argumento de entrada, en la que simplemente definiremos un constructor en el que añadimos la propiedad de entrada del workflow:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace WFActivitiesDemo

{

    public class SayHelloInArgs: Dictionary<string,object>

    {

        public SayHelloInArgs(string name)

        {

            this.Add("Name", name);

        }

    }

}

  • Clase para el argumento de salida, un poco más compleja que la anterior ya que tenemos que realizar la asignación del valor de la propiedad. Fijaros también que en este caso el constructor de la clase es un tipo complejo frente al caso del argumento de entrada.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace WFActivitiesDemo

{

    class SayHelloOutArgs

    {

        IDictionary<string, object> _outArgs = null;

        public SayHelloOutArgs(IDictionary<string, object> outArgs)

        {

            if (outArgs == null)

            {

                throw new ArgumentNullException("outArgs");

            }

            _outArgs = outArgs;

        }

        public string Greeting

        {

            get

            {

                return _outArgs["Greeting"].ToString();

            }

        }

    }

}

Probando el workflow

Una vez que hemos definido las clases de gestión de los argumentos de entrada y salida, solo nos queda probar el workflow. Para ello:

  • Modificamos Program.cs para que por una parte recoja la entrada de usuario en el argumento de entrada definido y por otra genere la salida definida y en la que se utiliza el argumento de salida.

namespace WFActivitiesDemo

{

    using System;

    using System.Linq;

    using System.Threading;

    using System.Activities;

    using System.Activities.Statements;  

    class Program

    {

        static void Main(string[] args)

        {

            AutoResetEvent syncEvent = new AutoResetEvent(false);  

            Console.Write("Introduce tu nombre: ");

            string name = Console.ReadLine();

            string greeting=null;

            WorkflowInstance myInstance = new WorkflowInstance(new Sequence1(),

                new SayHelloInArgs(name));

            myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e)

            {

                SayHelloOutArgs outArgs =

                    new SayHelloOutArgs(e.Outputs);

                greeting = outArgs.Greeting;  

                syncEvent.Set();

            };

            myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e)

            {

                Console.WriteLine(e.UnhandledException.ToString());

                return UnhandledExceptionAction.Terminate;

            };

            myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)

            {

                Console.WriteLine(e.Reason);

                syncEvent.Set();

            };

             myInstance.Run();  

            syncEvent.WaitOne();  

            Console.WriteLine(greeting);

            Console.ReadLine();  

        }

    }

}

 
Finalmente, el resultado de ejecución del workflow es el siguiente:
image

Y hasta aquí llega la tercera entrega sobre novedades en WF 4.0. Espero que el post os haya resultado interesante.

VS 2010 & .NET Fx 4.0: Novedades en WF 4.0 (I)!

Hace unos días os comentaba que ya disponíamos de los primeros detalles de la nueva versión de Windows Workflow Foundation (WF 4.0) a través de un vídeo creado por Ron Jacobs de la DPE de Microsoft. Por suerte, al tener disponible de manera pública la beta 1 de Visual Studio 2010 (VS 2010), ya podemos jugar (de manera pública y sin las restricciones del NDA ;-)) con las novedades de WF 4.0. En este primer post os voy a presentar algunas de esas novedades. Empecemos.

Nuevo diseñador

Como ya sabéis, una de las principales novedades de VS 2010 es que el IDE está implementado en WPF…lógicamente, lo mismo pasa con el diseñador de workflows de WF 4.0:

  • Creamos un nuevo proyecto de WF 4.0 en VS 2010.
  • Como veis, la ventana de creación de proyecto de VS 2010 es completamente nueva (otra vez nuestro amigo WPF) y nos permite conocer detalles de cada plantilla de proyecto disponible (esta funcionalidad en mi caso es la primera vez que la pruebo, ya que en builds previas de VS 2010 todavía no estaba disponible). Elegimos un proyecto de tipo Sequential Workflow Console Application.
  • Tras pulsar Ok, y unos pocos segundos, nos encontramos con la siguiente novedad: el nuevo diseñador de WF 4.0.
image image image

  • Para crear nuestro primer workflow, disponemos de una serie de actividades base (algunas nos sonarán de versiones previas de WF) listas para usar (ya entraremos en detalles en posteriores posts). Como podéis ver, está clasificadas en grupos de funcionalidad…y tenemos muchas más que en versiones previas de WF ;-).
  • Desplegamos la sección procedural y seleccionamos una actividad WriteLine para crear nuestro primer workflow (la mar de sencillo :PP).
  • ¿Cómo configuramos esta actividad? Pues a través de la ventana de propiedades de la actividad y el editor de expresiones…otra gran novedad: configurar una actividad en WF 4.0 es muy sencillo y se ha primado la usabilidad como en todo el proceso de creación de workflows a través de este nuevo diseñador. En este caso, configuramos la propiedad Text de la actividad WriteLine y escribimos el mítico ¡Hola Mundo desde WF 4.0! Además, he aprovechado el editor de expresiones para comprobar y demostraros que dispone de intellisense y que la sintaxis que usa es ¡VB.NET!
image image image

  • Probamos nuestro primer workflow tras comprobar que está configurado de forma correcta.
image image image

Que caña…hemos creado un workflow, muy tonto, pero sin tirar una línea de código…y os preguntaréis, ¿cómo es posible esto? Pues la respuesta es muy sencilla: por defecto los workflows de WF 4.0 son declarativos y están definidos en un archivo XAML…si XAML, porque con .NET Fx 4.0 WF, WPF y WCF tienen en común el uso de XAML como lenguaje declarativo de definición:

  • Si editamos el archivo XAML de nuestro workflow con un editor XML, podremos comprobar que esto es así.
  • Al editar el workflow en este formato, se nos preguntará si queremos cerrar el archivo XAML puesto que ya está siendo editado por el diseñador de workflows.
  • Tras pulsar Yes, ya tenéis el XAML de nuestro workflow.
image image image

Estupendo…¿y no podemos implementar workflows con código C#? Por supuesto, pero esto lo dejaremos para otro post. Finalmente, os adjunto la captura de pantalla del archivo Program.cs que es el que se encarga de crear las instancias de nuestro workflow y de lanzarlo:

image

Y hasta aquí llega este primer post sobre WF 4.0…espero en breve ir a por la siguiente entrega. Espero que el post os haya resultado interesante.

Una primera mirada a WF 4.0 tras el PDC 2008!

Como muchos sabéis, con .NET Framework 4.0 vamos a tener una nueva versión de Windows Workflow Foundation (WF 4.0) que rompe radicalmente en lo que a arquitectura se refiere (el stack se ha re-hecho) y también en cuanto a como se diseñan los workflows…y como muestra os dejo una captura de pantalla del posible aspecto de este diseñador (digo posible, porque de momento solo lo he podido ver en videos):

image

Desde el PDC 2008 no había vuelto a ver ningún video sobre WF 4.0, pero por suerte tenemos un vídeo de WF 4.0 sobre una versión de Visual Studio 2010 más actualizada que la que yo tengo en la que Ron Jacobs nos hace una primera demo sobre WF 4.0.

Windows Workflow Foundation 4.0: Características y aplicaciones en el campo de la ciencia!

Para cerrar la primera jornada del PDC 2008, he asistido a una ponencia sobre la nueva versión de la tecnología de creación de flujos de trabajo en plataforma windows: Windows Workflow Foundation 4.0 (WF 4.0). En la ponencia, realizada por Kenny Wolf (Arquitecto de Software para WF) hemos podido asistir a algunas de las novedades más interesantes que aparecerán con la nueva versión de WF:

Novedades en el diseño e implementación de workflows

  • Nuevo diseñador de workflows, mucho más intuitivo y sencillo de utilizar. Con este diseñador se ha tratado de mejorar la usabilidad a la hora de crear flujos de trabajos.
  • Nuevas actividades para WF 4.0.
081 086
  • Mejoras en las ventanas que permiten diseñar, modelar e implementar el flujo de trabajo:
    • Ventana de argumentos para el flujo de trabajo.
    • Ventana para propiedades del flujo de trabajo.
    • Ventana de propiedades de los distintos elementos que constityen el flujo de trabajo.
084 085

Pero no sólo se mejora la experiencia del diseñador de flujos de trabajo, sino que con la nueva versión de WF se simplifica la creación de flujos de trabajo y de actividades de flujos de trabajo. Se evoluciona a un modelado de flujos de trabajo más declarativo (vs code behind). Otras mejoras en cuanto a herramientas de creación de flujos de trabajo que vendrán con WF 4.0 son:

  • Mejoras en el rehosting de flujos de trabajo.
  • Experiencia unificada de depuración de flujos de trabajo.

Novedades en el runtime de WF

WF 4.0 introduce una serie de mejoras en el motor de ejecución de flujos de trabajo:

  • Aumento del rendimiento en un orde de 10-100 órdenes de magnitud con respecto a versiones previas.
  • Facilita un control total de la persistencia.
  • Soporte para partial trust.
  • Soporte para Flow-in transactions.
  • Plenamente integrado con WCF, WPF, y ASP.NET.

¿Y cómo paso de WF 3.0 / 3.5 a WF 4.0?

En este punto, Kenny tranquilizó a la audiencia en cuanto a que se está realizando un trabajo de apoyo a la migración de workflows en versiones previas de WF a la versión 4.0:

  • A través del uso de actividades de WF 3.0 en WF 4.0.
  • Mediante una serie de guías descriptivas sobre como pasar de workflows de la versión 3.0 / 3.5 a la 4.0.
  • Usando una actividad especialmente diseñada para facilitar la interoperabilidad entre flujos de trabajo de WF 3.0/3.5 y flujos de trabajo de WF 4.0.

Una aplicación práctica de WF 4.0 : Flujos de trabajo científicos

Como cierre de la ponencia, se presentó una aplicación realista de WF 4.0 en el campo de la ciencia. En concreto se presentaron dos proyectos desarrollados por Microsoft Research:

  • Neptune, de aplicación en oceanografía, campo que tiene una serie de requerimientos clave como:
    • Redes de sensores altamente escalables.
    • Visualización bajo demanda.
    • Catálogo de actividades de flujo de trabajo preparadas para este entorno.
  • PanSTARSs, de aplicación en astronomía, campo en el que los requerimientos son:
    • Ejecución en clusteres.
    • Necesidad de un alto rendimiento.
    • Gran cantidad de flujos de trabajo en ejecución.
    • Monitorización de los flujos de trabajo.

Pues bien, Microsoft Research con estos proyectos ha demostrado la validez y aplicabilidad de WF4.0 para tratar con entornos tan complejos como los citados. De echo, como muestra de su extensibilidad, se mostró un diseñador de flujos de trabajo específicamente creado para estos entornos denominado Trident:

089 090