Avalados por :

Cómo diseñar un RPT universal compatible con Informix y PostgreSQL

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 4 Vistas
0
Cargando...

RPT diseñado para Informix no funciona con PostgreSQL.

Detalle:

Estoy usando Crystal 2020 para diseñar archivos RPT. Inicialmente, los RPT fueron diseñados para la base de datos de Informix y se vinculó un procedimiento almacenado de Informix en el informe.

Luego escribimos una aplicación en C# para cargar archivos RPT y cargar dinámicamente el Origen de Datos ODBC de Informix para imprimir el informe. El informe se imprimió correctamente y no hubo ningún problema con Informix. De manera similar, diseñamos 500 informes y todos funcionaban perfectamente con el origen de datos del controlador ODBC de Informix.

Ahora el requisito ha cambiado y el cliente quiere usar la base de datos de PostgreSQL. Utilizamos los mismos RPT diseñados para Informix y proporcionamos el origen de datos ODBC de PostgreSQL en la aplicación C# y luego intentamos imprimir informes, pero todos los informes están vacíos. Mi comprensión es que el informe de Crystal es independiente de la base de datos y el mismo archivo RPT funcionará con todas las bases de datos si proporcionamos/cargamos dinámicamente el origen de datos ODBC (DSN).

Intenté identificar la causa raíz y abrí el RPT en Crystal 2020 y vinculé una función similar de PostgreSQL. Ahora noté que los nombres de los campos devueltos por el procedimiento almacenado no tienen ningún sufijo ":n" mientras que el sufijo ":n" se agrega a los nombres de los campos devueltos por los procedimientos almacenados de Informix. Y creo que el informe de Crystal espera el nombre exacto del campo con sufijo (:1,:2,:3..) en el informe para mostrar porque se utilizan los mismos campos en el informe para mostrar. Para hacer que el RPT de Informix funcione con PostgreSQL, tengo que reemplazar manualmente todos los nombres de campo en el RPT por uno nuevo (como ddr_key1:1 a ddr_key1 y batch_key1:1 a batch_key1)

Adjuntando Captura de pantalla:

Por favor, ayúdame a diseñar un RPT universal que pueda funcionar con todas las bases de datos o que pueda imprimir el informe de Crystal después de cargar dinámicamente cualquier Origen de Datos ODBC de una base de datos diferente. No estoy seguro de si eso es posible con Crystal Report.

Por lo tanto, el punto es que no quiero rediseñar los más de 500 informes nuevamente o reemplazar el nombre de campo en todas partes en cada archivo RPT que fueron diseñados para Informix y funcionaban perfectamente con Informix.

Quiero diseñar un solo archivo RPT que pueda funcionar con todas las bases de datos sin realizar cambios importantes o rediseñar los RPT.

image.png
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

La provisión de la fuente de datos no es un problema. Estoy proporcionando esto dinámicamente a través de código C# utilizando la clase "CrystalDecisions.Shared.ConnectionInfo" y puedo conectar tanto a Informix como a PostgreSQL.

Pero el punto es que el campo devuelto por el procedimiento almacenado se utiliza en fórmulas e informes. Los nombres de esos campos son diferentes en Informix (con sufijo ":n") y en PostgreSQL, y creo que por eso Crystal no logra poblar estos valores de campo para PostgreSQL cuando se utiliza el mismo RPT diseñado para Informix.

Para hacer que el RPT de Informix funcione con PostgreSQL, tengo que reemplazar todos los campos devueltos como ddr_key1:1 => ddr_key1 y batch_key1:2 => batch_key1.

image.png
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Existen utilidades de terceros que pueden actualizar en masa la fuente de datos, por lo que no es necesario repetir este procedimiento manual en cientos de informes.

Ken Hamady mantiene una lista de Utilidades de Gestión de Informes de Crystal Reports de terceros aquí .

Aquí tienes un video demostrativo de cómo mi software Visual CUT actualiza en masa la fuente de datos de varios informes.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Deberías poder utilizar la API ReplaceConnection() si la solución de Ido no funciona para ti.

Busca en Google, hay artículos de la base de conocimientos sobre cómo usarlo.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Qué sucede si reemplazas la conexión en CR Designer?

Si funciona sin que aparezca la ventana emergente de Field Mapping UI, entonces ReplaceConnection debería funcionar para ti.

Si la ventana emergente de Field Mapping UI aparece, entonces la única opción es corregir cada informe manualmente.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?