Diferencia entre revisiones de «Catálogos»

De Egeasy
Saltar a: navegación, buscar
(Ejemplo)
 
(No se muestran 45 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
==¿Qué es un catálogo?==
 
==¿Qué es un catálogo?==
<p>Un {{T|catálogo}} es un componente de ODL que se define como instancia en las definiciones de [[Contenedores|contenedor]], tanto en definiciones de sistema como en definiciones de tipo contenedor. También es posible definir un {{PR|tipo}} de catálogo para definir otros a partir de èl, pero en estos casos, su definición se realiza independientemente de cualquier recurso de ODL.</p>
+
<p>Un {{T|catálogo}} es un componente de ODL que se define como instancia en las definiciones de [[Contenedores|contenedor]], tanto en definiciones de sistema como en definiciones de tipo contenedor. También es posible definir un {{PR|tipo}} de catálogo para definir otros a partir de èl, pero en estos casos, su definición no se realizará bajo el dominio de ningún contenedor, sino que será una definición independiente de cualquier otra.</p>
  
 
==¿Para qué sirve?==
 
==¿Para qué sirve?==
<p>Los catálogos se utilizan para realizar vistas de los diferentes recursos de un centro mediante sentencias SQL. A diferencia de las colecciones, un catálogo no almacena ningún objeto, ni crea ninguna tabla en la base de datos, y tampoco es posible acceder a los objetos desde un catálogo (salvo una excepción). Simplemente, se ejecutará la sentencia SQL que hayamos descrito y eso nos devolverá la vista de los recursos seleccionados en forma de lista. Esto nos va a permitir crear listas cuya información mostrada puede no tener ningún tipo de relación entre sí.</p>
+
<p>Los catálogos se utilizan para obtener listas de objetos mediante sentencias SQL, aunque, a diferencia de las colecciones, no almacenan ningún objeto, ni crean ninguna tabla en la base de datos, y tampoco es posible crear ni acceder a los objetos que se listan (salvo una excepción). Simplemente, se ejecutará la sentencia SQL al abrir el catálogo que hayamos declarado y eso nos devolverá una lista con la información seleccionada. Esto nos va a permitir crear listas con información que provenga de diferentes tablas del sistema, aprovechando las posibilidades de las sentencias SQL.</p>
<p>La excepción a la que hemos hecho mención, tiene mucho que ver con las propiedades '''RRC''', '''DRC''' y '''Name''' de un objeto, ya que, sólo en caso de incluir estos campos en la sentencia SQL, podríamos acceder a los objetos que indiquen ese RRC, DRC y Name accediendo al catálogo y abriendo el ítem que nos interese.</p>
+
<p>La excepción a la que hemos hecho mención, tiene mucho que ver con las propiedades '''RRC''', '''DRC''' y '''Name''' de un objeto, ya que, sólo en caso de incluir estos campos en la sentencia SQL, podríamos acceder a los objetos que indiquen ese RRC, DRC y Name.</p>
  
 
==Sintaxis==
 
==Sintaxis==
  
*'''Definición de tipo'''
+
===Definición de tipo===
  
 
  {{PR|tipo}} [Nombre] {{PR|es}} {{T|catalogo}}
 
  {{PR|tipo}} [Nombre] {{PR|es}} {{T|catalogo}}
 
     -{{AT|descripcion}} = {{STR|"Descripción"}}
 
     -{{AT|descripcion}} = {{STR|"Descripción"}}
     -{{AT|sentencia}} = {{STR|"select ... from ..."}}
+
     -{{AT|sentencia}} = {{STR|"SELECT ... FROM ..."}}
 
  {{PR|fin}}
 
  {{PR|fin}}
  
*'''Definición como instancia''' (a nivel de contenedor)
+
===Definición como instancia===
  
 
  {{PR|tipo}} [Contenedor] {{PR|es}} {{RE|contenedor}}          {{COM|//requiere la creación de un objeto tipo Contenedor}}
 
  {{PR|tipo}} [Contenedor] {{PR|es}} {{RE|contenedor}}          {{COM|//requiere la creación de un objeto tipo Contenedor}}
Línea 22: Línea 22:
 
     ...
 
     ...
 
     [Nombre] {{PR|es}} {{T|catalogo}}
 
     [Nombre] {{PR|es}} {{T|catalogo}}
         -{{AT|sentencia}} = {{STR|"select ... from ..."}}
+
         -{{AT|sentencia}} = {{STR|"SELECT ... FROM ..."}}
 
     {{PR|fin}}
 
     {{PR|fin}}
 
     ...
 
     ...
Línea 29: Línea 29:
 
  {{PR|fin}}
 
  {{PR|fin}}
  
ó
+
o
  
 
  [Contenedor] {{PR|es}} {{RE|contenedor}}          {{COM|//catálogo incluído en una definición de sistema}}
 
  [Contenedor] {{PR|es}} {{RE|contenedor}}          {{COM|//catálogo incluído en una definición de sistema}}
Línea 36: Línea 36:
 
     ...
 
     ...
 
     [Nombre] {{PR|es}} {{T|catalogo}}
 
     [Nombre] {{PR|es}} {{T|catalogo}}
         -{{AT|sentencia}} = {{STR|"select ... from ..."}}
+
         -{{AT|sentencia}} = {{STR|"SELECT ... FROM ..."}}
 
     {{PR|fin}}
 
     {{PR|fin}}
 
     ...
 
     ...
Línea 44: Línea 44:
  
 
==Creación de vistas==
 
==Creación de vistas==
<p>Cuando un centro se encuentra en explotación, es posible que sea necesario cambiar en algún momento las sentencias SQL incluídas en las definiciones de catálogos para obtener nuevos resultados. De forma que tendremos que ir al código correspondiente, variar la sentencia SQL y actualizar el diccionario de dicho centro para reflejar los cambios realizados.</p>
+
<p>Cuando un centro se encuentra en explotación, es posible que sea necesario cambiar en algún momento las sentencias SQL incluídas en las definiciones de catálogos para obtener otros resultados que se requieran. De forma que tendremos que ir al código correspondiente, variar la sentencia SQL y actualizar el diccionario de dicho centro para reflejar los cambios realizados.</p>
 
<p>Con el fin de evitar cambios en el código fuente del centro, hacemos uso de las vistas en la base de datos.</p>
 
<p>Con el fin de evitar cambios en el código fuente del centro, hacemos uso de las vistas en la base de datos.</p>
<p>Podríamos definir una vista como una consulta, donde se reflejan los datos que hayamos seleccionado de las distintas tablas de la base de datos. No es un concepto físico, es decir, no se realiza una copia física de los datos obtenidos, de manera que si hay modificaciones en las tablas, éstos serán aplicados a aquellas vistas que se vean afectadas.</p>
+
<p>Podríamos definir una vista como una tabla lógica, donde se reflejan los datos que seleccionamos de las distintas tablas de la base de datos. No es un concepto físico, es decir, no se realiza una copia física de los datos obtenidos, de manera que si hay modificaciones en las tablas, éstos serán aplicados a aquellas vistas que se vean afectadas.</p>
<p>Por tanto, la utilización de vistas nos permite abstraer el modelo de la base de datos subyacente, de forma que en vez de modificar la sentencia SQL de un catálogo por ejemplo, modificaremos la vista. Por tanto, la petición SQL del catálogo, tendremos que hacerla sobre la vista o vistas y no sobre la tabla o tablas.</p>
+
<p>Por tanto, la utilización de vistas nos permite abstraer el modelo de la base de datos subyacente, de forma que en vez de modificar la sentencia SQL de un catálogo por ejemplo, modificaremos la vista de la manera que nos convenga. Por tanto, la petición SQL del catálogo, tendremos que hacerla, no sobre las tablas, sino sobre la vista o vistas creadas.</p>
<p>Las vistas que creemos tendremos que definirlas en ficheros '''.sql''' que almacenaremos en la carpeta '''Installation''' del modelo. Además, el nombre del fichero tendrá que ir siempre precedido de los caracteres '''TV$'''.</p>
+
<p>Las vistas a crear tendremos que definirlas en ficheros '''.sql''' que almacenaremos en la carpeta '''Installation''' del modelo. Además, el nombre del fichero tendrá que ir siempre precedido de los caracteres '''TV$'''.</p>
 
<p>Al instalar un centro, los ficheros que se incluyan en dicha carpeta serán ejecutados, por lo que las sentencias incluídas en los .sql serán ejecutadas y por consiguiente, las vistas serán creadas. En caso de modificar alguna vista, se deberá actualizar el centro para que vuelva a ejecutar la sentencia modificada.</p>
 
<p>Al instalar un centro, los ficheros que se incluyan en dicha carpeta serán ejecutados, por lo que las sentencias incluídas en los .sql serán ejecutadas y por consiguiente, las vistas serán creadas. En caso de modificar alguna vista, se deberá actualizar el centro para que vuelva a ejecutar la sentencia modificada.</p>
 +
<p>Habrá que tener en cuenta también el gestor de la BBDD que utiliza el centro, ya que pueden tener distintas formas de tratar las vistas. Por ejemplo, Oracle no permite la actualización de vistas, mientras que SQL Server sí.</p>
  
 
==Atributos==
 
==Atributos==
Línea 58: Línea 59:
 
{| border="2" cellpadding="4" cellspacing="0" style=" border: 1px #aaa solid; border-collapse: collapse; " .
 
{| border="2" cellpadding="4" cellspacing="0" style=" border: 1px #aaa solid; border-collapse: collapse; " .
 
|-  
 
|-  
! style="width:170px; background:#cc8800; color:white" |'''Atributo'''
+
! style="width:170px; {{color tabla}} color:white" |'''Atributo'''
! style="width:100px; background:#cc8800; color:white" |'''Tipo'''
+
! style="width:100px; {{color tabla}} color:white" |'''Tipo'''
! style="width:140px; background:#cc8800; color:white" |'''Valor por defecto'''
+
! style="width:140px; {{color tabla}} color:white" |'''Valor por defecto'''
! style="width:550px; background:#cc8800; color:white" |'''Observaciones'''
+
! style="width:550px; {{color tabla}} color:white" |'''Observaciones'''
 
|-  
 
|-  
 
| align="center" |{{AT|ayuda}}
 
| align="center" |{{AT|ayuda}}
Línea 97: Línea 98:
 
{| border="2" cellpadding="4" cellspacing="0" style=" border: 1px #aaa solid; border-collapse: collapse; " .
 
{| border="2" cellpadding="4" cellspacing="0" style=" border: 1px #aaa solid; border-collapse: collapse; " .
 
|-  
 
|-  
! style="width:170px; background:#cc8800; color:white" |'''Atributo'''
+
! style="width:170px; {{color tabla}} color:white" |'''Atributo'''
! style="width:100px; background:#cc8800; color:white" |'''Tipo'''
+
! style="width:100px; {{color tabla}} color:white" |'''Tipo'''
! style="width:140px; background:#cc8800; color:white" |'''Valor por defecto'''
+
! style="width:140px; {{color tabla}} color:white" |'''Valor por defecto'''
! style="width:550px; background:#cc8800; color:white" |'''Observaciones'''
+
! style="width:550px; {{color tabla}} color:white" |'''Observaciones'''
 
|-  
 
|-  
 
| align="center" |{{AT|sentencia}}
 
| align="center" |{{AT|sentencia}}
Línea 111: Línea 112:
  
 
==Ejemplo==
 
==Ejemplo==
<p>En este apartado del artículo vamos a tratar la creación de un catálogo concreto, haciendo uso de las vistas.</p>
+
<p>Para mostrar un ejemplo de cómo crear un catálogo haciendo uso de las vistas, utilizaremos el sistema de información creado en la serie de artículos [[Construir una aplicación paso a paso|"Construir una aplicación paso a paso"]].</p>
<p>Antes de nada vamos a crear la vista correspondiente, para una vez creada, definir el catálogo así como su sentencia SQL. Pero para ello, hay que tener en cuenta el gestor de BBDD que vamos a utilizar, ya que el tratamiento que se le da a las vistas puede variar.</p>
+
<p>Concretamente, nos centraremos en la [[Tarea_E:_Utilizar_el_registro_como_un_almacén_de_documentación|Tarea E]] donde se muestra cómo crear un catálogo, aunque en este caso, hace uso de una {{RE|exportación}} previa. La sentencia SQL del catálogo se lanza sobre la tabla TR$ENTRADAS creada en la exportación.</p>
<p>Por ejemplo, Oracle no permite la actualización de las vistas, mientras que SQL Server sí lo permite.</p>
+
<p>Por tanto, recomendamos echar un vistazo a dicho artículo antes de continuar con el ejemplo.</p>
 +
<p>Una vez visto el artículo, y utilizando la exportación declarada, vamos a crear un catálogo que realice la misma operación pero haciendo uso de una vista.</p>
 +
<p>Por tanto, crearemos una vista que realice la misma petición que el catálogo de la [[Tarea_E:_Utilizar_el_registro_como_un_almacén_de_documentación|Tarea E]]. La vista la crearemos para SQL Server:</p>
  
*Vista en SQL Server:
+
CREATE VIEW TV$DOCUMENTOS_ENTRADAS AS<br/>
 +
SELECT<br/>
 +
          ENTRADAS.RRC, ENTRADAS.DRC, ENTRADAS.NAME, ENTRADAS.REMITENTE AS ""Remitente"",
 +
          ENTRADAS.FECHA_PRESENTACION AS ""Fecha de presentación"",
 +
          DOCUMENTOS.NOMBRE AS ""Documento""<br/>
 +
FROM<br/>
 +
          TR$ENTRADAS ENTRADAS,
 +
          TR$ENTRADAS#DOCUMENTOS DOCUMENTOS <br/>
 +
WHERE<br/>
 +
          ENTRADAS.RRC = DOCUMENTOS.RRC
  
  CREATE VIEW OR REPLACE TV$SOLICITUDES_HO AS
+
<p>Se creará en la base de datos una vista cuya información obtenida será igual que la del catálogo definido en la [[Tarea_E:_Utilizar_el_registro_como_un_almacén_de_documentación|Tarea E]]. Ahora sólo faltaría modificar la sentencia SQL del catálogo para que lance la petición sobre la vista:</p>
     SELECT EXP.RRC, EXP.DRC, EXP.NAME,
+
 
            EXP.NUMERO_EXPEDIENTE AS "Nº de expediente",
+
  [Registro de documentación] {{PR|es}} {{RE|contenedor}}
            TERC.DENOMINACION AS "Entidad",
+
    [Documentación] {{PR|es}} {{T|catalogo}}
            SOLI.NUMERO_REGISTRO_GENERAL AS "Nº de registro general",
+
        -{{AT|sentencia}} = {{STR|"SELECT * FROM TV$DOCUMENTOS_ENTRADAS"}};
            SOLI.FECHA_REGISTRO_GENERAL AS "Fecha de registro general",
+
     {{PR|fin}}
            SOLI.FECHA_SOLICITUD AS "Fecha solicitud"
+
{{PR|fin}}
    FROM TR$EXPEDIENTES EXP,
+
 
            TR$FIC_TERC TERC,
+
<p>De esta manera, hemos conseguido abstraer el código de las posibles modificaciones que se pudieran dar para la obtención de datos.</p>Si fuera necesario realizar algún cambio, se haría en la vista, y la sentencia SQL del catálogo no haría falta modificarla.
            TR$SOLICITUDES_HO SOLI
+
<p>Como ya hemos dicho, el código que crea la vista la guardaremos en un fichero '''.sql'''. Este fichero lo almacenaremos en la carpeta '''Installation''' de nuestro modelo para que al instalarlo se ejecute y se cree la vista.
    WHERE EXP.RRC = SOLI.DOMAIN_RRC
+
 
            AND EXP.DENOMINACION_RRC = TERC.RRC
+
[[Categoría:ODL]]
;
+
[[Categoría:Definiciones]]
 +
[[Categoría:Componentes]]

Revisión actual del 14:00 16 jun 2009

¿Qué es un catálogo?

Un catálogo es un componente de ODL que se define como instancia en las definiciones de contenedor, tanto en definiciones de sistema como en definiciones de tipo contenedor. También es posible definir un tipo de catálogo para definir otros a partir de èl, pero en estos casos, su definición no se realizará bajo el dominio de ningún contenedor, sino que será una definición independiente de cualquier otra.

¿Para qué sirve?

Los catálogos se utilizan para obtener listas de objetos mediante sentencias SQL, aunque, a diferencia de las colecciones, no almacenan ningún objeto, ni crean ninguna tabla en la base de datos, y tampoco es posible crear ni acceder a los objetos que se listan (salvo una excepción). Simplemente, se ejecutará la sentencia SQL al abrir el catálogo que hayamos declarado y eso nos devolverá una lista con la información seleccionada. Esto nos va a permitir crear listas con información que provenga de diferentes tablas del sistema, aprovechando las posibilidades de las sentencias SQL.

La excepción a la que hemos hecho mención, tiene mucho que ver con las propiedades RRC, DRC y Name de un objeto, ya que, sólo en caso de incluir estos campos en la sentencia SQL, podríamos acceder a los objetos que indiquen ese RRC, DRC y Name.

Sintaxis

Definición de tipo

tipo [Nombre] es catalogo
    -descripcion = "Descripción"
    -sentencia = "SELECT ... FROM ..."
fin

Definición como instancia

tipo [Contenedor] es contenedor          //requiere la creación de un objeto tipo Contenedor
    ...
    ...              //otras definiciones
    ...
    [Nombre] es catalogo
        -sentencia = "SELECT ... FROM ..."
    fin
    ...
    ...              //otras definiciones
    ...
fin

o

[Contenedor] es contenedor           //catálogo incluído en una definición de sistema
    ...
    ...              //otras definiciones
    ...
    [Nombre] es catalogo
        -sentencia = "SELECT ... FROM ..."
    fin
    ...
    ...              //otras definiciones
    ...
fin

Creación de vistas

Cuando un centro se encuentra en explotación, es posible que sea necesario cambiar en algún momento las sentencias SQL incluídas en las definiciones de catálogos para obtener otros resultados que se requieran. De forma que tendremos que ir al código correspondiente, variar la sentencia SQL y actualizar el diccionario de dicho centro para reflejar los cambios realizados.

Con el fin de evitar cambios en el código fuente del centro, hacemos uso de las vistas en la base de datos.

Podríamos definir una vista como una tabla lógica, donde se reflejan los datos que seleccionamos de las distintas tablas de la base de datos. No es un concepto físico, es decir, no se realiza una copia física de los datos obtenidos, de manera que si hay modificaciones en las tablas, éstos serán aplicados a aquellas vistas que se vean afectadas.

Por tanto, la utilización de vistas nos permite abstraer el modelo de la base de datos subyacente, de forma que en vez de modificar la sentencia SQL de un catálogo por ejemplo, modificaremos la vista de la manera que nos convenga. Por tanto, la petición SQL del catálogo, tendremos que hacerla, no sobre las tablas, sino sobre la vista o vistas creadas.

Las vistas a crear tendremos que definirlas en ficheros .sql que almacenaremos en la carpeta Installation del modelo. Además, el nombre del fichero tendrá que ir siempre precedido de los caracteres TV$.

Al instalar un centro, los ficheros que se incluyan en dicha carpeta serán ejecutados, por lo que las sentencias incluídas en los .sql serán ejecutadas y por consiguiente, las vistas serán creadas. En caso de modificar alguna vista, se deberá actualizar el centro para que vuelva a ejecutar la sentencia modificada.

Habrá que tener en cuenta también el gestor de la BBDD que utiliza el centro, ya que pueden tener distintas formas de tratar las vistas. Por ejemplo, Oracle no permite la actualización de vistas, mientras que SQL Server sí.

Atributos

Atributos genéricos de la definición de un componente


Atributo Tipo Valor por defecto Observaciones
ayuda Texto Marcador en la ayuda del centro.
descripcion Texto [Nombre] Comentario sobre el componente.
etiqueta Texto [Nombre] Etiqueta del componente.
orden Entero 0 Indica la prioridad del componente al ordenarlo sobre el recurso.
visible Lógico Verdadero Indica si el componente es visible.



Atributo Tipo Valor por defecto Observaciones
sentencia Texto Sentencia SQL.


Ejemplo

Para mostrar un ejemplo de cómo crear un catálogo haciendo uso de las vistas, utilizaremos el sistema de información creado en la serie de artículos "Construir una aplicación paso a paso".

Concretamente, nos centraremos en la Tarea E donde se muestra cómo crear un catálogo, aunque en este caso, hace uso de una exportación previa. La sentencia SQL del catálogo se lanza sobre la tabla TR$ENTRADAS creada en la exportación.

Por tanto, recomendamos echar un vistazo a dicho artículo antes de continuar con el ejemplo.

Una vez visto el artículo, y utilizando la exportación declarada, vamos a crear un catálogo que realice la misma operación pero haciendo uso de una vista.

Por tanto, crearemos una vista que realice la misma petición que el catálogo de la Tarea E. La vista la crearemos para SQL Server:

CREATE VIEW TV$DOCUMENTOS_ENTRADAS AS
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

Se creará en la base de datos una vista cuya información obtenida será igual que la del catálogo definido en la Tarea E. Ahora sólo faltaría modificar la sentencia SQL del catálogo para que lance la petición sobre la vista:

[Registro de documentación] es contenedor
    [Documentación] es catalogo
        -sentencia = "SELECT * FROM TV$DOCUMENTOS_ENTRADAS";
    fin
fin

De esta manera, hemos conseguido abstraer el código de las posibles modificaciones que se pudieran dar para la obtención de datos.

Si fuera necesario realizar algún cambio, se haría en la vista, y la sentencia SQL del catálogo no haría falta modificarla.

Como ya hemos dicho, el código que crea la vista la guardaremos en un fichero .sql. Este fichero lo almacenaremos en la carpeta Installation de nuestro modelo para que al instalarlo se ejecute y se cree la vista.