Desenvolvedor e Analista de Sistemas | IFPA

domingo, 24 de maio de 2015

Como passar a consulta dinamicamente para o JasperReports / iReport

com 0 Comentário
Defina um parâmetro do tipo String que receberá a consulta vinda da aplicação java:


Parâmetros do Relatório

Observe que temos dois parâmetros definidos por mim: Filtro – servirá para receber uma descrição textual do filtro que o usuário aplicou na geração do relatório e consulta – receberá a consulta a ser executada no banco de dados pelo JasperReports.
Configurar a consulta do relatório como sendo o parâmetro recebido:



Consulta do Relatório


A consulta do relatório será exatamento o parâmetro consulta. Observe o símbolo de exclamação depois da letra P. Sem ele o iReport dá erro no momento de efetuar a compilação do relatório.
Passar a consulta para o relatório através da aplicação Java:

  1. private String geraRelatorioEmPdfConsulta(String consulta, String jasper, String nomeRelatorio) {  
  2.     // Seto a variável saida como nulo  
  3.     saida = null;  
  4.   
  5.     try {  
  6.         JasperPrint print = JasperFillManager.fillReport(jasper, getMapComFiltroEConsulta(filtroAplicado, consulta), getNovaConexao());  
  7.         saida = RelatorioUtil.getDiretorioReal("/relatorios/relatorio.pdf");  
  8.         JasperExportManager.exportReportToPdfFile(print, saida);  
  9.         saida = RelatorioUtil.getContextPath() + "/relatorios/relatorio.pdf";  
  10.     } catch (Exception e) {  
  11.         addErrorMessage("Formulario""erro.geracao.relatorio", nomeRelatorio);  
  12.         e.printStackTrace();  
  13.     } finally {  
  14.         fechaConexao();  
  15.     }  
  16.   
  17.     // mostro o erro ou o relatório na janela que abre  
  18.     return "geraRelatorio";  
  19. }  
  20.   
  21. /* 
  22. * Esse método retorna o map com o filtro e a consulta que o usuário gerou. 
  23. */  
  24. public Map<String, String> getMapComFiltroEConsulta(String filtroAplicado, String consulta) {  
  25.     Map<String, String> map = new HashMap<String, String>();  
  26.   
  27.     // Se o usuário não aplicou nada no filtro, retorno nulo para o relatório  
  28.     if (filtroAplicado == null)  
  29.         filtroAplicado = "";  
  30.     else  
  31.         filtroAplicado = "Você aplicou o seguinte filtro no relatório:\n" + filtroAplicado;  
  32.   
  33.     map.put("Filtro", filtroAplicado);  
  34.     map.put("consulta", consulta);  
  35.   
  36.     return map;  

Observe, pelo código acima, que eu passo a consulta e o filtro que foram gerados para o relatório dentro de um HashMap, como o JasperReports exige. No final, o relatório com um campo do filtro fornecido ficou assim.

Relatório Gerado

O campo marcado em vermelho foi o filtro aplicado pelo usuário que eu mandei para o relatório como um parâmetro chamado Filtro e que na verdade é apenas uma descrição textual.

Obs.: cada coluna retornada pela minha consulta deve ter o mesmo nome do field no relatório. Caso isso não ocorra, haverá um erro na geração.

+1

0 comentários :

Postar um comentário

Total de visualizações