Welcome to Comunidad .NET de Cd. Juárez Sign in | Join | Help

Browse by Tags

All Tags » workflow

Where Workflow Foundation really shines

Rocky tiene unas ideas bastante interesantes de cómo encaja Workflow Foundation en la arquitectura de un sistema. Vale la pena echarle el ojo.

De su artículo:
Today we all write these non-interactive processes in code. Maybe with a set of objects working in concert, but more often as a linear or procedural set of code. If a change is needed to the process, we have to alter the code itself, possibly introducing unintended side-effects, because there's little isolation between steps.

Personally I think this is where WF fits in. It is really good at helping you create and manage non-interactive processes.

Yes, you have to think about those non-interactive processes in a different way to use WF. But it is probably worth it, because in the end you'll have divided each process into a set of discrete, autonomous steps. WF itself will invoke each step in order, and you have the pleasure (seriously!) of creating each step as an independent unit of code.

From an OO design perspective it is almost perfect, because each step is a use case, that can be designed and implemented in isolation - which is a rare and exciting thing!

Evento de Workflow Foundation en El Paso

El Grupo de Usuarios de .NET en El Paso nos está invitando a un evento el próximo Martes 29 de Agosto, de 6pm - 8:30 pm en el Buisness Building de UTEP, room 111.

Al evento vendrá una persona de Micorosft, J Sawyer, que es un "evangelista" de .NET, para hablar sobre Windows Workflow Foundation. (más info aquí).

Si se perdieron la plática en la reunión de mayo, o si quieren conocer más sobre el tema entonces échense una vuelta. Esta plática va a durar más que la que tuvimos nosotros (como 2 horas y media).

Los que estén interesados en acudir tienen que enviarle un correo a Tiffany Cynor a más tardar este viernes 25 de agosto para confirmar su asistencia. Su correo es:

Tiffany Cynor tmcynor@hotmail.com

Sopa de CTPs y Betas

Estuve intentando descifrar cuáles eran las versiones más recientes de WF y WCF con las que quiero jugar, y ya estaba a punto de quedarme vizco cuando me topé con este post de Tom Archer, el product manager del Windows SDK.

Así que antes de arrancarse la greña en frustración y quedarse pelones, chequen la matriz que viene en el artículo.

Y si no fuera yo tan obstinado e impaciente, me esperaría hasta que salieran las versiones finales y me ahorraría los reniegos.

Nah. Eso sería demasiado facil.

Tarde pero sin sueño

Por razones de espacio, nunca se subió la presentación que dí en la reuión de mayo de la Comunidad .NET, "Introducción Workflow y WinFX". Así que aquí la tienen.

PD. Como que el MSN Groups comienza a suckear tiempo grande, pero en fin, es gratis. You get what you pay for, como dicen los gringos.

Ahorita estamos evaluando el poner otro sitio de foros para la comunidad--y desarrolladores .NET en general--usando Community Server. Personalmente, soy fan de este producto, no solo porque tienen una versión "Express" (osea, de a grapa), sino porque mi compa el Rocky Lhotka así como algunos sitios de Microsoft también lo usan. Y ya rascándole un poco pueden encontrar paquetes de hosting desde $25 dlls al mes. Bastante decente. Luego les aviso qué pasa con esto.

La vida es cambio

Sí, ya lo sé. Pasan muchas cosas en dos meses. Cambio de proyecto en el trabajo... cambio de ciudad, de casa y hasta cambio de morra (novia pues).

Así que finalmente se me remordió la consciencia lo suficiente como para postear algo breve que los entretenga mientras tengo chanza de bajar los CTPs nuevos y tratar de aportar algo:

Hay una versión Release Candidate 2 de todo el choro de workflow, atada al último CTP del .NET Framework 3.0. Esto incluye versiones actualizadas de los Hands-On Labs.

.NET Rocks TV (DNRTV) sacó 4 videos muy buenos sobre Workflow Foundation, que los pueden ayudar bastante para comenzar [video1, video2, video3, video4].

Y por aquí hay más videos con tópicos un poco más avanzados.

Enjoy.

Aprendiendo a ser un buen anfitrión para workflow

