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?
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
[quote=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
[/quote]
Postgresql
Blz, já com o Postgresql não tive problema nenhum…
Flw
[quote=gilluan]Blz, já com o Postgresql não tive problema nenhum…
Flw[/quote]
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?
[quote=gilluan]Blz, já com o Postgresql não tive problema nenhum…
Flw[/quote]
Eu nao to usando ResultSet nos relatorios
Infelizmente não sei te explicar o motivo desse erro. Encontrei essa postagem em um fórum depois de várias tentativas sem sucesso.
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
[quote=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[/quote]
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
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
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
[quote=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 ;)[/quote]
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>
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);
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.
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.