Defina um parâmetro do tipo String que receberá a consulta vinda da aplicação java:
Configurar a consulta do relatório como sendo o parâmetro recebido:
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:
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.
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.
Mais informações »
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:
- private String geraRelatorioEmPdfConsulta(String consulta, String jasper, String nomeRelatorio) {
- // Seto a variável saida como nulo
- saida = null;
- try {
- JasperPrint print = JasperFillManager.fillReport(jasper, getMapComFiltroEConsulta(filtroAplicado, consulta), getNovaConexao());
- saida = RelatorioUtil.getDiretorioReal("/relatorios/relatorio.pdf");
- JasperExportManager.exportReportToPdfFile(print, saida);
- saida = RelatorioUtil.getContextPath() + "/relatorios/relatorio.pdf";
- } catch (Exception e) {
- addErrorMessage("Formulario", "erro.geracao.relatorio", nomeRelatorio);
- e.printStackTrace();
- } finally {
- fechaConexao();
- }
- // mostro o erro ou o relatório na janela que abre
- return "geraRelatorio";
- }
- /*
- * Esse método retorna o map com o filtro e a consulta que o usuário gerou.
- */
- public Map<String, String> getMapComFiltroEConsulta(String filtroAplicado, String consulta) {
- Map<String, String> map = new HashMap<String, String>();
- // Se o usuário não aplicou nada no filtro, retorno nulo para o relatório
- if (filtroAplicado == null)
- filtroAplicado = "";
- else
- filtroAplicado = "Você aplicou o seguinte filtro no relatório:\n" + filtroAplicado;
- map.put("Filtro", filtroAplicado);
- map.put("consulta", consulta);
- 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.