iReport - Relatório que chama subrel. que chama outro subrel

5 respostas
B

Galera,

Tenho um relatório que chama um subrelatorio, que por sua vez chama um subrelatório que chama outro subrelatório. Dá certo até o 2º nível, do 3º em diante o subrelatóri vêm em branco. Postarei meu código na esperança de algum guru poder me ajudar:

private void abreRelatorioGeral() throws JRException, Exception {
        try {
            InputStream pathRelGeral = getClass().getClassLoader().getResourceAsStream("RelatorioGeral.jasper");
            InputStream pathRelTempLivre = getClass().getClassLoader().getResourceAsStream("RelatorioGeral_subreportTempoLivre.jasper");

            // TEMPO LIVRE
            Map<String, Object> paramsRelTempoLivre = new HashMap<String, Object>();
            paramsRelTempoLivre.put("TempoLivre", jLabelTempoDuracao.getText());
            paramsRelTempoLivre.put("Percent", jLabelTotalPercentual.getText());

            // PAUSA RESUMO
            Map<String, Object> paramsRelPausaRes = new HashMap<String, Object>();
            paramsRelPausaRes.put("relTempoLivre", pathRelTempLivre);
                        
                        
            // PAUSA DETALHE
            PausaDetalheTableModel tmPausaDetalhe = (PausaDetalheTableModel) jXTablePausasDetalhe.getModel();  
            tmPausaDetalhe.setColumnName(0,"Motivo");
            tmPausaDetalhe.setColumnName(1,"DataI");
            tmPausaDetalhe.setColumnName(2,"HoraI");
            tmPausaDetalhe.setColumnName(3,"DataT");
            tmPausaDetalhe.setColumnName(4,"HoraT");
            tmPausaDetalhe.setColumnName(5,"Duracao");
            Map<String, Object> paramsRelPausaDet = new HashMap<String, Object>();
            paramsRelPausaDet.put("relPausaResumo", new JRTableModelDataSource(jXTablePausasResumo.getModel()));

            // LOGIN/LOGOUT
            AgentesLoginLogoutTableModel tmLoginLogout = (AgentesLoginLogoutTableModel) jXTableLoginLogout.getModel();  
            tmLoginLogout.setColumnName(0,"Data1");
            tmLoginLogout.setColumnName(1,"Hora1");
            tmLoginLogout.setColumnName(2,"Data2");
            tmLoginLogout.setColumnName(3,"Hora2");
            tmLoginLogout.setColumnName(4,"Duração");
            Map<String, Object> paramsRelGeral = new HashMap<String, Object>();
            paramsRelGeral.put("agente", jComboBoxAgente.getSelectedItem().toString());
            paramsRelGeral.put("dataini", dataini);
            paramsRelGeral.put("datafim", datafim);        
            paramsRelGeral.put("relPausaDet", new JRTableModelDataSource(jXTablePausasDetalhe.getModel()));        
            try {
                JasperPrint jasperPrintRelGeral = JasperFillManager.fillReport(pathRelGeral, paramsRelGeral, new JRTableModelDataSource(jXTableLoginLogout.getModel()));

                JasperViewer.viewReport(jasperPrintRelGeral, false);
            } catch (JRException ex) {
                ex.printStackTrace();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

O de LOGIN/LOGOUT chama o de PAUSA DETALHE correntamente. O de PAUSA DETALHE não consegue chamar o de PAUSA RESUMO e nem o PAUSA RESUMO consegue chamar o de TEMPO LIVRE.

Lembrando que meus relatórios não recebem os dados de uma conexão de banco de dados e sim de tabelas da minha view.

No ireport criei os parâmetros, já conferi, já refiz e nada. O que não entendendo é que até o primeiro subrelatório funciona. Já a partir do subrelatorio do primeiro subrelatório não funciona. Aparece os títulos, mas os dados ficam em branco.

Outra questão é que não é lançado nehum erro.

Espero muito poder ser ajudado, afinal tô quebrando a cabeça tem umas 2 semanas.

Abraços :wink:

5 Respostas

B

Alguma alma caridosa?

thiagofacanha

Opa
Me diz uma coisa. Funciona no viewer do Ireports?e a sua view não precisa de conexão de banco de dados nao???
Vc não está fazendo um select não?
Vlw

B

thiagofacanha:
Opa
Me diz uma coisa. Funciona no viewer do Ireports?e a sua view não precisa de conexão de banco de dados nao???
Vc não está fazendo um select não?
Vlw

Olá thiago,

Preencho minhas tabelas com o resultado de uma consulta a uma operação de um webservice, por isso não uso select, sacou? Visualizando pelo iReport, o relatório funciona, porém no lugar dos valores vem null. Aí quando testo no meu programa funciona até o 2º nível.

thiagofacanha

Blz. Sou novo no iReport mas aparentemente os valores que vc está passando estão vindo NULL mesmo. Ou seja vc não esta conseguindo pegar o resultado da consulta da uma operação do webservice.
Tenta criar um select NVL(valor_consulta,‘erro’) from dual; Apenas para confirmar isso.
Eu realmente não saberei te ajudar… =p mas posta ai como vc tah pegando este resultado, pode ser que facilite pro pessoal aqui do forum.
Vlw Cara

B

Não, não cara. Vc me entendeu errado. Falei que apresentava null quando rodo pelo iReport (Executar relatório) o que já é esperado, visto que eu não possuo conexão com banco. O problema é na hora de executar o relatório pela aplicação.

Relatorio Principal chama o SubRel_01 corretamente (aparece os dados dos dois). Daí em diante é que não chama mais nada. O SubRel_01 chama o SubRel_02 e aparece em bramco. O SubRel_02 chama o SubRel_03 e tbém aparece em branco.

Tá muito foda isso!!!

Criado 6 de outubro de 2008
Ultima resposta 6 de out. de 2008
Respostas 5
Participantes 2