Si le echaron un vistazo al mapa, se habrán dado cuenta de los 3 conceptos principales que hay que entender: host, actividades y workflow.

En esta entrada, hablaré un poco sobre el primero: ¿qué se necesita para que mi aplicación pueda utilizar Windows Workflow Foundation?

Muy sencillo: la aplicación debe tener la capacidad de ser el anfitrión (host) para el ambiente de ejecución de los workflows.

Ahora, en la vida real, ser un buen anfitrión pudiera requerir de mucho dinero o amigos--después de todo, hay que tener chelas en la casa para cuando caen los compas, y tener listos los teléfonos de las amigas teiboleras en caso de una fiesta de emergencia, ya saben... digo... ejem... ¿En qué estaba? Ah si, hablando de una aplicación de .NET en realidad solo necesitas hacer 2 cosas:
  1. Crear el ambiente de ejecución de workflow (runtime engine)
  2. Instanciar y arrancar el workflow

// asumiendo que se tienen referencias a los 
// siguientes assemblies:
// 
// System.Workflow.Activities,
// System.Workflow.ComponentModel y
// System.Workflow.Runtime
 
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
 
namespace WorkflowApplication
{
  class MyProgram
  {
    static void Main(string[] args)
    {
      // crear el ambiente de ejecución de para 
      // los workflows (runtime)
      WorkflowRuntime runtime = new WorkflowRuntime();
 
      // TODO:
      // agregar servicios y/o suscribirse a 
      // eventos del runtime antes de arrancar 
      // la ejecución del workflow
 
      // instanciar e iniciar la ejecución del workflow.
      // en este caso, "MyWorflow" es el nombre 
      // de la clase que representa mi workflow
      WorkflowInstance instance =
        runtime.CreateWorkflow(typeof(MyWorkflow));
      instance.Start();
 
      // no olvidar destruir el runtime cuando 
      // ya no se necesite!
    }
  }
}

Y eso es todo. Esto implica que cualquier "ejecutable" de .NET puede ser un anfitrión--desde una vulgar aplicación de consola, como en el ejemplo, hasta una aplicación de Windows Forms o incluso ASP.NET. El runtime correrá dentro del proceso de tu ejecutable. El runtime sigue el patrón sigleton, por lo que solo se permite una instancia del runtime por aplicación.

Ahora, hay algo que sí hay que cuidar desde un inicio: el threading. Sobretodo en ASP.NET, es importante, ya que el runtime tomará "prestado" el thread de ejecución de la aplicación. De eso platicamos luego, en otra entrada...

Por default, los workflows son iniciados de manera asíncrona por el runtime, así que tendrás que tomar medidas para asegurar que la aplicación host no termine antes de que tu workflow. Esto se hace con algunas de las clases de System.Threading, como en el siguiente ejemplo:

using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
 
namespace WorkflowApplication
{
  class Program
  {
    static void Main(string[] args)
    {
      // crear el runtime
      using (WorkflowRuntime runtime = new WorkflowRuntime())
      {
        AutoResetEvent waitHandle = new AutoResetEvent(false);
 
        // estos son eventos del runtime a los cuales nos podemos 
        // "suscribir". en este caso se utilizan para señalar 
        // cuando el workflow terminó de ejecutarse
        runtime.WorkflowCompleted +=
          delegate(object sender, WorkflowCompletedEventArgs e)
          {
            waitHandle.Set();
          };
 
        runtime.WorkflowTerminated +=
          delegate(object sender, WorkflowTerminatedEventArgs e)
          {
            Console.WriteLine(e.Exception.Message);
            waitHandle.Set();
          };
 
        // instanciar y arrancar el workflow
        WorkflowInstance instance =
          runtime.CreateWorkflow(typeof(MyWorkflow));
        instance.Start();
 
        // el thread se queda esperando hasta que reciba una señal
        // debido a algún Set()
        waitHandle.WaitOne();
      }
    }
  }
}

Un mapa a Windows Workflow Foundation

Ayer me tocó hablar de Windows Workflow Foundation en la reunión de la Comunidad .NET de Juárez, y alguien me hizo la pregunta: “si quiero comenzar a jugar con Windows Workflow Foundation, ¿por dónde comienzo?”

