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
Publicar un comentario