Workflow Rules, Contorno básico

Este artículo tiene por objetivo mostrar un escenario básico de manejo de un workflow implementado con workflow foundation donde vamos a aplicar el manejador de reglas en una estructura de decisión.

La solución se compone de un web site y una librería de workflow, en esta ultima vamos a declarar un workflow que implemente una estructura de decisión y en la misma utilizaremos la consola de generación de reglas declarativas.

Veamos el proyecto de librería de workflow, vamos a trabajar con un flujo secuencial llamado "WorkflowDemoRules"

Este flujo recibe un parámetro y lo evalúa en la estructura de decisión dependiendo de su resultado, se establece una propiedad que es tomada como parámetro de salida del workflow.


Veamos su diseño:


Lo que vamos a puntualizar es justamente sobre la decisión de la estructura utilizada:

Estas son sus propiedades:


Como podemos observar el esquema de condición es sobre escenario declarativo, veamos la gestión de reglas:


Puntualmente estoy trabajando sobre una de las propiedades declaradas en mi workflow, veamos el detalle:



De esta forma podemos sencillamente aplicar reglas declarativas a una estructura del workflow.

Veamos el código de mi workflow:

public
sealed
partial
class
WorkflowDemoRules: SequentialWorkflowActivity

{

public WorkflowDemoRules()

{

InitializeComponent();

}



private
int valorConcreto;


private
string definicion;



public
int ValorConcreto

{


get

{


return valorConcreto;

}


set

{

valorConcreto = value;

}

}



public
string Definicion

{


get { return definicion; }


set { definicion = value; }

}




private
void Aceptar(object sender, EventArgs e)

{

definicion = "Aceptado";

}



private
void Notificar(object sender, EventArgs e)

{

definicion = "A Notificar";

}



}

Para cerrar el diseño de mi workflow básico declaré una propiedad con nombre "Definicion" que será utilizada como salida.

Ahora les voy a detallar la web page que consume la librería de workflow:


Una página muy simple que toma un valor y se lo pasa al workflow, este lo evalúa y emite un resultado que se muestra por pantalla:

Veamos el código:


Boton:

protected
void btnAceptar_Click(object sender, EventArgs e)

{

flujoDeTrabajo = new
WorkflowRuntime();



//Manejadores de eventos

flujoDeTrabajo.WorkflowCompleted += new
EventHandler<WorkflowCompletedEventArgs>(OnWorkflowComplete);

flujoDeTrabajo.WorkflowTerminated += new
EventHandler<WorkflowTerminatedEventArgs>(OnWorkflowTerminate);



//Parametros


Dictionary<string, object> parametros = new
Dictionary<string, object>();

parametros.Add("ValorConcreto", int.Parse(TextBox1.Text));



Type tipo = typeof(WorkflowLibraryDemo.WorkflowDemoRules);



//Inicio el flujo

flujoDeTrabajo.CreateWorkflow(tipo, parametros).Start();


wait.WaitOne();



//Fin del flujo

flujoDeTrabajo.StopRuntime();


}

Eventos desencadenados:

private
void OnWorkflowComplete(object sender, WorkflowCompletedEventArgs e)

{

Label1.Text = e.OutputParameters["Definicion"].ToString();

wait.Set();

}



private
void OnWorkflowTerminate(object sender, WorkflowTerminatedEventArgs e)

{

Label1.Text = "Problemas con el Flujo de trabajo";

wait.Set();

}


Espero que les sea de utilidad este simple acercamiento al diseño de flujos de trabajo con implementación de WF.

Entradas más populares de este blog

7 arquetipos #Polymer 1.0 puntos esenciales prácticos

Iniciando la representación de una mobile-web-page pensando en el rendimiento - Parte 1

Spreadsheet-2-Polymer un newsletter particular