Mi respuesta fue: sepalaching… digo, ejem… pues por el principio.

Lo que recomiendo es lo siguiente:
  1. Conocer los conceptos fundamentales de Workflow Foundation
  2. Bajar e instalar los componentes (beta) en algún ambiente de prueba donde puedan jugar.
  3. Jugar un rato con ellos

Conceptos fundamentales de Windows Workflow Foundation

Para ahorrarme las más de 1000 palabras, aquí les va una imagen (den clic para ampliar):


Un buen punto de inicio, creo que es la ayuda que viene cuando instalan los componentes. También está disponible en línea aquí.

Otro sitio útil es windowsworkflow.net.

Incluso hay un libro anaranjado por ahí que sacaron con el Beta 1 de WinFX/WF, pero le eché una ojeada en el Barnes&Noble local y sinceramente no me ayudó. Aparte que entre Beta y Beta, las cosas pueden cambiar bastante. Pero, si ustedes tienen $30 dlls que les sobren, pues puede ayudarles.


Bajar e instalar los componentes


Actualmente tienen 2 opciones: El Beta 2 de los componentes o el Beta 2.2

Si únicamente quieren desarrollar con Workflow Foundation, recomiendo usen la versión Beta 2.2, para ello solo necesitan los Componentes Runtime y Extensiones de Worflow Foundation Beta 2.2 para Visual Studio 2005. Esta es una descarga como de unos 70Mb solamente.

Ahora, que si quieren desarrollar con otras cosas de WinFX aparte de Workflow (como Windows Communication Foundation, Windows Presentation Foundation u Office 12 Beta 1 Technical Refresh), entonces necesitarán forzosamente conseguir los componentes de la Beta 2:

Runtime de WinFX, February CTP (para correr ejecutar sus componentes)
+ WindowsSDK correspondiente (para desarrollar)
+ Extensiones de Windows Workflow Beta2 para Visual Studio 2005 (para diseñar/desarrollar workflows)

Esta descarga es de arriba de 1Gb (!)

Ahora, recuerden que estos componentes están en Beta, lo cual—como ya deben saber—significa que no se recomienda instalarlos en una máquina en la que dependan, o un ambiente de producción. Lo que hice yo fue poner una Virtual PC con Visual Studio 2005 y ahí le ataqué los componentes.


Jugar un rato con Workflow Foundation

Soy de los que cree que toda la teoría del mundo no sirve de nada sin la práctica y viceversa—hay que usar los 2 hemisferios cerebrales.

Así que mientras pienso en algunos ejemplos qué poner en línea, pueden comenzar a practicar con los Hands-On Labs para Windows Workflow Foundation Beta 2, que contienen 10 “laboratorios” o prácticas. Estos labs contienen instrucciones paso a paso para que hagan sus primeros pininos con WF.

Enjoy.

Seleccionando herramientas para workflow

Si ya vieron la importancia del workflow, quizá se estén preguntando “¿Qué herramientas hay disponibles? ¿Por dónde debo comenzar?”

A ver si le puedo dar un llegue a estas preguntas.

El concepto de workflow en los sistemas ciertamente no es nuevo, de hecho probablemente se remonta a la era de las herramientas CASE. A través de los años me tocó personalmente manejar algunas herramientas en esta área—que ciertamente no eran las únicas:

Lotus Notes/Domino
Mis primeros pininos con workflow, hace como 8 años, fueron con Lotus Notes. Las herramientas de Lotus funcionan bajo un modelo de “base de datos” que en realidad eran “bases de documentos”. En otras palabras ustedes modelan algo que se maneja en papel—por ejemplo una requisición de compra, o una petición para vacaciones—como una forma y se generan instancias de esa forma que se almacenan en la base. Esos “documentos” se podían enrutar via e-mail o poner en el Inbox de Fulano de Tal hasta que lo apruebe, y cuando lo hace se envían al siguiente mono involucrado en el proceso, etc. Es decir, tenía un enfoque muy humano.

