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











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?
ResponderEliminarHola 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.
ResponderEliminarVoy a probar a ver si entendí.... en un rato los resultados. ;)
ResponderEliminarGenial! Funcionó. Gracias por compartir la información en tu blog. Saluditos!
ResponderEliminarUSTED ES UN MAESTRO DOCTOR, GRACIAS POR COMPARTIR ESTOS TUTOS !!! OJALA SIGA SUBIENDO MAS !!! SALUDOS !!!
ResponderEliminarFantástico!
ResponderEliminar