Diferencia entre revisiones de «Tarea D: Validar la introducción de datos»

De Egeasy
Saltar a: navegación, buscar
m
Línea 1: Línea 1:
[[Construir_una_aplicación_paso_a_paso|Construir una aplicación paso a paso]]
+
[[Desarrollar_con_egeasy_paso_a_paso|Desarrollar con egeasy paso a paso]]
  
 
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.
 
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.

Revisión del 10:19 4 ago 2009

Desarrollar con egeasy paso a paso

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.

¿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.

Fichero de Tercero con campo obligatorio

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:

Validación sobre la ficha de Tercero

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 un entero 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 la tabla 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.

Siguiente tarea

Véase también