Tarea D: Validar la introducción de datos
Nuestro registro de entrada y salida está bastante completo: las entradas y salidas se autonumeran y esta numeración se reinicia todos los años; tenemos fichas para almacenar la información de todas las personas (físicas o jurídicas) que presenten documentación; además, podemos reflejar la documentación presentada y el departamento al que va dirigido. Pero, ¿y si al rellenar los datos no se especifica alguno de estos datos? ¿Y si al introducir una ficha de Tercero no se especifican el Nombre o el CIF? Necesitamos algún mecanismo para garantizar que determinados datos siempre se introduzcan.
Contenido
¿Qué es una validación? Insertar una condición en un formulario
Para alcanzar este objetivo, ODL proporciona una operación sobre los contenedores: las validaciones. Una validación es un conjunto de condiciones que se evalúan cuando el objeto va a almacenarse. En caso de que alguna de las condiciones se viole, la plataforma lanza un mensaje e impide que el objeto se almacene. Veamos un ejemplo:
tipo
[Tercero]es
contenedor
[Datos generales]es
formulario
[Nombre/Razón social]es
texto
[Apellidos]es
texto
[CIF/NIF]es
texto
[Dirección]es
texto
[Código postal]es
texto
[Municipio]es
texto
[Provincia]es
texto
[Teléfono 1]es
texto
[Teléfono 2]es
texto
[Fax]es
texto
[Email]es
texto
fin
condicion
[El campo Nombre/Razón social no puede estar vacío] -regla
= [Datos generales].[Nombre/Razón social] = vacio; -localizacion
.componente
= [Datos generales].[Nombre/Razón social]; -localizacion
.mensaje
="[OBLIGATORIO]"
; -tipo
= error; -mensaje
="Debe introducir un valor para este campo."
;fin
Atributos de una condición
Para cada campo o valor que queramos comprobar deberemos añadir una declaración de condicion
como la del ejemplo anterior.
En el atributo regla
se especifica la condición lógica que se evalúa para comprobar si la condición es o no violada; en nuestro ejemplo, la condición se viola si el campo Nombre/Razón social está vacío.
En el atributo localizacion.componente
indicamos el campo en el que debe posicionarse el cursor cuando se dispare la condición; en el ejemplo, cuando esta condición se viole el cursor se posicionará en el campo Nombre/Razón social.
En el atributo localizacion.mensaje
introducimos el mensaje que queremos que aparezca en el campo indicado por localizacion.componente
cuando el campo está vacío (incluso antes de se dispare la condición); en nuestro ejemplo, cuando creemos una nueva ficha de Tercero aparecerá el mensaje [OBLIGATORIO] en el campo Nombre/Razón social.
En el atributo tipo
especificamos si la condicion
produce un error o una advertencia. Ambos lanzan un mensaje al usuario. La diferencia es que el error impide que el contenedor se guarde, mientras que la advertencia sólo avisa al usuario, dejando a su elección almacenar o no el objeto.
Por último, el atributo mensaje
contiene el mensaje que se mostrará al usuario cuando se viole la condicion
. Este mensaje aparece a continuación del nombre de la condicion
. En nuestro ejemplo, el mensaje completo de error sería: “El campo Nombre/Razón social no puede estar vacío. Debe introducir un valor para este campo”.
Compila y actualiza. Veamos cómo funciona.
Como podrás observar, cuando creas una nueva ficha de Tercero te aparece automáticamente [OBLIGATORIO] en el campo Nombre/Razón social. Si intentas almacenar la ficha sin introducir ningún dato, se violará la condición y te aparecerá una ventana similar a la siguiente:
Si haces clic sobre el texto que aparece a continuación de error (El campos Nombre…), el cursor se posicionará automáticamente en el campo que produce el error.
Añadiendo condiciones más complejas
Las reglas de comprobación no tienen que ser tan simples como la que hemos puesto en el ejemplo anterior. Por ejemplo, supongamos que queremos validar que se introducen todos los datos de contacto del Tercero.
tipo
[Tercero]es
contenedor
[Datos generales]es
formulario
[Nombre/Razón social]es
texto
[Apellidos]es
texto
[CIF/NIF]es
texto
[Dirección]es
texto
[Código postal]es
texto
[Municipio]es
texto
[Provincia]es
texto
[Teléfono 1]es
texto
[Teléfono 2]es
texto
[Fax]es
texto
[Email]es
texto
fin
condicion
[El campo Nombre/Razón social no puede estar vacío] -regla
= [Datos generales].[Nombre/Razón social] = vacio; -localizacion
.componente
= [Datos generales].[Nombre/Razón social]; -localizacion
.mensaje
="[OBLIGATORIO]"
; -tipo
= error; -mensaje
="Debe introducir un valor para este campo."
;condicion
[Falta alguno de los datos de contacto] -regla
= ([Datos generales].[Dirección] = vacio)o
([Datos generales].[Código Postal] = vacio)o
([Datos generales].[Municipio] = vacio)o
([Datos generales].[Provincia] = vacio); -localizacion
.componente
= [Datos generales].[Dirección]; -tipo
= error; -mensaje
="Debe introducir la dirección completa."
;fin
Haciendo uso del operador lógico o
, evaluamos todos los campos que forman la dirección completa. Si alguno de esos campos está vacío, se violará la condición y no se podrá almacenar el contenedor.
¿Qué hemos aprendido?
- La validación es una operación que nos permite comprobar la validez de los datos introducidos en un formulario.
- Una validación se compone de una o varias condiciones. Debemos declarar una
condicion
por cada comprobación que queramos realizar. - Las condiciones se disparan cuando el atributo
regla
se evalúa a verdadero. - Una
condicion
puede ser de error (impide almacenar el contenedor) o de advertencia (sólo informa al usuario).
Ejercicios
- Comprueba qué ocurre cuando ponemos advertencia en vez de error en el atributo
tipo
. - La función $longitudTexto recibe como parámetro de entrada un campo de tipo
texto
y devuelve unentero
con el número de caracteres del campo. Añade una condición a la ficha de Tercero para que compruebe que la longitud del campo Código postal es exactamente 5. - La función $numeroFilas recibe como parámetro de entrada una matriz y devuelve un entero con el número de filas de la
tabla
. Añade una condición a la definición de Entrada para que compruebe que latabla
de Documentación presentada tiene al menos una fila. Ten en cuenta que debemos convertir la tabla a matriz con la funcion $matriz cuyo resultado nos servirá como parámetro en $numeroFilas.
- Comprueba qué ocurre cuando ponemos advertencia en vez de error en el atributo