Validaciones avanzadas
Last updated
Last updated
El apartado de Validation Expressions permite configurar validaciones de lógica de datos, especialmente eficientes para verificar que el valor ingresado por el usuario en cada campo coincida con el tipo de dato esperado. Su funcionamiento consiste en comprobar el cumplimiento de una condición determinada.
Si la condición se cumple y el resultado es verdadero, se muestra un mensaje de error y el usuario no puede enviar dicho formulario hasta que el mismo esté corregido. Si la condición es falsa, no se realizará ninguna acción y el usuario podrá avanzar con el proceso.
Este tipo de validaciones pueden hacer referencia a los datos que se ingresan tanto sobre el campo donde están definidas (por ejemplo, si cumple con una longitud determinada), como en otro campo (mostrar un error en el campo “Cantidad” si el campo “Producto” no es válido) o comparando los datos entre dos campos (si la fecha de inicio ingresada para determinado período es posterior a la fecha de finalización).
Cada expresión se compone de dos valores:
La opción Add Expression en el extremo superior derecho del apartado te permitirá incluir funciones adicionales, habilitando nuevos campos para mensajes y expresiones. Esto resulta de utilidad para validar el cumplimiento de varias condiciones dentro de un mismo campo, por ejemplo, que una fecha se encuentre dentro de determinado periodo, que sea más reciente que la fecha de otro campo y distinta de la de un tercero. Aplicar múltiples fórmulas con criterios específicos te permitirá tener un control más preciso respecto al tipo de datos admitidos, ayudando a reducir el margen de error.
A continuación, analizaremos en detalle las siguientes expresiones:
Ten presente que los componentes de una fórmula se incluyen entre paréntesis. El editor te mostrará un aviso de error en caso de que el número de paréntesis abiertos en la fórmula no coincida con el número de paréntesis cerrados, ayudándote a encontrar incoherencias en funciones más complejas.
Existen ciertas fórmulas que nos permitirán evaluar la validez de un dato en función del cumplimiento de ciertas características en los valores ingresados frente a una norma establecida para dicho campo: por ejemplo, que no pueda estar en blanco o que no exceda ciertos límites. Veamos algunos de ellos y su funcionamiento a continuación.
Como vimos anteriormente, las expresiones de validación nos permiten aplicar mejoras a ciertas funcionalidades de nuestro formulario, como es el caso de la configuración de formularios requeridos. A continuación, haremos uso de la expresión isEmpty() para definir un campo como obligatorio y mostrar un mensaje de error personalizado cuando el usuario intenta enviarlo en blanco.
Selecciona el campo "Apellido y nombre" y establece la propiedad Required como False para deshabilitarla. Luego, dirígete al apartado Validation Expressions.
En el campo Message, escribe la leyenda que se mostrará al usuario si no completa dicho campo, por ejemplo: "Debes ingresar tu nombre y apellido".
A continuación, deberás establecer la fórmula que controle dicha condición. Pulsa el ícono fx en en el extremo derecho del campo Expression para abrir el editor e ingresa la fórmula:
isEmpty(apellido_nombre)
Siempre que añadas una expresión, asegúrate de comprobar que los nombres de los campos se encuentren escritos correctamente, respetando las mayúsculas y minúsculas. El editor mostrará un aviso informando que un nombre de campo no está presente en el esquema si se ingresa un valor no declarado, pero no podrá detectar si has escrito el nombre de otro campo existente en su lugar.
Una vez que hayas añadido la expresión, pulsa Confirm para terminar. Si la condición se cumple, es decir, si el campo "Apellido y nombre" está en blanco, la función devolverá el valor true y mostrará el mensaje "Debes ingresar tu nombre y apellido", de modo que el usuario no podrá enviar el formulario hasta tanto haya ingresado este dato. Por el contrario, si la condición no se cumple porque el campo está completo, devolverá el valor false y el usuario podrá enviar el formulario correctamente.
Este tipo de validación también puede aplicarse a tablas, para corroborar si existen filas cargadas en la misma, o a campos de tipo Attachment, comprobando si se ha añadido un archivo adjunto. En caso de no haber información, la fórmula devolverá el valor true y mostrará un mensaje de error.
La fórmula count() resulta útil para contar la cantidad de caracteres ingresados en un campo y, aplicada a una tabla, permite contar la cantidad de filas completas. Para construir una expresión de validación a partir de esta función, es posible añadir un operador para que la comprobación devuelva error en caso de que el total sea igual a cero.
count(Tabla)==0
También pueden utilizarse otros operadores sencillos para validar que dicha cantidad se encuentre dentro de los límites permitidos:
La función sum() suma todos los números dentro del rango de una columna para contabilizar un total. Añadiendo operadores a esta función, es posible convertirla en una expresión de validación que compare el total frente a un número prestablecido y devuelva un error cuando el dato ingresado no coincide con lo esperado. Por ejemplo, en una tabla de ventas donde la columna "porcentaje" reúne la porción de ingresos sobre el total para cada tipo de producto, la suma de cada celda debe dar como resultado un total de 100.
La siguiente función permitirá detectar si el total es diferente a 100 y mostrar un mensaje de error si esta condición se cumple:
sum(TablaVentas,ColumnaPorcentaje)!=100
Con la función dateDifferenceInBusinessDays() se calculan el total de días de lunes a viernes entre dos fechas. Al igual que en count(), añadiendo un operador al cálculo es posible contrastarlo contra un mínimo o máximo estipulado. Por ejemplo:
dateDifferenceInBusinessDays(FechaSolicitud,FechaEntrega)<=5
Esta fórmula contabilizará los días entre la fecha de solicitud y la de entrega, descontando los fines de semana, y mostrará un mensaje de error si la condición es verdadera, es decir, si el periodo transcurrido entre ambas fechas es inferior o igual a 5 días.
Otras expresiones de gran utilidad son aquellas que permiten comparar los datos ingresados en distintos campos, en término de similitud o diferencia entre sus valores.
La función equal() controla ambos valores (ya sean textos, números o fechas) y devuelve true si son iguales, mostrando un mensaje de error e impidiendo el envío de la instancia.
Tomando como base el formulario que has diseño, crea un nuevo campo de tipo Number con el label "Teléfono móvil" y el nombre "tel_movil" en la sección "Datos de contacto".
Para comprobar que el número ingresado en este campo sea distinto al ingresado en el campo "Teléfono" podemos recurrir a esta expresión de validación. Pulsa el ícono fx en en el extremo derecho del campo Expression y escribe la fórmula:
equal(tel,tel_movil)
A continuación, presiona Confirm. Si esta condición se cumple, se mostrará una alerta, la cual definiremos en el campo Message, por ejemplo: "El número del teléfono de línea y del teléfono móvil no pueden ser el mismo".
Es posible construir una alternativa más sencilla a esta función utilizando operadores para realizar la comparación. Por ejemplo, si reemplazas la fórmula equal() del ejemplo anterior por la expresión tel==tel_movil, se realizará la misma validación y obtendrás los mismos resultados.
Veamos los distintos tipos de operadores que puedes utilizar para comparar los datos de dos campos, así como un ejemplo de cada uno y la acción
También puedes combinar los operadores mayor que (>) y menor que (<) con el operador igual (=) para un resultado más específico, por ejemplo: CantidadRecomendada>=CantidadMaxima. En todos estos casos, el cumplimiento de la condición devolverá el valor true y mostrará el mensaje de error que se haya ingresado en la propiedad Message.
La función smaller() permite comparar las fechas ingresadas en dos campos y devolver un mensaje de error si la primera es menor a la segunda, por ejemplo "La fecha de finalización no puede ser menor a la fecha de inicio". Su estructura se plantea del siguiente modo:
smaller(FechaInicio,FechaFin)
Por el contrario, la función larger() evalúa si la primera fecha es mayor a la segunda y devuelve un mensaje de error en caso de cumplirse esta condición. Su estructura se muestra a continuación:
larger(FechaFin,FechaInicio)
Existen variaciones para ambas expresiones contemplando que la función devuelva un mensaje de error también en caso de que ambas fechas sean idénticas, es decir, aplicando la funcionalidad de equal(). Para ello deberemos modificar los argumentos de dichas funciones por:
smallerEq (Fecha1,Fecha2): comprobará que la primera fecha sea menor o igual a la segunda
largerEq (Fecha1,Fecha2): comprobará que la primera fecha sea mayor o igual a la segunda
Estas funciones también pueden utilizarse para comparar otro tipo de valores, como números o cadenas de texto.
Las expresiones basadas en operadores AND, OR y NOT permiten realizar validaciones según el cumplimiento de ciertas condiciones verdadero/falso ya sea en el valor de un campo o expresión (en el caso de NOT) o en el resultado entre dos expresiones aplicadas a un campo (AND y OR). Veamos en detalle cada una de estas validaciones lógicas.
La función not() devuelve true si el campo tiene un valor negativo y habitualmente se utiliza para campos booleanos, que funcionan como un botón que puede activarse o dejarse desactivado según una lógica binaria sí/no. Más adelante veremos en detalle este tipo de campo.
Si el booleano está desactivado, es decir, si la respuesta es negativa, la expresión devolverá un mensaje de error. Puede aplicarse, por ejemplo, a un campo booleano de nombre "Confirmación" que muestre un mensaje de error con el mensaje "Debe aceptar los términos y condiciones para continuar" si se devuelve un resultado true a la siguiente expresión:
not(Confirmacion)
También es posible hacer validaciones más complejas aplicando la expresión not() a la comprobación de otras funciones, por ejemplo:
not(equal(Campo1,Campo2))
Si no se cumple la condición de que los campos 1 y 2 sean iguales, se mostrará un mensaje de error. Recuerda que el editor te mostrará un aviso de error en caso de que el número de paréntesis abiertos en la fórmula no coincida con el número de paréntesis cerrados.
Con la expresión and() es posible comprobar el cumplimiento simultáneo de dos expresiones distintas y mostrar un mensaje de error cuando esto ocurre (es decir, cuando ambas devuelven true), utilizando la siguiente comprobación lógica:
Por ejemplo, si tenemos un formulario con dos campos booleanos de los cuales al menos uno debe estar activado, como la solicitud de recibir un comprobante físico o un comprobante virtual, puede aplicarse la función and() para mostrar un error en caso de que ambos casilleros estén desactivados.
and(not(ComprobanteFisico),not(ComprobanteVirtual))
Analicemos el funcionamiento de dicha expresión:
Es posible construir estructuras más complejas para este tipo de validación anidando otras fórmulas con el operador AND dentro de la función del campo para controlar un mayor número de expresiones:
and(Expresión1,and(Expresión1,Expresión2))
De este modo la comprobación de la expresión 1 devolverá un valor true o false que se comparará. con el valor total true o false que devuelva la segunda función and() al controlar las expresiones 2 y 3. Estas funciones pueden seguir anidándose siempre que se respete la misma estructura.
La expresión or() permite verificar que se cumpla al menos una de dos expresiones y mostrar un mensaje de error a excepción de que ambas devuelvan false, utilizando esta comprobación lógica:
Por ejemplo, si el envío del formulario requiere que el usuario ingrese su correo electrónico en un campo de texto "Email" y también acepte recibir notificaciones al mismo activando un campo booleano "Recibir notificaciones", es posible utilizar la siguiente función:
or(isEmpty(correo_electronico),not(Notificaciones))
Analicemos el funcionamiento de dicha expresión, configurando un mensaje de error "Debe ingresar su casilla de email y aceptar recibir notificaciones" si se demuestra verdadera:
Al igual que las funciones con el operador AND, es posible anidar otras fórmulas del tipo or() dentro de una sola expresión para realizar una comprobación de múltiples condiciones true o false, por ejemplo:
or(Expresión1,or(Expresión1,Expresión2))
Este tipo de validaciones se compone de tres expresiones:
Una expresión condicional, cuyo cumplimiento o no devolverá la evaluación de una u otra expresión dependiente
Una expresión si la condición es verdadera
Una expresión si la condición es falsa
Las mismas se estructuran del siguiente modo, donde el símbolo ? marcará el inicio de la expresión que se devolverá si la condición es verdadera y : marcará el inicio de la expresión que se devolverá si la condición es falsa:
ExpresiónCondicional?ExpresiónCondiciónVerdadera:ExpresiónCondiciónFalsa
Veamos un ejemplo y su funcionamiento:
isEmpty(FechaInicio)?not(Pendiente):smaller(FechaFin,FechaInicio)
La primera validación comprobará si el campo FechaInicio se encuentra vacío.
Si el resultado de la primera condición es verdadero, la segunda expresión comprobará si la casilla "Pendiente" está desactivada.
Si es verdadero, devolverá un mensaje de error ("La fecha de inicio debe estar completa y ser anterior a la fecha de finalización").
Si es falso, no realizará ninguna acción dado que el proceso está pendiente y por ello no se ha ingresado una fecha.
Si el resultado de la primera condición es falso, la tercer expresión comprobará que la fecha de finalización sea menor a la fecha de inicio. Si es verdadero, devolverá el mensaje de error.
Si es falso, no realizará ninguna acción ya que las fechas son válidas.
Valor | Descripción |
---|---|
Función | Tipo de validación | Resultado |
---|---|---|
Operador | Ejemplo | Validación |
---|---|---|
Operador | Expresión | Ejemplo | Validación |
---|---|---|---|
Resultado Expresión1 | Resultado Expresión2 | Resultado de and(Expresión1,Expresión2) |
---|---|---|
Resultado Expresión1 | Resultado Expresión2 | Resultado de and(Expresión1,Expresión2) |
---|---|---|
Resultado Expresión1 | Resultado Expresión2 | Resultado de and(Expresión1,Expresión2) |
---|---|---|
Resultado expresión 1 | Resultado expresión 2 | Resultado de or(expresion1,expresion2) |
---|---|---|
Mensaje
Es el texto que se desea mostrar al usuario para advertir el error cuando se cumple la condición validada y no es posible enviar el formulario
Expresión
Fórmula asociada que ejecutará la validación por cual se muestra el mensaje
isEmpty(Campo)
Validación de contenido
Devuelve true (mensaje de error) si un campo se encuentra vacío
count(Tabla)==0
Validación de contenido
Devuelve true si las filas de una tabla están vacías
sum(Tabla,Columna)!=N
Validación de contenido
Devuelve true si el total de una columna es distinto al permitido
dateDifferenceInBusinessDays(Fecha1,Fecha2)<=N
Validación de contenido
Devuelve true si el número de días de lunes a viernes es menor al permitido por la regla
equal(Campo1,Campo2)
Validación de comparación
Devuelve true si dos campos presenten el mismo valor
smaller(Fecha1,Fecha2)
Validación de comparación
Devuelve true si la primer fecha es menor a la segunda
larger(Fecha1,Fecha2)
Validación de comparación
Devuelve true si la primer fecha es mayor a la segunda
smallerEq(Fecha1,Fecha2)
Validación de comparación
Devuelve true si la primer fecha es menor o igual a la segunda
largerEq(Fecha1,Fecha2)
Validación de comparación
Devuelve true si la primer fecha es mayor o igual a la segunda
not(Campo)
Validación de operadores lógicos
Devuelve true si el campo tiene resultado negativo
not(Expresión)
Validación de operadores lógicos
Devuelve true si la expresión tiene resultado negativo
and(Expresión1,Expresión2)
Validación de operadores lógicos
Devuelve true si se cumplen las dos expresiones
or(Expresión1,Expresión2)
Validación de operadores lógicos
Devuelve true si se cumple una de las dos expresiones
ExpresiónCondicional?ExpresiónCondiciónVerdadera:ExpresiónCondiciónFalsa
Validación con operador ternario
Devuelve el resultado de una segunda expresión dependiente del cumplimiento de la primera
==
count(Tabla)==0
Devuelve true (error) si el total es igual a cero
!=
count(Tabla)!=100
Devuelve true si el total es distinto a 100
>
count(Tabla)>100
Devuelve true si el total es mayor a 100
<
count(Tabla)<10
Devuelve true si el total es menor a 10
==
Campo1==Campo2
Nombre==Apellido
Comprueba si los campos son iguales
!=
Campo1!=Campo2
Email!=ConfirmarEmail
Comprueba si los campos son distintos
>
Campo1>Campo2
Unidades_vendidas>Stock
Comprueba si el primer campo es mayor que el segundo
<
Campo1<Campo2
Cantidad<CantidadMinima
Comprueba si el primer campo es menor que el segundo
false
false
false
true
false
false
false
true
false
true
true
true
false: El usuario ha solicitado recibir un comprobante físico
false: El usuario ha solicitado recibir un comprobante virtual
false: No se muestra mensaje de error, dado que ninguna condición se cumple
true: El usuario no ha solicitado recibir un comprobante físico
false: El usuario ha solicitado recibir un comprobante virtual
false: No se muestra mensaje de error, dado que se cumple solo una condición
false: El usuario ha solicitado recibir un comprobante físico
true: El usuario no ha solicitado recibir un comprobante virtual
false: No se muestra mensaje de error, dado que se cumple solo una condición
true: El usuario no ha solicitado recibir un comprobante físico
true: El usuario no ha solicitado recibir un comprobante virtual
true: Se muestra el mensaje de error porque se cumplen ambas condiciones
false
false
false
true
false
true
false
true
true
true
true
true
false: El campo "Email" está completo
false: La casilla "Recibir notificaciones" está activada
false: No se muestra mensaje de error, dado que ninguna condición se cumple
true: El campo "Email" está vacío
false: La casilla "Recibir notificaciones" está activada
true: Se muestra el mensaje de error porque se cumple una de las condiciones
false: El campo Email está completo
true: La casilla "Recibir notificaciones" está desactivada
true: Se muestra el mensaje de error porque se cumple una de las condiciones
true: El campo "Email" está vacío
true: La casilla "Recibir notificaciones" está desactivada
true: Se muestra el mensaje de error porque se cumplen ambas condiciones