sábado, 20 de agosto de 2011

Connected Queries

En esta entrada vamos a tratar una nueva característica presente en las tools 8.51 que lleva el nombre de Consultas Conectadas.

Como siempre para poder hacer una mejor explicación vamos a empezar con un Ejemplo.

Digamos que deseamos hacer un listado o reporte rápido que nos muestre cada uno de los roles que hay dentro del aplicativo y que adicionalmente liste cada uno de los usuarios relacionados al rol. Para cumplir con este requerimiento lo más facil es hacer una consulta por el gestor de consultas y listarla rápidamente.
El select de la consulta quedaría de la siguiente forma:

SELECT A.ROLENAME, A.DESCR, B.ROLEUSER
FROM PSROLEDEFN A, PSROLEUSER B, PSOPRDEFN C
WHERE A.ROLENAME LIKE :1
AND A.ROLENAME = B.ROLENAME
AND B.ROLEUSER = C.OPRID
ORDER BY 1

Digamos que ahora queremos el listado de todos los roles junto a todos sus usuario y adicionalmente a sus listas de permisos. Para el requerimiento anterior ya no sería factible crear una única consulta. La opciones para cumplir este requerimiento serían las siguientes:
  • Crear 2 consultas independientes por medio del gestor de consultas: una para los usuarios y otra para las listas de permisos
  • A partir de las 2 consultas creadas previamente, crear un crystal que utilice subreportes para incluir las 2 consultas y asi generar un solo listado.
  • Por último utilizar el Application Designer para crear la página de ejecución del reporte y poder generarlo. 
En conclusión demasiadas horas de desarrollo para un listado tan simple. Con la nueva herramienta de Consultas Conectadas este proceso no necesitará crear ningún objeto por el Application Designer, ni escribir una sola línea de código. Los pasos para solucionar el requerimiento serían:
  • Crear una consulta que traiga todos los roles y su descripción (Consulta padre)
  • Crear una consulta que traiga los roles junto a los usuarios asociados
  • Crear una última consulta con los roles y cada una de las listas de permisos. 
  • Crear la consulta conectada que enlace las 3 consultas creadas previamente
  • Crear la plantilla XML PUBLISHER para generar el reporte
  • Crear la definición del reporte XML PUBLISHER
  • Y por último ejecutar el reporte por la ruta Inicio - Herramientas de Informes - XML Publisher - Gestor de Informes de Consulta
En conclusión ni una sola línea de código. 

Ahora si manos a la obra

1. Crear una consulta que traiga todos los roles y su descripción (Consulta padre). La consulta se va a llamar PE_CQ_ROLES y debe generar un select como el siguiente:

SELECT A.ROLENAME, A.DESCR
  FROM PSROLEDEFN A
  WHERE A.ROLENAME LIKE :1
2. Crear una consulta que traiga los roles junto a los usuarios asociados. La consulta se va a llamar PE_CQ_USERS_X_ROL y el select debe lucir de la siguiente forma:

SELECT A.ROLENAME, A.DESCR, B.ROLEUSER
  FROM PSROLEDEFN A, PSROLEUSER B, PSOPRDEFN C
  WHERE A.ROLENAME = B.ROLENAME
     AND B.ROLEUSER = C.OPRID
  ORDER BY 1

3. Crear una última consulta con los roles y cada una de las listas de permisos. La consulta se va a llamar PE_CQ_LISTAS_X_ROLES y el select debe lucir de la siguiente forma:
 SELECT A.ROLENAME, A.DESCR, C.CLASSID, C.CLASSDEFNDESC
  FROM PSROLEDEFN A, PSROLECLASS B, PSCLASSDEFN C
  WHERE A.ROLENAME = B.ROLENAME
     AND B.CLASSID = C.CLASSID
  ORDER BY 1
4. Crear la consulta conectada que enlace las 3 consultas creadas previamente. Ahora si lo importante. Primero vamos a Inicio - Herramientas de Informes - Consultas Conectadas - Inicio Rápido Cnslt Conectada y Agregamos una consulta conectada como se ve en las imagenes:


Paso 1

 Paso 2


Paso 3: En este paso agregamos el primer hijo de la consulta principal,  los hijos adicionales se deben hacer por  Inicio - Herramientas de Informes - Consulta Conectada - Gestor de Consultas Conectadas

 Paso 4: En este paso asociamos la consulta padre con la consulta hijo a través de un campo, en nuestro caso a través del campo ROLENAME que se encuentra asociado en las 3 consultas que componen nuestra consulta conectada.

 Paso 5:


Luego de finalizar con el asistente se debe ir a Inicio - Herramientas de Informes - Consulta Conectada - Gestor de Consultas Conectadas y completar la definición de la consulta, agregando el hijo faltante. La consulta conectada debe quedar como se ve en la siguiente imagen:

Paso 1: Se agrega la otra consulta hija

 Paso 2: Se relaciona la consulta padre con la consulta hija a través del ROLENAME


 Paso: Se finaliza la creación de la consulta conectada.




5.  Crear la plantilla XML PUBLISHER para generar el reporte. Lo primero que tenemos que hacer es dar clic en "Vista Pvia XML" en la ventada Inicio - Herramientas de Informes - Consulta Conectada - Gestor de Consultas Conectadas y a partir de este XML ROL_USER_LIST.xml generar una plantilla RTF de XML Publisher como la siguiente Plantilla.rtf

6. Crear la definición del reporte XML PUBLISHER. 

Lo primero es crear un origen de datos de XML PUBLISHER tal como se puede ver en la figura
Luego creamos una definición del reporte XML PUBLISHER como podemos ver en las imagenes siguientes:



7. Y por último ejecutar el reporte por la ruta Inicio - Herramientas de Informes - XML Publisher - Gestor de Informes de Consulta. Habiendo terminado los pasos anteriores podemos ejecutar nuestro reporte por la ruta referenciada. 


Y listo hemos creado un reporte con múltiples secciones sin necesidad de usar crystal ni de escribir una sola línea de código.  Espero que les sea de utilidad.

6 comentarios:

  1. Hola... sigo todos los pasos, pero al crear la plantilla xml le doy "vista previa xml" y me parece un campo para darle el nombre del rol. Que hago?

    ResponderEliminar
  2. Hola César me parece que le dejaste a alguno de los queries que involucras en la consulta conectada tiene un Prompt, y eso es lo que te está solicitando.

    ResponderEliminar
  3. Voy a probar a ver si entendí.... en un rato los resultados. ;)

    ResponderEliminar
  4. Genial! Funcionó. Gracias por compartir la información en tu blog. Saluditos!

    ResponderEliminar
  5. USTED ES UN MAESTRO DOCTOR, GRACIAS POR COMPARTIR ESTOS TUTOS !!! OJALA SIGA SUBIENDO MAS !!! SALUDOS !!!

    ResponderEliminar