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

De Egeasy
Revisión del 09:40 4 ago 2009 de Imhernandez (Discusión | contribuciones) (Ubicar el "Registro de documentación")

Saltar a: navegación, buscar

Construir una aplicación paso a paso

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
  • El componente catalogo

Como vimos en la Tarea A, 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.


¿Qué es una exportación?

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.

Ciclo de eventos de un contenedor

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

Crear un catálogo como "Registro de documentación"

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 ENTRADAS,
                            TR$ENTRADAS#DOCUMENTOS DOCUMENTOS WHERE ENTRADAS.RRC = DOCUMENTOS.RRC";
   fin
fin

En el código anterior, definimos un contenedor, Registro de documentación, y dentro definimos la componente Documentación de tipo catalogo. Un catalogo sirve para mostrar una lista de objetos. La diferencia con la coleccion radica en que en un catalogo sólo se muestran objetos, pero no se pueden crear nuevos contenedores.

Normalmente, para este tipo de componente definimos un solo atributo: sentencia. A este atributo se le asigna una cadena de texto con la sentencia SQL que se ejecutará cuando el usuario de la aplicación abra el catalogo. En la sentencia del ejemplo, recuperamos las tres columnas que definimos en la exportación haciendo un join de la tabla TR$ENTRADAS con la tabla TR$ENTRADAS#DOCUMENTOS mediante la columna RRC.

¿Qué es la columna RRC?

Valores de un recurso. RRC, DRC y NAME

En la plataforma egEasy, cualquier recurso, siempre que figure en una tabla de la base de datos, aparecerá con tres valores:

  • RRC: es un valor entero que actúa como identificador único del recurso en el sistema.
  • DRC: es un valor entero que proporciona el identificador de la definición del recurso (por ejemplo, cuando se almacene una Entrada esta columna contendrá un número que nos dirá que el objeto almacenado es de tipo Entrada).
  • NAME: propiedad Nombre del recurso. Todos los recursos, cuando se crean, inicializan esta propiedad con el nombre de la definición a la que pertenecen (por ejemplo, para una Entrada esta columna almacenará el texto “Entrada”).

Por lo tanto, en la cláusula WHERE de la sentencia indicamos que haga un join entre una entrada y los documentos de esa entrada.

También observarás que al comienzo de la sentencia seleccionamos las columnas RRC, DRC y NAME. De esta forma, cuando se ejecute la sentencia, la plataforma entenderá que estamos recuperando una lista de objetos y no una simple lista de datos, de modo que podremos abrir las Entradas asociadas a los documentos.

Ubicar el "Registro de documentación"

Por último, antes de comprobar cómo funciona, debemos ubicarlo en la habitación. En esta ocasión lo ubicaremos en Catálogos.

[Registro de entrada y salida] es habitacion
   ubicado [Fichero de terceros]
       -lugar = "Ficheros";
   ubicado [Libro de entrada]
       -lugar = "Libros";
   ubicado [Libro de salida]
       -lugar = "Libros";
   ubicado [Registro de documentación]
       -lugar = "Catálogos";
fin

Compila y actualiza. Crea una nueva entrada, introduce documentos y guárdala. A continuación, abre el Registro de documentación. Verás algo parecido a la siguiente figura.

Registro de documentación

Se mostrará una lista mostrando el Remitente, la fecha en la que presentó el documento y la denominación del documento. Si haces doble clic en cualquiera de las filas, se abrirá la entrada en la que se presentó el documento. Esta asociación automática entre el documento y la entrada es lo que conseguimos al incluir las columnas RRC, DRC y NAME en la sentencia del catálogo.

¿Qué hemos aprendido?

  • La operación exportacion nos permite desglosar los datos almacenados en un contenedor.
  • Para desglosar una tabla en una exportacion, en el atributo columna_bd.nombre debemos poner la ruta completa de la tabla y la columna (TR$ENTRADAS#DOCUMENTOS.NOMBRE).
  • El ciclo de eventos al almacenar un contenedor es: Validación -> Almacenamiento -> Colección -> Exportación.
  • Un catalogo permite recuperar una lista de objetos lanzando una sentencia SQL contra la base de datos.
  • El RRC es el identificador único de un recurso dentro del sistema y el DRC el identificador de su definición.

Siguiente tarea

Véase también