Dentro de las bondades del Notes está que es muy sencillo desarrollar una aplicación de este tipo, es parte del ambiente y se puede utilizar en el Web tanto como un cliente Notes casi indistintamente. Sin embargo, no todos los flujos son humanos—p.ej. un proceso “batch” que corre cada noche para procesar algo. Además carecía de herramientas gráficas, lo cual forzaba a que todo el flujo se codificara de manera imperativa—con If/Then’s y eventos.

BizTalk
Este es un producto server de Microsoft que tiene ya un buen rato y es excelente para la integración de sistemas o para integración entre empresas. Está muy orientado a servicios y cuenta con excelentes herramientas gráficas y de transformación—ustedes definen los mensajes y los canales donde recibirlos y luego le dan un workflow (orquestación) de manera gráfica.
Sin embargo, es algo costoso y tiene una desventaja: ¿qué pasa si quiero integrar mi workflow en una aplicación que será instalada en una PC de manera independiente? Con BizTalk, no puedo tener algo así.

Skelta, k2.net, etc.
Hay algunas otras herramientas para .NET específicamente que me tocó evaluar para un proyecto. Estas, aunque muy interesantes y completas—proveían herramientas gráficas y sus propias librerías—tenían una sola desventaja con respecto a la que voy a proponer enseguida: tienen costo de licenciamiento. De ahí en más tienen varias ventajas: algunas de ellas funcionan con .NET 1.1 y son productos un poco más maduros.

Windows Workflow Foundation
Finalmente llegamos a lo que me trae emocionado últimamente. Uno de los “pilares” de WinFX es Windows Workflow Foundation—parece trabalenguas—que espero finalmente traiga el workflow a las masas de los desarrolladores.

WinFX, para los que no han estado enterados es la nueva API de Microsoft Windows, que se planea lanzar con Windows Vista, sin embargo, las Windows Framework Extensions, también se lanzarán como un producto separado que se podrá correr en Windows XP, lo cual la hace un excelente candidato para poder distribuir una aplicación con esta funcionalidad en masa.
Así que para mi Workflow Foundation, es el mejor candidato para manejar workflow porque:
  • Permite integrar worflow a prácticamente cualquier aplicación--Windows Forms, ASP.NET, Web Services, etc.
  • Provee herramientas bastante robustas para muchos tipos de workflows: humanos y de sistema, “secuenciales” y “máquina de estados”, etc.
  • Tiene capacidad de separar por completo las reglas de negocio y aplicarlas dinámicamente a un flujo que esté activo y corriendo (sin tener que suspenderlo o reiniciarlo).
  • Tiene visibilidad de manera gráfica de en qué paso va el workflow. También puedes reutilizar en tu propia aplicación, muchos de los GUIs que se utilizan a la hora de diseñar el flujo.
  • Las PCs nuevas que traigan Vista, o las que tengan XP podrán utilizarlo—si tienen instalado el .NET Framework 2.0 y el Runtime de WinFX
  • No tiene costo de licenciamiento (hasta donde sé)
  • Será el motor de workflow en la versión próxima de Microsoft Office (“12”) y de BizTalk. Y por ahí escuché también que será la base de cualquier producto “3rd party”—como Skelta y k2.net.

En la siguiente entrada les comentaré qué necesitan para comenzar a jugar…
Posted from El otro lado del Kamikaze | 0 Comments
Filed under:

La importancia del workflow

A ver si algo de esto les es familiar:

Chucho Melosetocho trabaja en ChidaSoft™, que ha sido contratada por Grupo Enorme (sin albur) para hacer un súper sistema porque Enorme trae pedos mayores con cómo maneja su proceso surtido de pedidos.

Grupo Enorme se dedica a hacer Chuchulucos® de todos tipos, tamaños, sabores y colores. De hecho es la empresa más grande de chuchulucos en el país. Pero últimamente, han crecido tanto que sus problemas son evidentes: cuando un cliente les hace un pedido, tardan hasta un mes en surtirlo y por lo mismo, están perdiendo terreno a la competencia, LosQueremosClientes LosQueremos, S.A. de D.R. y R.L. (o sea Sociedad Anónima de Dudosa Reputación y Responsabilidad aún más Limitada).

