JRBeanCollectionDataSourcecolecao=newJRBeanCollectionDataSource(resultado);Stringcaminho=Faces.getRealPath("/reports/folhaDePagamento.jasper");Map<String,Object>parametros=newHashMap<>();parametros.put("dataInicial",dataInicial);parametros.put("dataFinal",dataFinal);JasperPrintrelatorio=JasperFillManager.fillReport(caminho,parametros,colecao);byte[]buffer=JasperExportManager.exportReportToPdf(relatorio);Faces.sendFile(buffer,"folhaDePagamento.pdf",false);}catch(JRException|IOExceptionerro){StringmensagemCapturada=TratadorDeErros.capturarMensagem(erro);Messages.addGlobalWarn("Erro ao emitir relatorio da Folha de Pagamento "+mensagemCapturada);erro.printStackTrace();}}`
Ao final não da erro de execução, o SQL me retorna informações, mas não é aberto a aba com o relatório em PDF.
Tenho vários outros relatórios que seguem o mesmo padrão e neste tive problema.
Detalhe. Este relatório foi criado em uma nova versão do Eclipse e do JasperSoftStudio 6.6.0
Darlan, ele não da erro nenhum. Debuguei o método e ele não cai no catch.
Simplesmente ele gera o SQL, gera o JasperPrint e o buffer. Mas não cria a aba com o relatório. Eu ja confirmei que retorna dados no SQL.
darlan_machado
E você tem tratamento de erro para o trecho de código onde consta a geração do relatóri?
JRBeanCollectionDataSourcecolecao=newJRBeanCollectionDataSource(resultado);Stringcaminho=Faces.getRealPath("/reports/folhaDePagamento.jasper");Map<String,Object>parametros=newHashMap<>();parametros.put("dataInicial",dataInicial);parametros.put("dataFinal",dataFinal);JasperPrintrelatorio=JasperFillManager.fillReport(caminho,parametros,colecao);byte[]buffer=JasperExportManager.exportReportToPdf(relatorio);Faces.sendFile(buffer,"folhaDePagamento.pdf",false);}catch(JRException|IOExceptionerro){StringmensagemCapturada=TratadorDeErros.capturarMensagem(erro);Messages.addGlobalWarn("Erro ao emitir relatorio da Folha de Pagamento "+mensagemCapturada);erro.printStackTrace();}}
E deste método é chamado o DAO para criar o SQL e gerar o DTO.
publicclassRpFolhaDePagamentoDAO{publicList<RpFolhaDePagamentoDTO>gerarSQL(FolhaDePagamentofolhaDePagamento,DatedataInicial,DatedataFinal,List<EventoDaFolhaDePagamento>eventos,List<Pessoa>funcionarios){StringBuildersql=newStringBuilder();sql.append("SELECT\n");sql.append(" fp.mesEanoDeReferencia MESEANO,\n");sql.append(" fp.dataDoPagamento DATADEPAGAMENTO,\n");sql.append(" pes.nome FUNCIONARIO,\n");sql.append(" lfp.totalDosItens TOTALDOSITEMS,\n");sql.append(" ev.descricao DESCRICAODOITEM,\n");sql.append(" ifp.quantidade QUANTIDADE,\n");sql.append(" ifp.valorUnitario VALORUNITARIO,\n");sql.append(" case ev.tipoDeEvento when 'D' THEN\n");sql.append(" ((ifp.quantidade * ifp.valorUnitario) * -1)\n");sql.append(" else\n");sql.append(" (ifp.quantidade * ifp.valorUnitario)\n");sql.append(" END as TOTALDOITEM\n");sql.append("FROM\n");sql.append(" FolhaDePagamento fp INNER JOIN LancamentoDaFolhaDePagamento lfp on fp.codigo = lfp.folhaDePagamento_codigo\n");sql.append(" INNER JOIN Funcionario func ON lfp.funcionario_codigo = func.codigo\n");sql.append(" INNER JOIN Pessoa pes ON func.pessoa_codigo = pes.codigo\n");sql.append(" INNER JOIN ItemDaFolhaDePagamento ifp ON lfp.codigo = ifp.lancamentoDaFolhaDePagamento_codigo\n");sql.append(" INNER JOIN EventoDaFolhaDePagamento ev ON ifp.eventoDaFolhaDePagamento_codigo = ev.codigo\n");sql.append("WHERE 1=1");if(folhaDePagamento!=null){sql.append("\n AND fp.codigo = "+folhaDePagamento.getCodigo());}else{SimpleDateFormatformato=newSimpleDateFormat("yyyy-MM-dd");if(dataInicial!=null){sql.append("\n AND dataDoPagamento >= '"+formato.format(dataInicial)+"'");}if(dataFinal!=null){sql.append("\n AND dataDoPagamento <= '"+formato.format(dataFinal)+"'");}if(funcionarios.size()>0){sql.append("\n AND lfp.funcionario_codigo in "+criarListaDeFuncionarios(funcionarios));}}if(eventos.size()>0){sql.append("\n AND ifp.eventoDaFolhaDePagamento_codigo in "+criarListaDeEventos(eventos));}sql.append("\nORDER BY fp.dataDoPagamento asc, pes.nome asc");Connectionconexao=null;PreparedStatementcomando=null;ResultSetresultado=null;try{conexao=HibernateUtil.getConexao();comando=conexao.prepareStatement(sql.toString());resultado=comando.executeQuery();List<RpFolhaDePagamentoDTO>lista=newArrayList<>();while(resultado.next()){RpFolhaDePagamentoDTOdto=newRpFolhaDePagamentoDTO();dto.setDATADEPAGAMENTO(resultado.getDate("DATADEPAGAMENTO"));dto.setDESCRICAODOITEM(resultado.getString("DESCRICAODOITEM"));dto.setFUNCIONARIO(resultado.getString("FUNCIONARIO"));dto.setMESEANO(resultado.getString("MESEANO"));dto.setQUANTIDADE(resultado.getDouble("QUANTIDADE"));dto.setVALORUNITARIO(resultado.getBigDecimal("VALORUNITARIO"));dto.setTOTALDOITEM(resultado.getBigDecimal("TOTALDOITEM"));lista.add(dto);}resultado.close();comando.close();conexao.close();returnlista;}catch(SQLExceptionerro){thrownewRuntimeException(erro);}}
AntonioCardoso
Acabei achando um jeito de resolver o problema. Quando chamo o relatório, eu precisava desabilitar o Ajax no botão. Segue abaixo um exemplo.