Actividades personalizadas en Windows WorkFlow Foundation (WWF)

by Misael Monterroca 22. January 2008 23:58

 

En este articulo aprenderemos los pasos básicos para crear una actividad personalizada dentro den WWF

 

Actividades personalizadas

Windows WorkFlow Foundation provee varias actividades preestablecidas, como Code activity, Compensate Activity, Delay Activity etc sin embargo dichas actividades difícilmente  pueden contemplar todas las diferentes actividades de negocio o técnicas que necesitemos implementar. Es por esto que WWF nos permite crear nuestras propias actividades heredando de diferentes clases base (solo se listan las más importantes):

 

Clase Base

Descripción

Activity

Todas las actividades heredan de ésta clase

SequenceActivity

Es utilizada para crear una actividad compuesta que contiene actividades hijas que son ejecutadas en forma secuencial

StateActivity

Es utilizado dentro de un StateMachine WorkFlow y expone eventos que permiten la inicialización de la actividad a un estado seleccionado

CompositeActivity

Permite crear una actividad compuesta sin la posibilidad de tener actividades hijas

 

 

Tabla 1. Principales clases base para crear una actividad personalizada

 

En este capítulo crearemos una actividad que nos permita realizar el envió de un correo electrónico para lo cual, solo necesitamos heredar de la clase base "Activity" ya ésta clase nos provee toda la funcionalidad básica necesaria.

 

Para crear la actividad seguiremos los siguientes pasos

  • Abrir Visual Studio 2008
  • En el menú seleccionar File -> New -> Proyect
  • En Proyect Types seleccionar Workflow
  • En la lista de plantillas seleccionar WorkFlow Activity Library
  • En Name escribir EnviarCorreoActivity
  • En el Solution Explorer seleccionar Activity1 y dar clic con el botón derecho del ratón y seleccionar Rename, en el nuevo nombre escribir EnviarCorreoActivity.cs y presionar enter
  • En la advertencia de un clic en Yes
  • En la clase renombrada dar un clic nuevamente con el botón derecho del raton y seleccionar View Code
  • Cambiar la clase de la cual se está heredando SequenceActivity por Activity

 

En este punto, debemos de tener una clase similar a la siguiente

 

 

using System;
 
using System.ComponentModel;
 
using System.ComponentModel.Design;
 
using System.Collections;
 
using System.Drawing;
 
using System.Linq;
 
using System.Workflow.ComponentModel.Compiler;
 
using System.Workflow.ComponentModel.Serialization;
 
using System.Workflow.ComponentModel;
 
using System.Workflow.ComponentModel.Design;
 
using System.Workflow.Runtime;
 
using System.Workflow.Activities;
 
using System.Workflow.Activities.Rules;
 
 
 
namespace EnviarCorreoActivity
 
{
 
      public partial class EnviarCorreoActivity: Activity
 
      {
 
            public EnviarCorreoActivity()
 
            {
 
                  InitializeComponent();
 
            }
 
      }
 
}
 

 

 

Para realizar el envió de correo electrónico necesitamos que la actividad exponga 4 propiedades dependientes "Para" "De" "Asunto" y "Cuerpo" para ellos utilizaremos el método Register de la clase DependencyProperty

 

public static DependencyProperty DeProperty = DependencyProperty.Register("De", typeof(string), typeof(EnviarCorreoActivity));
 
 
 
        public static DependencyProperty ParaProperty = DependencyProperty.Register("Para", typeof(string), typeof(EnviarCorreoActivity));
 
 
 
        public static DependencyProperty AsuntoProperty = DependencyProperty.Register("Asunto", typeof(string), typeof(EnviarCorreoActivity));
 
 
 
        public static DependencyProperty CuerpoProperty = DependencyProperty.Register("Cuerpo", typeof(string), typeof(EnviarCorreoActivity));

 

 

Ahora crearemos las propiedades físicas que se encargaran de realizar la persistencia u obtención  de la información proporcionada, para ello hay que utilizar los métodos SetValue y GetValue y la clase base.

public string De
 
        {
 
 
 
            get
 
            {
 
                return Convert.ToString(base.GetValue(DeProperty));
 
            }
 
 
 
            set
 
            {
 
                base.SetValue(DeProperty, value);
 
            }
 
 
 
        }
 
 
 
        public string Para
 
        {
 
            get
 
            {
 
                return Convert.ToString(base.GetValue(ParaProperty));
 
            }
 
 
 
            set
 
            {
 
                base.SetValue(ParaProperty, value);
 
            }
 
        }
 
 
 
        public string Asunto
 
        {
 
            get
 
            {
 
                return Convert.ToString(base.GetValue(AsuntoProperty));
 
            }
 
 
 
            set
 
            {
 
                base.SetValue(AsuntoProperty, value);
 
            }
 
        }
 
 
 
        public string Cuerpo
 
        {
 
            get
 
            {
 
                return Convert.ToString(base.GetValue(CuerpoProperty));
 
            }
 
 
 
            set
 
            {
 
                base.SetValue(CuerpoProperty, value);
 
            }
 
        }
 

Por último sobrescribiremos el método Execute de la clase base, este método es llamado cuando la actividad es requerida para su ejecución, dentro de este método realizaremos el envió del correo electrónico. Como resultado de la ejecución regresaremos el valor Closed solo  en caso de que el envió sea exitoso en caso contrario será Faulting este valor es tomado de la enumeración ActivityExecutionStatus

 

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
 
        {
 
            try
 
            {
 
                System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient("devworx.com.mx");
 
                smtpClient.Credentials = new System.Net.NetworkCredential("misael.monterroca@devworx.com.mx", "password");
 
                smtpClient.Send(De, Para, Asunto, Cuerpo);
 
                return ActivityExecutionStatus.Closed;
 
            }
 
            catch (Exception ex)
 
            {
 
                string logInterno = ex.Message;
 
                return ActivityExecutionStatus.Faulting;
 
            }
 
        }
 

 

 

 

Ahora crearemos un WorkFlow para poder probar la actividad creada, para ellos realizaremos las siguientes actividades:

 

  • En el menú de Visual Studio 2008 seleccionaremos File -> Add - New Project
  • En las plantillas de proyecto seleccionaremos Sequential WorkFlow Console Application
  • En name escribiremos Flujo de Prueba
  • En el Solution Explorer seleccionaremos el proyecto recién agregado y con el botón derecho del ratón seleccionaremos la opción Add Reference
  • Seleccionar la pestaña Projects
  • Seleccionar el proyecto EnviarCorreoActivity y dar un clic en OK

Con los pasos anteriores podremos utilizar la actividad dentro del WorkFlow además de que la actividad será posicionada dentro de la barra de herramientas de Visual Studio 2008

 


Imagen 1. Actividad dentro de la barra de herramientas

 

El siguiente paso será arrastrar la actividad EnviarCorreoActivity al diseñador de WorkFlow, seleccionaremos la actividad previamente agregada y presionaremos la tecla F4 para mostrar la ventana de propiedades

 

Imagen 2. La ventana de propiedades mostrando las propiedades definidas para nuestra actividad

 

Con este procedimiento hemos creado nuestra primera actividad personalizada solo basta con especificar las propiedades e iniciar el flujo para poder probar que la actividad se está ejecutando de manera correcta.

 

Articulo Publicado en http://desarrollador.redusers.com/

Tags:

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



MVP