Así que los jefazos de Enorme se juntaron y decidieron que lo que necesitaban era automatizar todo el “proceso” de distribución, cobranza y pagos. Ellos esperan que un sistema les ahorre hasta un 25% en los costos y un 50% en el tiempo de entrega, según un estudio que hizo su departamento de “IT”—Ingenieros Tarados—y por eso contrataron a ChidaSoft™, quien sin pensarla mucho dice “pan comido” y manda al pobre de Chucho a intentar tomar requerimientos y hacer el análisis del sistema.

Pero Chucho se topa inmediatamente con problemas: la mera-mera de Finanzas, una C.P.—Cabeza de Pollo, digo, ejem… Contadora Pública—con lógica y cabeza cuadrada, se la pasa del chongo con los del almacén porque surten los pedidos de los clientes, aún cuando éstos tienen pagos atrasados; el del almacén se la pasa de la greña con los de producción porque no le entregan las cosas a tiempo y los clientes les gritan cada vez más feo porque están adictos a los Chuchulucos® y sus pedidos no están listos; y el de producción le echa la balona a los de compras que no le tienen la materia prima que necesita a tiempo… en fin… cualquier parecido a la realidad es a propósito.

Así que temeroso de perder su chamba y quedarse sin dinero para ir a teibolear, Chucho entrevista a los jefes de cada departamento por separado para ver qué es lo que necesitan que el sistema haga—intentó en un principio juntarlos a todos para que se pusieran de acuerdo pero las juntas terminaban siempre en insultos, malas palabras, sillas arrojadas y sacadas de lengua.

Cada uno de los jefazos le dice cómo se hacen las cosas en la empresa y le da una larga lista de navidad de lo que quieren que haga el sistema y de pero muchas cosas se contradicen: es evidente que nadie conoce “el proceso” y algunos no parecen saber ni a qué $#¡|\|&@dos se dedica en realidad la empresa.

Después de meses y meses de juntas por teléfono y andar conciliando requerimientos finalmente logra hacer sus diagramitas de casos de uso, sus escenarios de los casos, diagramas lógicos y todo lo demás que dicta el UML y las metodologías de desarrollo de software moderno. Se avienta una documentación clara y precisa que le pasa a al equipo de desarrollo quien con diligencia y un control de calidad estricto tira un código hermoso y elegante.

Pero Enorme no está contento. El proyecto tardó y costó casi el doble de lo que habían previsto y al correr el piloto se dan cuenta que solo ahorrarán un 10% en el costo y tiempo sobre el esquema anterior. Comienzan los gritos, los insultos y las amenazas de no pagarle a ChidaSoft™, y a pesar de que el sistema se apega a los requerimientos que todos los jefes firmaron. Enorme insiste que el sistema “no es lo que pedimos, no nos está ahorrando el dinero que estipulamos cuando los contratamos así que no les vamos a pagar”.

Abrumado y cabizbajo, Chucho visita a su Sensei, quien después de reírse descaradamente de él le dice:
—Saltamontes, has olvilalo la legla del flujo: “si fluye algo le trabajo debes consilelal wolkflow, pelo si el tlabajo fluye lejos debes usal wolkflow”.

Y Sensei le presta su copia de Workflow Modeling: Tools for Process Improvement and Application Development (Alec Sharp y Patrick McDermott, Artech House © 2001).

¿Qué significa todo esto?

En mucho más de una ocasión me ha tocado hacer o mantener un sistema, y que de pronto me hable Fulanito de Tal, del departamento X para que le explique cómo funciona algo o qué se hace con cierto pedazo de información, o para pedir un cambio al sistema del cual se va a arrepentir luego de explicarle que el hacerlo impactaría otra cosa de otro departamento.

En pocas palabras, nosotros, las “personas de sistemas” algunas veces, en sabemos más del “proceso” que las mismas áreas de negocio. Y me pregunto: “¿Cómo es esto posible?”

Parte de la evolución de las empresas en los últimos 10 o 15 años ha sido el reconocimiento de que deben estar orientadas a los procesos de negocios—¿recuerdan todo el ruido que causaron “mejora continua” y “reingeniería de procesos”?

Esto es, la especialización en las empresas ha llevado a que cada departamento se preocupe tanto por eficientizar sus “procesos”, que en muchas ocasiones pierden de vista el “proceso global”: lo que la empresa realmente de dedica.

