Condiciones en Workflow Foundation
Condiciones en Workflow Foundation
En el artículo anterior mencionamos el uso de expresiones condicionales para determinar si una regla se evalúa como verdadera o falsa y el código relacionado a ese resultado se ejecuta.
En este artículo profundizaremos un poco más acerca de las expresiones condicionales, su sintaxis y su uso dentro de las reglas en Workflow Foundation.
Operadores y palabras clave
Para crear o editar una expresión condicional en Workflow Foundation tenemos la opción de utilizar una serie de operadores y palabras clave para darle el significado y el comportamiento necesitado a nuestra expresión. Por ejemplo, en la sección anterior vimos el uso del operador relacional == para determinar si el día de hoy es o no es lunes. No obstante, contamos con una diversa gamma no solo de operadores relacionales, sino también aritméticos y lógicos, así como también palabras clave que nos permiten escribir una lógica robusta para nuestras expresiones. A continuación se describen los diferentes operadores y palabras clave disponibles.
Es muy importante recordar que una expresión condicional es una expresión cuyo objetivo es decirnos simplemente: Sí o No (verdadero o falso). De esta manera podemos determinar el flujo que debe seguir la ejecución.
Operadores Relacionales
Son aquellos que relacionan dos valores para determinar su igualdad o jerarquía. La Tabla 1 nos muestra los diferentes operadores relacionales disponibles para crear expresiones condicionales en Workflow Foundation:
| Operador | Funcionalidad |
| == | Determina la igualdad entre dos valores |
| = | Determina la igualdad entre dos valores |
| > | Determina si un valor es mayor a otro |
| >= | Determina si un valor es mayor o igual a otro |
| < | Determina si un valor es menor a otro |
| <= | Determina si un valor es menor o igual a otro |
Tabla 1. Operadores Relacionales
Operadores Aritméticos
Son aquellos que nos permiten ejecutar cálculos matemáticos entre el valor puesto a la izquierda del operador y el de la derecha. La Tabla 2 nos muestra los diferentes operadores aritméticos disponibles para crear expresiones condicionales en Workflow Foundation:
| Operador | Funcionalidad |
| + | Suma |
| - | Resta |
| * | Multiplicación |
| / | División |
| MOD | Módulo |
Tabla 2. Operadores Aritméticos
Operadores Lógicos
Son aquellos que nos permiten evaluar si una condición se cumple o no. La Tabla 3 nos muestra los diferentes operadores lógicos disponibles para crear expresiones condicionales en Workflow Foundation:
| Operador | Funcionalidad |
| AND ó && | "Y" lógico |
| OR ó || | "O" lógico |
| NOT ó ! | Negación |
| & | "Y" Bitwise |
| | | "O" Bitwise |
Tabla 3. Operadores Lógicos
Palabras Clave
Existen diversas palabras clave que podemos usar en la creación de expresiones condicionales, permitiéndonos controlar el comportamiento y el flujo de nuestra expresión. La Tabla 4 nos muestra las diferentes palabras clave disponibles para crear expresiones condicionales en Workflow Foundation:
| Palabra clave | Funcionalidad |
| IF | Evalúa una expresión para determinar si el código relacionado se ejecuta o no |
| THEN | Ejecuta el código relacionado si la expresión IF es verdadera |
| ELSE | Ejecuta el código relacionado si la expresión IF es falsa |
| HALT | Finaliza el procesamiento de la Regla |
| Update | Informa al motor de Reglas que una propiedad o un campo ha sido modificado, para poder establecer la dependencia entre diferentes reglas y su probable re-evaluación. |
Tabla 4. Palabras Clave
Una expresión condicional puede usar uno o varios operadores y palabras clave.
Ejemplo
En el capítulo anterior vimos cómo crear una regla cuya expresión condicional evalúa si el día de hoy es lunes. Vamos a retomar el mismo proyecto y flujo de trabajo y modificaremos la expresión condicional para evaluar además si el mes actual es noviembre o diciembre, y si el año es 2007 o superior. Para esto lo que necesitamos hacer es ejecutar Visual Studio .NET si es que no está ejecutándose y abrir el proyecto que creamos en el capítulo anterior. Recordemos en este momento cómo quedó dicho proyecto:
Para modificar la expresión condicional debemos hacer clic en la actividad llamada IfElseBranchActivity1, ya que como recordaremos, es esta la actividad a la cuál le definimos la regla la cuál determina el día de la semana actual. Al hacer clic sobre esta actividad la ventana de propiedades en Visual Studio .NET nos muestra las propiedades para esta actividad en específico. Hagamos clic en el nodo de la propiedad llamada Condition (mostrado como una caja con un símbolo +) para expandir su árbol de propiedades relacionadas y enseguida hagamos clic en el botón con tres puntos "…" en la propiedad Expression, para mostrar la caja de diálogo Rule Condition Editor, tal y como lo muestra la siguiente ilustración:
Como ya mencionamos con anterioridad esta caja de diálogo nos permite editar la expresión condicional relacionada con esta regla.
Ahora bien, la modificación de la expresión condicional es muy sencilla. Simplemente debemos editar su código directamente en la caja de diálogo. Ya que nuestro objetivo es evaluar además si el mes actual es noviembre o diciembre y además que el año sea 2007 o superior, el código para la expresión es la siguiente:
System.DateTime.Now.DayOfWeek ==
System.DayOfWeek.Monday && (System.DateTime.Now.Month == 11 ||
System.DateTime.Now.Month == 12) && System.DateTime.Now.Year >= 2007
En este caso estamos usando las propiedades Month y Year de la clase DateTime para determinar el número de mes y el año actuales respectivamente. Nótese también cómo estamos usando diferentes operadores lógicos y relacionales en conjunto para determinar nuestra expresión condicional.
Finalmente sería buena idea modificar los mensajes que queremos mostrar en la consola cuando la regla se evalúa verdadera o falsa. Para esto modifiquemos el código de los métodos que ejecutan las actividades codeActivity1 y codeActivity2 (EsLunes() y NoEsLunes() respectivamente):
private void EsLunes(object sender, EventArgs e)
{ Console.WriteLine("Es lunes, es noviembre o diciembre del año 2007 o superior!"); }
private void NoEsLunes(object sender, EventArgs e)
{ Console.WriteLine("No es lunes, el mes no es noviembre o diciembre o no es el año 2007 o superior."); }
Si efectivamente se cumplen todas las condiciones, es decir, si hoy es un día lunes de noviembre y diciembre del año 2007 o superior, la ejecución de este proyecto mostrará en la consola el siguiente resultado mostrado en la siguiente figura:
Resumen
En este capítulo hablamos acerca de las expresiones condicionales para las reglas en Workflow Foundation. Hablamos también de los diversos operadores y palabras clave que pueden ser usados para escribir las expresiones y modificamos la regla del flujo de trabajo del proyecto anterior, haciendo una validación más robusta y compleja. En el capítulo de Políticas continuaremos viendo las expresiones condicionales y el uso de las palabras clave.
Este artículo fue creado para el curso Desarrollador .NET de la revista Users. http://desarrollador.redusers.com/