IReport - Sub Relatorio apenas com parâmetros

Pessoal,
Estou tentando gerar um relatório com vários sub relatórios através do Ireport. Todos os sub relatórios serão preenchidos através de parâmetros que serão informados através de uma classe java. Não haverá conexão com nenhum DataSource “dentro” dos relatórios. O problema é que o relatório “principal” aparece “em branco”, ou seja, parece que os sub relatórios não são chamados, pois nem os textos estáticos aparecem.
Alguém sabe o que pode estar acontecendo ?

vc está criando os links entre o relátorio principal e os subs?

No Java, estou fazendo da seguinte maneira:
ServletContext context = getServletContext();

        //relatorio principal
        JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(
                context.getRealPath("/WEB-INF/reports/ResumoPE.jasper"));

        //relatorio sub
        JasperReport subrelatorioJasper = (JasperReport)JRLoader.loadObject(
                context.getRealPath("/WEB-INF/reports/ResumoPE_subreport0.jasper"));

        HashMap parametros = new HashMap();

        parametros.put("subReport", subrelatorioJasper);

        parametros.put("numPedido", resumo.getCodPedido());
        parametros.put("sucursal", resumo.getPedido().getIdSucursal().getNome());
        parametros.put("agencia", resumo.getPedido().getIdAgencia().getNome());
        parametros.put("corretor", resumo.getPedido().getIdFuncionario().getUsuarioAutenticador());
        parametros.put("data", resumo.getData());
        parametros.put("dataEntrega", resumo.getDataResposta());
        parametros.put("produto", resumo.getPedido().getIdProduto().getNome());


        JREmptyDataSource jrDataSoursePrincipal = new JREmptyDataSource();
        JasperPrint impressao = JasperFillManager.fillReport(relatorioJasper, parametros, jrDataSoursePrincipal);
        
        byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
        response.setContentType("application/pdf");
        response.setContentLength(bytes.length);
        ServletOutputStream ouputStream = response.getOutputStream();
        ouputStream.write(bytes, 0, bytes.length);
        ouputStream.flush();
        ouputStream.close();

Bom, vou passar um exemplo (resumido) de como eu uso para vc ver se encontra o que está faltando ai.

Na classe java que vai chamar os relatórios eu tenho isso:

Agora, no meu relatório principal, clico sobre o objeto do sub-relatório com o botão direito e vou em propriedades. Veja o que mudo:

  1. Na aba “Subreport” no último campo coloco “$P{REPORT_CONNECTION}”.

  2. Na aba “Subreport (Other)”, no campo “Subreport Expression” coloco o caminho do meu subrelatório, algo assim: “./caminho/meuSubRelatorio.jasper”. Ainda nesta aba, na tabela abaixo, nos “Subreport parameters”, adiciono cada parâmetro que terei que passar pro subrelatório. Eu estarei parando os parâmetros do relatório principal pro sub-relatório.

Bem, de diferente do normal é isso que tem que ser feito. Claro que tanto no relatório principal como no sub-relatório vc tem que declarar os parâmetros e mandar imprimí-los nos lugares certos. Ah, não se esqueça de que vc deve compilar sempre primeiro os sub-relatórios e depois o reltório principal.

Espero ter ajudado! Boa sorte! :stuck_out_tongue:

Olá,

Estou com o mesmo problema, e começo a achar que utilizar JasperReport não é uma boa idéia…

Existem alternativas para gerar relatórios em Java?