Dado que el flujo de trabajo (workflow) no es más que una abstracción de los procesos de negocio—el cual se formalizará típicamente en un sistema computacional—es muy importante saber analizar bien cómo fluye el trabajo antes de hacer la definición, análisis o diseño por tres grandes razones:
  1. Para que todas áreas o personas involucradas sepan qué están haciendo en realidad—cómo está funcionando su empresa—y qué se puede mejorar;
  2. No repetir simplemente cómo se hacen las cosas y/o formalizar en una aplicación actividades que no agregan valor (“no hay que pavimentar los caminos de las vacas”, o la clásica replicación ciega de procesos en papel); y
  3. Determinar si en realidad hay algo que se pueda mejorar/ahorrar con un sistema, o si un simple cambio en las actividades del negocio es suficiente. Si se determina que sí agrega valor un sistema, entonces automáticamente ya se tendrán los requerimientos o características deseadas en él.

Sharp y McDermott proponen un famework como el siguiente:


Estas técnicas también sirven cuando se está considerando implementar un sistema “Enterprise”—SAP, PeopleSoft, Siebel, etc.—que cuestan un lanototota. Muchas empresas los compran pensando que así recién sacaditos de la caja van a resolver sus problemas como por arte de magia, solo para descubrir—decenas o cientos de miles de dólares más tarde—que para que en verdad les sirva tienen que adaptarlos a la manera particular en la que trabajan en la empresa, lo cual lleva a que contraten gente para que les personalice el sistema hasta el punto en el que se dan cuenta que uno hecho a la medida les hubiera salido más barato desde un principio. Todo porque no comprendían su propio workflow desde un inicio.

Lo “malo” es que aprender a modelar workflow requiere un poco de habilidades de administración de empresas o incluso ingeniería industrial—¡guácala!—pero afortunadamente en dosis no-letales. Así que los ingenieros de sistemas estamos en una posición óptima para en verdad aportar valor a una empresa cuando surgen proyectos de este tipo.

La herramienta por excelencia en este tipo de modelación son los swimlane diagrams (¿diagramas de canales? maldita traducción), los cuales son distintos a los que se manejan, por ejemplo en UML o en análisis estructurado. Quizá ya los hayan visto, no son más que diagramas de flujo puestos contra un fondo de canaletas, donde cada canaleta representa el área de acción de un Actor.

Pero leer estos diagramas es mucho más sencillo que hacerlos, así que hablemos un poco del proceso para poder llegar a desarrollarlos.

El proceso para analizar, modelar y mejorar procesos

Según Sharp y McDermott:
  1. Encuadrar y definir el proceso
    1. Identificar un proceso de negocios y clarificar sus límites
    2. Hacer una evaluación inicial con todos los interesados
    3. Establecer las metas del proceso rediseñado
  2. Comprender el proceso actual (“as-is”)
    1. Modelar la manera en que fluye el trabajo (workflow)
    2. Hacer una evaluación más profunda tomando en cuenta los 6 “habilitadores” de un proceso de negocios: diseño de workflow, tecnología de información, motivación y medidas, recursos humanos, políticas y reglas, instalaciones y ambiente de trabajo
  3. Diseñar el proceso nuevo (“to-be”)
    1. Ingeniar las mejoras potenciales
    2. Evaluarlas de acuerdo a los 6 habilitadores
    3. Seleccionar las características principales deseadas del nuevo proceso
    4. Diseñar el nuevo workflow
  4. Desarrollar casos de uso y escenarios de uso—hacer la transición hacia análisis de requerimientos de sistema describiendo cómo los actores interactuarían con el sistema para realizar sus actividades.

No voy a profundizar en cada uno de los pasos, para eso les recomiendo el libro, el cual trae muchísimos “tips” basados en casos y ejemplos de la vida real, así como un montón preguntas que se deben hacer durante todo el proceso.

Mi intención, en los siguientes posts será enlazar el concepto de workflow con algunas de las herramientas de que conozco o que van a salir, especialmente Windows Workflow Foundation, que será parte de WinFX. Así que estén pendientes...