Tarea E: Utilizar el registro como un almacén de documentación

De Egeasy
Saltar a: navegación, buscar

Es muy habitual en la Administración Pública tener que presentar una fotocopia del DNI siempre que deseamos iniciar un trámite administrativo. Y siempre nos ha parecido absurdo (desde el punto de vista del administrado) tener que presentar una y otra vez la misma documentación.

Siendo conscientes de este problema, el Registro de entrada y salida ha decidido proporcionar un servicio al resto de los departamentos para conocer cuál es la documentación que una persona ha presentado durante toda la vida del registro, de modo que si ya ha presentado un documento no tenga que volver a hacerlo.

Para cubrir este requisito haremos uso de dos nuevos conceptos de ODL:

  • La operación exportacion
  • La componente catalogo

Como vimos en la Tarea 1, la plataforma egEasy utiliza una arquitectura de base de datos orientada a objetos. Con este esquema, no podemos hacer una sentencia contra la base de datos para conocer todos los documentos presentados en todas las entradas, ya que los objetos se encuentran serializados.

También vimos que una coleccion nos permite deserializar los objetos, pero no nos sirve para este caso: el objetivo de la coleccion es mostrar una lista de objetos y ahora lo que queremos es obtener una lista de los documentos presentados, que actualmente se encuentran en las filas de la tabla de Documentación presentada. En su lugar, utilizaremos una exportacion.

Una exportacion es una operación que se ejecuta cuando un contenedor se almacena. Cuando este evento se produce, se rellena la tabla de la exportación con los datos indicados en su definición. Veamos un ejemplo.

[Exportación de entradas] es exportacion
   -nombre_tabla = "TR$ENTRADAS";
   -universo = [Entrada];
columna [Remitente] -columna_bd.nombre = "REMITENTE"; -columna_bd.tipo = vinculo; -origen = [Datos generales].[Remitente]; columna [Fecha de presentación] -columna_bd.nombre = "FECHA_PRESENTACION"; -origen = [Datos generales].[Fecha]; columna [Documento] -columna_bd.nombre = "TR$ENTRADAS#DOCUMENTOS.NOMBRE"; -origen = [Datos generales].[Documentación presentada].[Documento]; fin

Al igual que en la definición de una colección, en el atributo nombre_tabla indicamos la tabla de la base de datos a la que se exportarán los datos.

En el atributo universo especificamos sobre qué definición de contenedor se ejecuta la exportacion. Al poner Entrada, estamos diciendo que la exportacion debe ejecutarse siempre que una Entrada se almacena.

A continuación, indicamos los datos que deseamos exportar de forma similar a como hicimos para las colecciones. En este caso, la diferencia la encontramos en la definición de la columna Documento. En el atributo columna_bd.nombre, en vez de poner un nombre para la columna, hemos puesto TR$ENTRADAS#DOCUMENTOS.NOMBRE. ¿Por qué? Si creásemos una fila en la tabla TR$ENTRADAS por cada documento que hubiese en una entrada, estaríamos repitiendo el resto de los datos que exportásemos y, además, estaríamos desvirtuando la tabla, ya que cada fila no representaría una entrada, sino datos de una entrada mezclados con datos del documento. Para evitar esto, creamos una nueva tabla (TR$ENTRADAS#DOCUMENTOS) y, en esa tabla, almacenamos el documento presentado en la columna NOMBRE.

Al actualizar, la plataforma entiende la definición y, automáticamente, asocia la tabla TR$ENTRADAS con la tabla TR$ENTRADAS#DOCUMENTOS. Además, cuando se guarde una entrada, exportará la fecha a la columna FECHA_PRESENTACION y creará una fila en la tabla TR$ENTRADAS#DOCUMENTOS por cada documento que figure en la tabla Documentación presentada, cumplimentando la columna NOMBRE con el valor del campo Documento.

Con las exportaciones, cerramos el ciclo de eventos que se producen al guardar un contenedor:

  • Primero se comprueban las validaciones (si las hubiera)
  • Después, se almacena el contenedor
  • A continuación, se rellenan las tablas de coleccion
  • Por último, se ejecutan las exportaciones definidas sobre el contenedor (si las hubiera)

Una vez definida la exportacion, tenemos que mostrar la lista de documentos a los usuarios del registro. Para ello crearemos un nuevo objeto de sistema:

[Registro de documentación] es contenedor
   [Documentación] es catalogo
       -sentencia = 
                         "SELECT ENTRADAS.RRC, ENTRADAS.DRC, ENTRADAS.NAME, ENTRADAS.REMITENTE AS ""Remitente"", ENTRADAS
                          FECHA_PRESENTACION AS ""Fecha de presentación"", DOCUMENTOS.NOMBRE AS ""Documento"" FROM TR$ENTRADAS 
                          {{{1}}};
   fin
fin