SubReport nao carrega

14 respostas
V

Olá pessoal desenhei aqui um Relatorio com um subrelatorio carregado como padrao no cabeçalho.
Rodando o reltaorio pelo Ireport 471 fica td uma lindeza só.
Rodando pelo java, nao carrega o SubReport. Alguem pode ter uma ideia de pq isso acontece?

14 Respostas

G

Qual banco vc está usando? Acontece um problema similar no Firebird.
Que é resolvido adicionando “?defaultResultSetHoldable=True” na conexao com o banco de dados.

Ficaria mais ou menos assim:
jdbc:firebirdsql://localhost/d:/BANCO.FDB?defaultResultSetHoldable=True

V

gilluan:
Qual banco vc está usando? Acontece um problema similar no Firebird.
Que é resolvido adicionando “?defaultResultSetHoldable=True” na conexao com o banco de dados.

Ficaria mais ou menos assim:
jdbc:firebirdsql://localhost/d:/BANCO.FDB?defaultResultSetHoldable=True

Postgresql

G

Blz, já com o Postgresql não tive problema nenhum…

Flw

V

gilluan:
Blz, já com o Postgresql não tive problema nenhum…

Flw


Desclpa, mas eu nao consegui ver a relacao entre a solucao oferecida por vc e o fato do subreport nao sser carregado, poderia me explicar?

V

gilluan:
Blz, já com o Postgresql não tive problema nenhum…

Flw


Eu nao to usando ResultSet nos relatorios

G

Infelizmente não sei te explicar o motivo desse erro. Encontrei essa postagem em um fórum depois de várias tentativas sem sucesso.

I

Poste o jrxml que vc está usando e a classe se puder.

Verifique o caminho do $P{SUBREPORT_DIR}, pode ser que ele não esteja encontrando o arquivo dentro do java pq não acha o caminho dele

V

ismael.costa:
Poste o jrxml que vc está usando e a classe se puder.

Verifique o caminho do $P{SUBREPORT_DIR}, pode ser que ele não esteja encontrando o arquivo dentro do java pq não acha o caminho dele

Infelizmente nao posso ostar todo o xml aqui.
mas o subreportDir é:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> <defaultValueExpression><![CDATA["/home/vinny/workspace/report/rh/"]]></defaultValueExpression> </parameter>

é o mesmo caminho do report

I

Tente buscar o caminho do seu relatório sempre pelo contexto da aplicação, nunca pelo caminho físico

“/home/vinny/workspace/report/rh/”

Pelo que eu entendi esse caminho é do seu workspace, não vai ser achado em produção.

Você pode enviar o seu $P{SUBREPORT_DIR} via código java,

params.put(“SUBREPORT_DIR”, “caminhoContextoAplicacao”);

Isso vai garantir que o report seja encontrado :wink:

I

Mais uma coisa, o preview do seu Ireport sempre vai achar o caminho dos seus subrelatórios pq ele não se importa se é o caminho físico, e até prefere,
você que tem que forçar ele a procurar dentro do servidor qdo for para produção, que deve ser o seu caso :wink:

V

ismael.costa:
Tente buscar o caminho do seu relatório sempre pelo contexto da aplicação, nunca pelo caminho físico

“/home/vinny/workspace/report/rh/”

Pelo que eu entendi esse caminho é do seu workspace, não vai ser achado em produção.

Você pode enviar o seu $P{SUBREPORT_DIR} via código java,

params.put(“SUBREPORT_DIR”, “caminhoContextoAplicacao”);

Isso vai garantir que o report seja encontrado ;)

Isso vc diz ppra colocar dentro da classe java ou no report?

no report o parametro esta da seguinte maneira:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
		<defaultValueExpression><![CDATA["/home/vinny/workspace/report/rh/"]]></defaultValueExpression>
	</parameter>
I

Dentro da classe java, ao gerar um relatório com Ireports, vc pode passar um HashMap para ele com parâmetros.

HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put(“SUBREPORT_DIR”,getPathJasper());

nesse caso eu passo o caminho onde está o subrelatório.

//aqui é a lista de objetos que eu to passando pro relatório, pq eu uso collection, não sql puro
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);

//o importante vem aqui, ao compilar o relatório pelo jasper eu passo os parâmetros que eu defini
JasperPrint jasperPrint = JasperFillManager.fillReport(relatorioJasper, hashMap ,ds);

T

Já estou usando o defaultResultSetHoldable=True no entanto ainda ocorre um erro estranho.

quando executo apenas o relatório MESTRE lista normalmente, quando incluo o subreport com os detalhes o relatório é gerado e apenas aparece o primeiro registro do MESTRE e seus DETALHES e para por ai. Não sai mais nenhum MESTRE ou DETALHES mesmo tendo mais dados no banco.

Utilizo o firebird 2.5 e ireport 4.8.0, desde já agradeço qualquer ajuda.

M

Bom dia

Se não me engano, nessa linha:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">

Para o sub-report deveria ser assim a declaração de class :

<parameter name="SUBREPORT_DIR" class="java.io.File" isForPrompting="false">

Att.

Criado 2 de outubro de 2012
Ultima resposta 10 de abr. de 2013
Respostas 14
Participantes 5