Condiciones¶
Una condición es una expresión que decide si algo ocurre. Se evalúa como verdadera o falsa, y esa respuesta decide si se muestra un paso, a qué tarea pasa el caso o si se ejecuta un desencadenador.
Dónde se usan las condiciones¶
| Lugar | Qué decide | Dónde se escribe |
|---|---|---|
| Condición del paso | Si un formulario, un documento de entrada o uno de salida aparece en la tarea | Propiedades de la tarea → Pasos |
| Condición del desencadenador | Si se ejecuta un desencadenador adjunto a un paso | Con el desencadenador, en el paso que lo ejecuta |
| Regla de enrutamiento | A qué tarea pasa el caso | Compuertas y eventos → Reglas de enrutamiento |
| Condición de formulario | Si un control se muestra u oculta | El editor de mostrar/ocultar del formulario |
| Dentro del código de un desencadenador | Cualquier verificación que necesites en el código | evaluateFunction() |
Las tres primeras se ejecutan en el servidor, con el mismo motor, y usan el lenguaje de expresión que se describe abajo. Las condiciones de formulario se ejecutan en el navegador, en JavaScript, y tienen su propia sintaxis: ver Condiciones de formulario.
El lenguaje de expresión¶
Una condición del servidor es una expresión PHP. Todo lo que PHP evalúa como
verdadero deja que la ejecución continúe; lo que evalúa como falso la detiene. Eso
incluye comparaciones, aritmética, los operadores lógicos and, or, xor y !, y
paréntesis para agrupar términos.
(@#Amount >= 1000 and @@Priority == "high") or @@Approved == "yes"
El texto va entre comillas. Una palabra suelta se lee como constante y casi nunca es lo que quieres.
Leer una variable¶
Las variables del caso se escriben con un prefijo de dos caracteres. El prefijo decide cómo se lee el valor guardado:
| Prefijo | Lee el valor como | Ejemplo |
|---|---|---|
@@ |
Texto | @@Priority == "high" |
@% |
Número entero | @%Days > 3 |
@# |
Número decimal | @#Amount >= 1500.75 |
@? |
Texto preparado para una URL | @?Search == "open" |
@$ |
Texto escapado para SQL | @$Name == "O'Brien" |
@= |
El valor original, sin conversión | @=Count == 0 |
@? y @$ importan cuando el valor se usa para armar un enlace o una consulta, no
cuando solo comparas dos valores. @= es la opción segura cuando la variable ya
tiene el tipo que necesitas, por ejemplo un número guardado en una columna de una
grilla.
El prefijo se elige al escribir la condición
El prefijo es parte de la expresión, no una propiedad de la variable. La misma variable puede leerse como texto en una condición y como número en otra.
Comparar una grilla¶
Una grilla guarda filas, no un valor único. Lee una celda con corchetes: la grilla,
la fila y luego la columna. La primera fila es 0:
@#Items[0]['Price'] > 100
Las condiciones de formulario leen la misma celda con un punto en lugar de corchetes: ver Condiciones de formulario.
Una variable que no existe¶
Si la condición nombra una variable que el caso todavía no guardó, el motor la reemplaza por una cadena vacía y continúa. La condición simplemente resulta falsa.
Eso es cómodo mientras armas un proceso y peligroso en producción: un error de tipeo en el nombre de una variable no genera un error, cambia la ruta en silencio. Cuando un caso toma un camino inesperado, revisa la ortografía de cada variable de la condición antes de buscar en otro lado.
Reglas de enrutamiento¶
Las reglas de enrutamiento se evalúan en el orden que muestra la ventana, y ese orden es el que fijas arrastrando las filas.
| Compuerta | Cuando varias condiciones son verdaderas |
|---|---|
| Exclusiva (regla de enrutamiento de evaluación) | Gana la primera regla de la lista; las demás no se toman |
| Paralela por evaluación | Se toma cada regla cuya condición sea verdadera |
| Flujo por defecto | Se usa solo cuando ninguna regla coincidió |
Si ninguna regla coincide y no hay flujo por defecto, el caso no puede avanzar y se detiene con Error de definición de proceso: Las condiciones en la regla de derivación se evaluaron como falso, el flujo se detuvo. Cambiar la definición de la evaluación de la regla de derivación. El arreglo está en la definición del proceso, no en el caso: agrega un flujo por defecto o amplía una condición.
Ver Compuertas y eventos para el comportamiento completo de cada compuerta.
Condiciones de formulario¶
Mostrar y ocultar un control usa otro editor y otro motor: la condición se evalúa en el navegador, en JavaScript, y solo afecta lo que ve el usuario. El valor guardado no cambia.
- Referencia el valor de un control con
@#campo, y una celda de grilla con@#grilla.columna. - Una regla indica qué hace —mostrar, ocultar, mostrar solo, ocultar solo, mostrar todo, ocultar todo— y a qué controles aplica.
- Una regla se ejecuta con un evento: al cargar el formulario, al cambiar un campo, o ambos. Un campo de texto se dispara al salir de él, una casilla al hacer clic y una lista al elegir otra opción.
- El editor permite probar la condición antes de guardar. Guardar una condición sin probar pregunta No ha probado la condición. ¿Desea guardarla de todos modos?; guardar una con error pregunta Tiene un error en la condición. ¿Desea guardarlo de todos modos? Ambas son confirmaciones, no bloqueos: léelas.
Condiciones en el código de un desencadenador¶
evaluateFunction() ejecuta una expresión desde dentro de un desencadenador, con una
grilla como fuente de datos. Es la forma de aplicar las mismas reglas a cada fila de
una grilla sin escribir el bucle.
Relacionado¶
- Variables — los valores que lee una condición.
- Propiedades de la tarea — condiciones de pasos y de desencadenadores.
- Compuertas y eventos — cómo se usa una regla verdadera o falsa.
- Desencadenadores — código que se ejecuta cuando una condición lo permite.
- Funciones de Lurana — las funciones que puedes llamar.