Tarea A: Libros y registro de entrada y salida
En esta sección, vamos a implementar el registro de entrada y salida que acabamos de definir. Para comenzar a trabajar, te recomendamos que descargues este proyecto básico que te servirá como punto de partida.
En el directorio #Source, crea un fichero y llámalo Main.ndf. Ábrelo con tu editor favorito y vamos a comenzar a trabajar.
Empezaremos definiendo el concepto Entrada:
unidad [Main] tipo [Entrada] es contenedor [Datos generales] es formulario [Número] es texto [Fecha] es texto [Remitente] es texto [Destinatario] es texto fin fin
¿Qué hemos hecho?
En primer lugar, hemos declarado el nombre de la unidad ([Main]) en la que estamos trabajando. Podemos definir nuestro sistema en cuantos ficheros queramos, pero para que el compilador los analice, debemos darle un nombre de unidad a cada uno y, además, incluirlo en el fichero del proyecto, como veremos más adelante.
A continuación, hemos declarado el tipo Entrada diciendo que es un contenedor. Contenedor es un tipo nativo de la plataforma y una de las piezas fundamentales de ODL. Los contenedores nos permitirán definir, entre otros, formularios y colecciones de datos con gran facilidad.
Dentro del contenedor hemos definimos una componente formulario, indicando que vamos a declarar un formulario de datos. Seguidamente, decimos que este formulario tiene cuatro campos (de momento dejaremos fuera la documentación adjunta), todos de tipo texto.
Por último, cerramos la declaración de formulario y la declaración del contenedor Entrada.
Ya está. Ya podemos crear entradas en nuestro sistema. ¿Dónde? En el Libro de entrada:
[Libro de entrada] es contenedor [Contenido] es coleccion -nombre_tabla = "TC$ENTRADAS"; contiene [Entrada] columna [Número] -columna_bd.nombre = "NUMERO"; -origen = [Datos generales].[Número]; columna [Fecha] -columna_bd.nombre= "FECHA"; -origen = [Datos generales].[Fecha]; fin fin
En este fragmento de código, definimos el Libro de entrada también como contenedor. Pero, ¿no ponemos tipo antes de [Libro de entrada]? Antes de continuar es necesario aclarar un concepto. En ODL se pueden hacer dos clases de declaraciones:
- Declaraciones de tipo
- Declaraciones de sistema
Si se hace una declaración de tipo, estamos definiendo un objeto reutilizable y del que pueden existir varias instancias. Al hacer una declaración de sistema, estamos indicando que sólo existe una instancia. Por hacer un símil con la Programación Orientada a Objetos, las declaraciones de tipo serían las clases de las cuáles se crean instancias durante la vida de la aplicación y las declaraciones de sistema serían clases singleton. El Libro de entrada es una definición de sistema; es decir, sólo existirá una instancia del libro en la aplicación. Por otro lado, podremos crear múltiples instancias de [Entrada]. Dentro del Libro definimos una componente de tipo coleccion a la cuál denominamos Contenido, indicando que este objeto tiene una colección de objetos. El tipo de objetos que puede contener se especifica mediante la sentencia contiene. En este caso, indicamos que la colección Contenido contiene objetos de tipo Entrada. En la aplicación final, una colección se verá como una lista de objetos. Para generar dicha lista, el sistema crea una tabla en la base de datos con las columnas que se mostrarán en la vista. El nombre de esta tabla lo especificamos en el atributo nombre_tabla. En el ejemplo, indicamos que para esta colección se cree la tabla ENTRADAS. Para añadir columnas a la vista utilizamos las declaraciones de columna. En nuestro libro, indicamos que queremos dos columnas: [Número] y [Fecha]. Para cada columna, deben indicarse al menos dos atributos:
- Cómo se llamará la columna en la base de datos (columna_bd.nombre)
- Qué dato se mostrará en la vista (origen)
Por ejemplo, para la columna [Número] decimos que en la base de datos se llamará NUMERO y que debe mostrar el campo [Datos generales].[Número] (es decir, el campo Número que está en el formulario [Datos generales] del objeto Entrada). Lo único que falta para que nuestro libro sea operativo es hacerlo accesible para los usuarios. Para ello, debemos definir una habitación y ubicar en ella el Libro de entrada.
[Registro de entrada y salida] es habitacion
ubicado [Libro de entradas] -lugar = "Libros"; fin