Avalados por :

Solución de problemas al descargar archivo binario de informe Crystal Report con SDK de Java

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

Hola,

Estoy utilizando el SDK de Java para programar un informe de Crystal Report y descargar el archivo binario de resultado con los siguientes pasos:

1) Iniciar sesión en el servidor utilizando un com.crystaldecisions.sdk.framework.ISessionMgr

2) Obtener un identificador (com.crystaldecisions.sdk.occa.infostore.IInfoObject) del documento de informe, utilizando el almacén de información (com.crystaldecisions.sdk.occa.infostore.IInfoStore)

3) Utilizando este identificador, obtener un com.crystaldecisions.sdk.plugin.desktop.common.IReportProcessingInfo llamando a getPluginProcessingInterface("CrystalReport")

4) Completar las indicaciones en este IReportProcessingInfo con los valores del usuario.

5) Programar el informe para su ejecución inmediata y obtener el ID de instancia a través de la propiedad SI_NEW_JOB_ID. Consultar el estado de la ejecución hasta llegar a un estado final (COMPLETO o FALLA), utilizando el almacén de información.

6) Tras la finalización exitosa, obtener un identificador IInfoObject de la nueva instancia desde el almacén de información.

7) Llamando a getFiles() en el identificador de la instancia, obtener un identificador de archivo remoto (com.crystaldecisions.sdk.occa.infostore.IRemoteFile) y luego un archivo de descarga en streaming (com.crystaldecisions.sdk.occa.infostore.IStreamingDownloadFile).

😎 Abrir el IStreamingDownloadFile, descargarlo en fragmentos y finalmente cerrarlo.

9) Cerrar la sesión

Este flujo de trabajo funcionaba bien en BO XI 3.1, pero falla en el paso 8 en BO XI 4.1 (SP5, Parche 2). He reemplazado los JARs de la versión 3.1 con los de la versión 4.1, pero el error es el mismo. Recibo una excepción en la llamada a IStreamingDownloadFile.openFile() con el siguiente texto de error:

com.crystaldecisions.sdk.exception.SDKServerException: El mensaje de error es desconocido. Esto probablemente se debe a inconsistencias de versión entre los componentes.

Aquí está el valor que causó el problema: 65314 y la información adicional: .

causa:com.crystaldecisions.enterprise.ocaframework.idl.OCA.oca_abuse: IDL:img.seagatesoftware.com/OCA/oca_abuse:3.2

detalle:El mensaje de error es desconocido. Esto probablemente se debe a inconsistencias de versión entre los componentes.

Aquí está el valor que causó el problema: 65314 y la información adicional: .

El servidor proporcionó los siguientes detalles: Excepción OCA_Abuse 6408 en [.\authrequest.cpp : 128]  65314 {}

...¡No se ha proporcionado ningún token de inicio de sesión para la autenticación!

¿Alguna idea de qué está saliendo mal aquí? En el momento de llamar a IStreamingDownloadFile.openFile() la sesión abierta en el paso 1 sigue activa y válida y no encontré información sobre cómo proporcionar un token de autenticación a la llamada openFile().

También intenté descargar el archivo binario desde el historial de un informe WebI, pero esto resulta en la misma excepción.

¡Gracias por cualquier ayuda o pista! Saludos cordiales,

Joerg

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

3 Respuestas

0
Cargando...

Hola Prithvi,

También estoy enfrentando la misma situación. Estamos migrando de XI 3.1 a 4.1. No pude encontrar una forma fácil con cambios mínimos. A continuación se detallan los pasos que seguí.

Paso 1:

Eliminé todos los Jars de la versión 3.1 y copié todos los Jars de la versión 4.1 al classpath. Estoy enfrentando errores

'No se puede resolver el tipo com.businessobjects.sdk.plugin.desktop.universe.IUniverseReference. Se referencia indirectamente desde archivos .class requeridos'

Paso 2:

