Contenedores
Contenido
¿Qué es un contenedor?
Un contenedor es un recurso fundamental que ofrece ODL y que nos permite crear objetos en un sistema de información. ¿Qué podemos entender por objeto? Pues aquellos elementos o conceptos físicos que intervienen en el sistema de información de una organización. Elementos como fichas, ficheros, informes, registros, documentación, etc., son ejemplos de elementos que puede generar y necesitar un sistema de información.
¿Qué definiciones podemos realizar?
En ODL, existen dos formas de definir un contenedor:
Definiciones de tipo
Una definición de tipo nos permite crear objetos en un sistema de información. Es un concepto basado en POO, donde se define una clase con su posterior creación de objetos u otras clases derivadas.
La estructura del objeto vendrá definida, valga la redundancia, en la definición de tipo. Formularios, secciones o campos son algunos de los componentes que podremos incluir en la definición y que nos permitirán introducir la información que almacenará el objeto. Una vez creado el objeto, podrá ser editado o eliminado por el usuario, siempre y cuando tenga los permisos necesarios para poder realizar dichas operaciones.Definiciones de sistema
Una definición de sistema permite crear objetos al crear un centro. Los objetos creados en la instalación de un centro los denominaremos objetos de sistema.
Aunque en ODL se puede definir cualquier componente en un contenedor, en los objetos de sistema normalmente se suele utilizar la componente colección para realizar visualizaciones de objetos, ó, en su defecto, catálogos. Estos componentes nos permitirán realizar visualizaciones personalizadas de los tipos de objetos que se quiera, especificando la información a mostrar. A diferencia de las definiciones de tipo, el usuario no podrá crear, modificar o eliminar los objetos de sistema; será una tarea exclusiva del programador.Veamos un ejemplo
Vamos a realizar un sencillo ejemplo de forma que podamos reflejar los conceptos anteriormente explicados en un caso práctico.Imaginemos que tenemos una estantería vacía. Y en esa estantería iremos insertando libros con el transcurso del tiempo. Veamos pues como podemos trasladar este caso a lenguaje ODL usando contenedores.
¿Cómo implementamos una definición de tipo?
Como ya hemos dicho, ODL nos ofrece una serie de componentes que podremos utilizar para la definición de un tipo. Los componentes más comunes son formularios, secciones y campos. Un campo es la unidad más básica para la introducción de datos. Una sección es un cojunto de campos y un formulario es un conjunto de secciones y campos.
Por tanto, para el concepto de "Libro" realizaremos una definición de tipo, usando los componentes antes mencionados, que nos permitirá crear un objeto por cada libro que insertemos en la estantería:Nuestra definición de tipo ya está creada. Como podrás observar, hemos definido un formulario dentro del contenedor, que a su vez contiene varios campos y una sección que nos va a permitir introducir la información perteneciente a cada libro. Existe un campo timbre que se utiliza para autonumerar, en este caso, los libros que vayamos registrando. Los demás campos son todos de tipo texto.tipo
[Libro]es
contenedor
[Datos]es
formulario
[Código]es
timbre
-certificado
.valor
= [&Valor_secuencia]; -certificado
.secuencia
.nombre
="STR$LIBRO"
; -certificado
.secuencia
.longitud
= 4; [Título]es
texto
[Autor]es
texto
[Edición]es
texto
[Editorial]es
texto
[Contenido]es
seccion
[Tipo]es
texto
-edicion.valores
= $Matriz("Literario"
,"Biografía"
,"Científico"
,"Infantil"
); -apariencia.desplegable
= verdadero; [Sinopsis]es
texto
-edicion.longitud
= 1000;fin
fin
fin
Otro elemento que aparece en la definición que no hemos comentado son los atributos. Los atributos intervienen en todas las definiciones de ODL, y sirven para configurar el comportamiento de las definiciones. Los atributos que aquí se contemplan son relativos a campos y no nos detendremos en explicar su funcionamiento. En este mismo documento, abordaremos con mayor profundidad los atributos que afectan directamente a los contenedores.
Ahora, veamos cómo se refleja el código en la aplicación egExplorer de forma que nos permite crear objetos de tipo "Libro":Una vez rellenado los campos, guardaremos el objeto. Pero, ¿cómo puedo obtener un listado de los libros que voy introduciendo? ¿Cómo puedo "ver mi estantería"?
¿Cómo implementamos una definición de sistema?
Nos disponemos a crear una instancia del sistema, un elemento estático en el que podremos visualizar los objetos que hemos creado. La forma de definir un objeto de sistema es similar a la definición de tipo pero sin incluir la palabra reservada tipo
. Es decir, [nombre]
es
contenedor
. Sin más preámbulos, veamos como se define nuestra "estantería":
[Estantería 1]es
contenedor
[Contenido]es
coleccion
-nombre_tabla
="TC$LIBROS"
;contiene
[Libro]columna
[Código] -columna_bd
.nombre
="CÓDIGO"
; -origen
= [Datos].[Código];columna
[Título] -columna_bd
.nombre
="TÍTULO"
; -origen
= [Datos].[Título];columna
[Autor] -columna_bd
.nombre
="AUTOR"
; -origen
= [Datos].[Autor];columna
[Sinopsis] -columna_bd
.nombre
="SINOPSIS"
; -origen
= [Datos].[Contenido].[Sinopsis];fin
fin
Como ya hemos dicho, un contenedor puede almacenar componentes, además de otros contenedores. En este caso, se utiliza la componente colección para visualizar los objetos creados. En la colección especificamos los campos que queremos visualizar además de especificar el tipo de objetos. Por eso decimos que la definición puede contener componentes (una colección en este caso) u otros contenedores (contiene
[Libro]
dentro de la componente colección
).
Al hacer clic en "Estantería 1" abrimos el objeto de sistema, y se visualiza el listado de objetos creados. Dentro de ella, podremos crear aquellos contenedores que estén en el dominio del objeto de sistema, en este caso, sólo podremos crear contenedores "Libro".