¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Solução de problemas ao baixar arquivo binário de relatório Crystal Report com SDK de Java

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

Olá,

Estou utilizando o SDK Java para programar um relatório do Crystal Report e baixar o arquivo binário de resultado com os seguintes passos:

1) Fazer login no servidor usando um com.crystaldecisions.sdk.framework.ISessionMgr

2) Obter um identificador (com.crystaldecisions.sdk.occa.infostore.IInfoObject) do documento de relatório, usando o repositório de informações (com.crystaldecisions.sdk.occa.infostore.IInfoStore)

3) Usando este identificador, obter um com.crystaldecisions.sdk.plugin.desktop.common.IReportProcessingInfo chamando getPluginProcessingInterface("CrystalReport")

4) Preencher as instruções neste IReportProcessingInfo com os valores do usuário.

5) Programar o relatório para execução imediata e obter o ID da instância através da propriedade SI_NEW_JOB_ID. Consultar o estado da execução até chegar a um estado final (COMPLETO ou FALHA), usando o repositório de informações.

6) Após a conclusão bem-sucedida, obter um identificador IInfoObject da nova instância do repositório de informações.

7) Chamando getFiles() no identificador da instância, obter um identificador de arquivo remoto (com.crystaldecisions.sdk.occa.infostore.IRemoteFile) e então um arquivo de download em streaming (com.crystaldecisions.sdk.occa.infostore.IStreamingDownloadFile).

? Abrir o IStreamingDownloadFile, baixá-lo em partes e finalmente fechá-lo.

9) Fechar a sessão

Este fluxo de trabalho funcionava bem no BO XI 3.1, mas falha no passo 8 no BO XI 4.1 (SP5, Patch 2). Substituí os JARs da versão 3.1 pelos da versão 4.1, mas o erro persiste. Recebo uma exceção na chamada para IStreamingDownloadFile.openFile() com o seguinte texto de erro:

com.crystaldecisions.sdk.exception.SDKServerException: A mensagem de erro é desconhecida. Isso provavelmente se deve a inconsistências de versão entre os componentes.

Aqui está o valor que causou o problema: 65314 e informações adicionais: .

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

detalhe:A mensagem de erro é desconhecida. Isso provavelmente se deve a inconsistências de versão entre os componentes.

Aqui está o valor que causou o problema: 65314 e informações adicionais: .

O servidor forneceu os seguintes detalhes: Exceção OCA_Abuse 6408 em [.\authrequest.cpp : 128] 65314 {}

...Nenhum token de login foi fornecido para autenticação!

Alguma ideia do que está dando errado aqui? No momento de chamar IStreamingDownloadFile.openFile() a sessão aberta no passo 1 ainda está ativa e válida, e não encontrei informações sobre como fornecer um token de autenticação para a chamada openFile().

Também tentei baixar o arquivo binário do histórico de um relatório WebI, mas isso resulta na mesma exceção.

Obrigado por qualquer ajuda ou dica! Atenciosamente,

Joerg

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

3 Respuestas

0
Cargando...

Olá Prithvi,

Também estou enfrentando a mesma situação. Estamos migrando de XI 3.1 para 4.1. Não consegui encontrar uma forma fácil com mudanças mínimas. Aqui estão os passos que segui.

Passo 1:

Removi todos os Jars da versão 3.1 e copiei todos os Jars da versão 4.1 para o classpath. Estou enfrentando erros

'Não é possível resolver o tipo com.businessobjects.sdk.plugin.desktop.universe.IUniverseReference. Está sendo referenciado indiretamente a partir de arquivos .class necessários'

Passo 2:

Continuei com os Jars da versão 3.1 e tentei executar relatórios no 'Ambiente 4.1'. Me deparei com um erro de versão como
'com.crystaldecisions.sdk.exception.SDKServerException: A mensagem de erro é desconhecida. Isso provavelmente se deve a inconsistências de versão entre os componentes. Aqui está o valor que causou o problema: 65314 e informações adicionais: .'

Parece que preciso fazer muitas mudanças. Alguma ideia do que posso seguir para migrar com facilidade e sem muitas alterações de código?

Obrigado,

Bharath

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

Olá Prithvi,

Muito obrigado pela sua resposta. Embora não tenha resolvido diretamente meu problema, me direcionou para o caminho correto. Estava utilizando apenas JARs da versão 4.1; não havia envolvidos antigos da versão 3.1, mas parece que tinha muitos JARs em meu classpath. Realizei uma limpeza no código e removi todas as referências a classes que funcionavam na 3.1 mas que agora estão obsoletas na 4.1, como o rebean, necessário para o WebI. Isso me ajudou a eliminar quase 30 JARs e agora o código está sendo executado para o Crystal Reports sem a necessidade de mais alterações. (Aliás, o código é muito semelhante ao exemplo que você forneceu).

Talvez alguns efeitos colaterais tenham sido causados pelos JARs não utilizados em relação à ordem do carregador de classes e agora tenham desaparecido com a redução do classpath.

Agora minha próxima tarefa é fazer com que os relatórios do WebI sejam executados no mesmo fluxo de trabalho utilizando os Serviços Restful.

Novamente, obrigado e cumprimentos,

Joerg

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

Certifique-se de não ter referências aos frascos 3.1 em sua aplicação. Você deve ter apenas frascos da versão BI 4.1 que está utilizando.

Também tente uma vez com o seguinte exemplo para simplesmente baixar um relatório do Crystal e compartilhar suas observações.

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

<%@ 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 = "<Nome-de-usuário-do-Administrador>";

String password = "<Senha-do-Administrador>";

String cmsName = "<Nome-do-Cms>";

String cmsAuthType = "<Tipo-de-Authenticação>";

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

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

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

IInfoObjects instances = iStore.query("select * from ci_infoobjects where si_id=<ID-do-Relatório> 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:\\Amostra.rpt",false));

while(iStream.hasNextChunk())

{

pw.write(iStream.nextChunk());

}

pw.flush();

pw.close();

iStream.closeFile();

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

}

}

catch(Exception e)

{

out.println("Erro " + e);

}

finally

{

es.logoff();

}

%>

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

Além disso, em um segundo pensamento, se deseja programar um relatório do Crystal e baixá-lo para o disco, por que não programá-lo diretamente para um destino?

Obrigado,

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?