Continué con los Jars de la versión 3.1 e intenté ejecutar informes en el 'Entorno 4.1'. Me encontré con un error de versión como
'com.crystaldecisions.sdk.exception.SDKServerException: El mensaje de error es desconocido. Esto probablemente se deba a inconsistencias de versión entre los componentes. Aquí está el valor que causó el problema: 65314 y la información adicional: .'

Parece que necesito hacer muchos cambios. ¿Alguna idea que pueda seguir para migrar con facilidad y sin muchos cambios de código?

Gracias,

Bharath

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

Hola Prithvi,

muchas gracias por tu respuesta. No resolvió directamente mi problema, pero me llevó por el camino correcto. Estaba utilizando JARs únicamente de la versión 4.1; no había involucrados antiguos de la 3.1, pero parece que tenía demasiados JARs en mi classpath. Realicé una limpieza de código y eliminé todas las referencias a clases que funcionaban en la 3.1 pero que ahora están obsoletas en la 4.1, como el rebean, que necesitaba para WebI. Esto me ayudó a eliminar casi 30 JARs y ahora el código se está ejecutando para Crystal Reports sin necesidad de más cambios. (Por cierto, el código es muy similar al ejemplo que diste).

Tal vez algunos efectos secundarios fueron producidos por los JARs no utilizados en cuanto al orden del cargador de clases y ahora han desaparecido con la reducción del classpath.

Ahora mi próxima tarea es hacer que los informes de WebI se ejecuten en el mismo flujo de trabajo utilizando los Servicios Restful.

Gracias de nuevo y un saludo

Joerg

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

Asegúrate de no tener referencias a los frascos 3.1 en tu aplicación. Debes tener solo frascos de la versión BI 4.1 que estás utilizando.

También intenta una vez con el siguiente ejemplo para simplemente descargar un informe de Crystal y compartir tus observaciones.

===============================

<%@ page import ="com.crystaldecisions.sdk.framework.*" %>

<%@ page import ="com.crystaldecisions.sdk.occa.infostore.*" %>

<%@ page import ="com.crystaldecisions.sdk.exception.*" %>

<%@ page import ="java.io.FileWriter" %>

<%@ page import ="java.io.IOException" %>

<%@ page import ="com.crystaldecisions.sdk.plugin.desktop.txt.*" %>

<%@ page import ="java.util.*" %>

<%@ page import ="java.io.*" %>

<%

IEnterpriseSession es = null;

try

{

String user = "<Nombre-de-usuario-del-Administrador>";

String password = "<Contraseña-del-Administrador>";

String cmsName = "<Nombre-de-Cms>";

String cmsAuthType = "<Tipo-de-Autenticación>";

IEnterpriseSession es = CrystalEnterprise.getSessionMgr().logon( user, password, cmsName, cmsAuthType);

IInfoStore iStore = (IInfoStore) es.getService("", "InfoStore");

out.println("Conectado a BO" + "<br>");

IInfoObjects instances = iStore.query("select * from ci_infoobjects where si_id=<ID-de-Informe> and SI_KIND='CrystalReport'");

for (int i = 0; i < instances.size(); i++)

{

IInfoObject iReport=(IInfoObject)instances.get(i);

IFiles files = (IFiles)iReport.getFiles();

IStreamingDownloadFile iStream = ((IRemoteFile)files.get(0)).getStreamingDownloadFile(0);

iStream.openFile();

BufferedOutputStream pw = new BufferedOutputStream(new FileOutputStream("C:\\Muestra.rpt",false));

while(iStream.hasNextChunk())

{

pw.write(iStream.nextChunk());

}

pw.flush();

pw.close();

iStream.closeFile();

out.print("<br>hecho");

}

}

catch(Exception e)

{

out.println("Error " + e);

}

finally

{

es.logoff();

}

%>

===============================================

Además, en un segundo pensamiento, si deseas programar un informe de Crystal y descargarlo al disco, ¿por qué no programarlo directamente a un destino?

Gracias,

Prithvi

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?