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.

Comentarios

Entradas más populares de este blog

Modelando relaciones en UML, un acercamiento a las Asociaciones

Utilizando Intents implícitos para crear actividades

Secuencias…Modelado indispensable