> # Introducción a Flujos de Trabajo

> Un Flujo de Trabajo representa el movimiento de información, documentos y tareas a través de un proceso de trabajo, y define las acciones a ejecutar, las relaciones entre las acciones con otros componentes o actores y permite la sincronización entre las diferentes acciones. Desde este punto de vista, un Flujo de Trabajo envuelve diferentes dimensiones:

> - La acción a ejecutar
> - Los actores que la ejecutan
> - La dimensión de tiempo en el que todo ocurre

> El Windows WorkFlow Foundation (WF) es la tecnología de Microsoft que provee un modelo, maquina de ejecución y herramientas para definir, ejecutar y manejar Flujos de Trabajo. WF es una parte constituyente del Microsoft FrameWork .NET 3.0, junto con el Windows Communication Foundation (conjunto de tecnologías .NET para construir y comunicar sistemas interconectados) y el Windows Presentation Foundation (capa de presentación para aplicaciones de Windows).

> Las herramientas que WF ofrece permiten describir, diseñar visualmente y programar algoritmos para crear Flujos de Trabajo no solamente para aplicaciones de Windows, sino para cualquier sistema que pueda usar servicios Web SOAP, y aplicaciones externas que puedan alojar su maquina de ejecución, como SharePoint 2007.

> La fundación provee dos tipos de Flujos de Trabajo: "Secuencial" y "Estado de Maquina". Para la construcción de Flujos de Trabajo es necesario utilizar "Actividades", la pieza de acción mas elemental que un Flujo puede utilizar. Adicionalmente, un Flujo de Trabajo necesita un servicio que lo pueda alojar ("Host"), como, por ejemplo, SharePoint.

> ## Tipos de Flujos de Trabajo

> Un Flujo Secuencial es un proceso lineal, también conocido como un Flujo de Proceso Humano, en donde las actividades van desde una situación inicial hasta una final recorriendo una secuencia de pasos predeterminada. Flujos Secuenciales son perfectamente predecibles: una vez iniciados, recorren los pasos de una manera prefijada a través de la ejecución de sus Actividades.

> Un Flujo de Trabajo de Estado de Maquina no tiene un camino predeterminado, sino que representa una serie de estados y transiciones entre ellos. Este tipo de Flujos de Trabajo son dirigidos por eventos: cada estado puede ser activado después de que un determinada acción a tomado lugar; luego, la maquina ejecuta las Actividades necesarias y se detiene después de completar el estado. No hay un camino determinativo entre los pasos a seguir porque el Flujo no ejecuta en un manera cronológica.

> ## Actividades

> Actividades son el bloque constructivo básico de un Flujo de Trabajo. Una Actividad representa una acción en un Flujo y puede ser de cualquier tipo, desde una actividad sencilla (un cronómetro, por ejemplo), a una Actividad compuesta de un ensamblaje de varias Actividades. El WorkFlow Foundation viene con una librería de Actividades por defecto, pero también provee mecanismos para crear Actividades propias, lo que asegura la reusabilidad entre Flujos. Las Actividades incluidas proveen funcionalidad para facilitar la comunicación entre servicios y aplicaciones, el control del Flujo, manejo de eventos, condiciones y lazos, y el manejo de su estado. Además, algunas Actividades pueden contener otras Actividades, actuando como contenedores.

> ## Arquitectura

> ### Figura 1: Arquitectura del WorkFlow Foundation

> El WorkFlow Foundation utiliza una arquitectura en capas, en donde la capa superior provee las Actividades por defecto, el modelo para la construcción de Actividades personalizadas, la maquina para implementar Reglas de Trabajo y las herramientas para conectar y comunicar las Actividades entre si. El código para construir y trabajar programáticamente con el Flujo toma lugar en esta capa.

> La Capa de Ejecución se encarga de todos los aspectos necesarios a tener en cuenta durante el funcionamiento del Flujo y todos los servicios críticos del sistema. La capa de Alojamiento es la que permite hacer la conexión entre el Flujo y el mundo exterior, y provee un paquete de servicios que garantizan el control y manejo del Flujo de Trabajo.