Validación
La acción de validación comprueba las condiciones de cada criterio con un valor en el atributo validation. Esta acción está relacionada con un botón de tipo validate (consulta acciones de botón).
Esqueleto de XML
<criteria [attributes] validation="[condition to validate]" />
Tipos de validación
Hay varios tipos de validación:
| Valor del atributo | Componente | Descripción | Ejemplos |
|---|---|---|---|
| required | Todos excepto checkbox y radio | Comprueba si el campo tiene valor | validation="{required:true}" |
| text | Text / Textarea / Password | Comprueba si el valor del criterio es un texto (no se permiten números ni espacios en blanco) | validation="{text:true}" |
| textWithSpaces | Text / Textarea / Password | Comprueba si el valor del criterio es un texto (no se permiten números) | validation="{textWithSpaces:true}" |
| number | Text / Textarea / Password | Comprueba si el valor del criterio es un número | validation="number" |
| integer | Text / Textarea / Password | Comprueba si el valor es un entero bien formado | validation="integer" |
| digits | Text / Textarea / Password | Comprueba si el valor es un número con solo dígitos | validation="digits" |
| date | Text / Textarea / Password | Comprueba si el valor es una fecha válida | validation="date" |
| time | Text / Textarea / Password | Comprueba si el valor es una hora válida (hora, minutos y segundos) | validation="time" |
Text / Textarea / Password | Comprueba si el valor es una cadena de correo electrónico válida | validation="email" | |
| gt | Todos excepto checkbox y radio | Comprueba si el valor del criterio es mayor que value | validation="{gt:value}" |
| ge | Todos excepto checkbox y radio | Comprueba si el valor del criterio es mayor o igual que value | validation="{ge:value}" |
| lt | Todos excepto checkbox y radio | Comprueba si el valor del criterio es menor que value | validation="{lt:value}" |
| le | Todos excepto checkbox y radio | Comprueba si el valor del criterio es menor o igual que value | validation="{le:value}" |
| eq | Todos excepto checkbox y radio | Comprueba si el valor del criterio es igual a value | validation="{eq:value}" |
| ne | Todos excepto checkbox y radio | Comprueba si el valor del criterio es distinto de value | validation="{ne:value}" |
| mod | Numeric / Date / Time | Comprueba si el valor del criterio es divisible por value | validation="{mod:value}" |
| range | Numeric / Date / Time | Comprueba si el valor está dentro del rango | validation="{range:{from:value, to:value}}" |
| equallength | Text / Textarea / Password | Comprueba si la longitud del texto es igual a value | validation="{equallength:value}" |
| maxlength | Text / Textarea / Password | Comprueba si la longitud del texto es menor que value | validation="{maxlength:value}" |
| minlength | Text / Textarea / Password | Comprueba si la longitud del texto es mayor que value | validation="{minlength:value}" |
| checkAtLeast | Checkbox / Button checkbox | Asegura que haya al menos value casillas marcadas en el grupo | validation="{checkAtLeast:value}" |
| maxRepeat | Grid columns | Comprueba que el valor de la celda no se repite más de value veces en su columna del grid (la propia celda cuenta como una). Como en AngularJS: los valores se comparan de forma estricta (1 no es "1"), los valores vacíos cuentan y las celdas múltiples (arrays) nunca se marcan. Un value vacío omite la regla y uno no numérico marca todos los valores. Solo se vuelve a comprobar la celda editada: las demás filas mantienen su estado hasta que se editan o se valida el formulario | validation="{maxRepeat:value}" |
| pattern | Text / Textarea / Password | Comprueba si el texto es igual al parámetro | validation="{pattern:value}" |
Valores de validación
Puedes asignar un valor estático simple al comparador de validación:
{eq:3}
... o puedes tomar el valor de un ajuste (setting) o de un criterio:
{eq:{criterion:"CriterionId",type:"date"}}
Estos son los posibles atributos de un comparador de valor:
| Valor del atributo | Descripción | Ejemplos |
|---|---|---|
| value | Valor constante con el que comparar | value:5 |
| criterion | Obtiene el valor de un criterio | criterion:"CriterionId" |
| setting | Obtiene el valor de un ajuste (setting) | setting:"minlengthPassword" |
| message | Locale del mensaje a obtener si no se supera la validación | message:"VALIDATION_MESSAGE_CUSTOM_ERROR" |
| type | Tipo de comparación | type:"type" |
Tipos de comparación
Puedes definir el tipo de la comparación, para comprobar los valores como un tipo definido:
| Tipo | Descripción |
|---|---|
| date | Compara como fechas |
| integer | Compara como enteros |
| float | Compara como números decimales |
| string | Compara como cadenas (por defecto) |
Validación múltiple
Es posible tener más de una acción de validación en un único atributo validation. Para ello, es necesario insertar las validaciones en formato json:
{eq:{criterion:"Field1"},ne:{criterion:"Field2"}}
Hay una excepción con las reglas de validación simples que no tienen parámetros, como required. En este caso, no es necesario poner la regla entre llaves {}:
validation="required"
Si quieres combinar reglas simples con reglas complejas, debes definirla también como una regla compleja:
{required:true, maxlength:{value:6, type:"integer"}}
Campos en contenido oculto
Un criterio puede estar en contenido que el usuario no ve: una pestaña que no es la activa, un paso de un asistente que no es el actual o un elemento de acordeón que está contraído. Cuando falla una acción validate, ambos clientes (AngularJS y React) validan todos los criterios de la pantalla, estén ocultos o no, y después muestran el primero que no es válido:
- Se abren las pestañas, los pasos de asistente y los elementos de acordeón que ocultan el campo, del contenedor exterior al interior. Un contenedor que ya muestra el campo se deja como está, y un acordeón que permite varios elementos abiertos mantiene abiertos los demás.
- Se da el foco al campo y se desplaza hasta que queda a la vista.
- La cabecera de pestaña, el paso de asistente y el elemento de acordeón que contienen campos no válidos se marcan con un indicador de error (un título en rojo con un signo de exclamación, y un número en rojo en un paso de asistente). La marca desaparece cuando se corrigen los campos.
El primer campo no válido es el primero según el orden de la definición de la pantalla. Las pantallas sin contenido oculto siguen funcionando como antes: el mensaje de error se muestra junto al campo.
Para las pruebas automatizadas, la pestaña, el paso o el elemento marcado lleva el atributo data-invalid="true" (y "false" en caso contrario), junto a data-active y data-completed. La pantalla de prueba reveal-invalid de las aplicaciones de prueba tiene un campo obligatorio en una segunda pestaña, en un elemento de acordeón contraído y en el segundo paso de un asistente.
Ejemplos
Criterios estándar con acción de validación
<criteria label="PARAMETER_TEXT" id="TxtReq" variable="TxtReq" component="text" style="col-xs-6 col-sm-3 col-lg-2" validation="{required:true, maxlength:4}"/>
Comprobar que la contraseña es válida
<criteria label="PARAMETER_PASSWD" id="Pas" component="text"
validation="{required: true, pattern:{setting:'passwordPattern'}, ne:{criterion:'OldPas', message:'VALIDATOR_MESSAGE_REPEAT_OLD_PASSWORD'}, minlength:{setting:'minlengthPassword'}}"
style="col2" />
Comprobar si una fecha es mayor o igual que otra
<criteria label="PARAMETER_FILTERED_DATE" id="FilCalReq" variable="FilCalReq" component="filtered-calendar" initial-load="query"
target-action="FilCalDat" style="col-xs-6 col-sm-3 col-lg-2" validation="{required:true,ge:{criterion:'FilCal',type:'date'}}" strict="false" />