Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como eu poderia passar um segundo datasource no JasperReportsViewResolver

Pessoal, bom dia.

Como eu poderia passar um segundo datasource no JasperReportsViewResolver? Eu tenho um gráfico no final do relatório que usa outra consulta do banco, mas não consigo enviar esse dataset para gerar o relatório.

@Bean
public JasperReportsViewResolver getJasperReportsViewResolver() {
  JasperReportsViewResolver resolver = new JasperReportsViewResolver();
  resolver.setPrefix("classpath:/static/jasper/");
  resolver.setSuffix(".jasper");
  resolver.setReportDataKey("datasource");
//precisaria passar um outro dataset para gerar o gráfico

  resolver.setViewNames("rpt_*");
  resolver.setViewClass(JasperReportsMultiFormatView.class);
  resolver.setOrder(0);
  return resolver;
}  
4 respostas
solução!

Oi Marco,

tem como mostrar o seu codigo do controller/action?

no link abaixo (em ingles) são discutidas algumas formas como vc pode definir mais de uma datasource:

https://community.jaspersoft.com/wiki/how-use-multiple-data-sources-jaspersoft-studio-or-jasperreports-server

abs

Segue

Pessoal, bom dia. O código abaixo roda perfeitamente, mostrando meu relatório. O problema é que no sumário do relatório eu tenho um gráfico demonstrativo que usa outro dataset no jaspersoft. Eu gostaria de saber como passar através do spring mvc esse outro dataset para meu relatório ser gerado corretamente, com o dados do relatório principal (que já funciona) e com o gráfico (que ainda não funciona, pois não consigo enviar a List que contém as informações). Fazendo os testes diretamente no jaspersoft está tudo ok. O problema é fazer essa simulação através do spring mvc, pois não consigo enviar os dados desse subdataset para gerar o gráfico.

Código do AppWebConfiguration:

    @Bean
    public JasperReportsViewResolver getJasperReportsViewResolver(){
        JasperReportsViewResolver resolver = new JasperReportsViewResolver();
        //informa a localização dos arquvios compilados
        resolver.setPrefix("/WEB-INF/views/jasper/");
        //informa a extensão do relatório a ser lido
        resolver.setSuffix(".jasper");
        //indica a fonte de dados para o relatório principal
        resolver.setReportDataKey("datasource");

              //Como eu vou enviar os dados para a geração do gráfico?

        //indica um padrão para o nome do relatório: Todos devem terminar com _report
        resolver.setViewNames("*_report");
        //essa classe permite definir o tipo de saída em tempo de execução
        resolver.setViewClass(JasperReportsMultiFormatView.class);
        resolver.setOrder(1);
        return resolver;
    }

Código do Controller...

       @RequestMapping("/relacaoProcessos")
       public String reportRelacaoProcessos(@AuthenticationPrincipal Usuario usuario, Model model,
               @RequestParam(
                       value="format",
                       defaultValue = "pdf",
                       required=false
                       )String format){

           List<Candidato> candidatos = candidatoDAO.relatorioProcessos(anoLetivo());
           List<ReportListaCandidatosProcessoDeferido> relatorioProcessosDeferidos = new ArrayList<ReportListaCandidatosProcessoDeferido>();


 //Essa List abaixo tem os dados que geraria o gráfico. Como eu poderia passar esses dados?
           List<Candidato> candidatosGraf = candidatoDAO.somatorioPorValorBolsa(anoLetivo());



           for (Candidato candidato : candidatos){
               relatorioProcessosDeferidos.add(new ReportListaCandidatosProcessoDeferido(candidato));   
           }


           model.addAttribute("format", format);
           model.addAttribute("datasource", relatorioProcessosDeferidos);
//Eu precisaria de outro atributo para passar esse dataset do gráfico.

           model.addAttribute("anoLetivo", anoLetivo());


         return "R008_SISBS_GRAF_GERAL_report";

       }

Oi Marco, fiquei feliz (feliz mesmo) que consegui ajudar de alguma forma mas qual foi a sua solução? :)

abs

Olá Nico.

Então, na verdade o que faltava era uma configuração no jasperreport. Tive que criar um parâmetro "dadosGrafico" no relatório principal, e depois nas propriedades do chart em Connection / DataSource Exp colocar a expressão new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{dadosGrafico}).

Depois no controller do spring foi só setar o atributo "dadosGrafico" com minha collection.

Obrigado pela força.

abraço.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software