Jasper - agrupamento dinâmico

Olá pessoal,

Preciso de uma luz divina, alguém se habilita !?
É o seguinte:

Estou tentando criar a todo cuto um relatorio que será “agrupado” dinamicamente, pelo menos é o q estou tentando.

Sou novato no assunto principalmente em java, mas estamos na luta.

Bom estou trabalhando da seguinte forma, tenho meu abc.jsp, AbcControllerServlet, AbcBns, AbcDto, AbcDao. Cada um com suas implementacoes.

No meu AbcDao (que trabalha com o BD) tenho as seguinte linhas de código:

for (int i=0; i<orcamentoDto.ordenacao.size(); i++){
   rsl = Integer.parseInt((String)orcamentoDto.ordenacao.get(i));
      if (i<=orcamentoDto.ordenacao.size()-2){
         strAcao  = "'Ação: ' ||";
         strFonte = "'Fonte: ' ||";
         strItem  = "'Item: ' ||";
      }else{
         strAcao  = "";
         strFonte = "";
         strItem  = "";
      }

      switch (rsl){
        case  1:
          sqlGrupos = sqlGrupos.append("cdacaoorcamentaria  as cd_campo"+i+", "+strAcao+" dsacaoorcamentaria   as ds_campo"+i+", ");
          break;
        case 2:
          sqlGrupos = sqlGrupos.append("cdfonterecurso as cd_campo"+i+", "+strFonte+" dsfonterecurso as ds_campo"+i+", ");
          break;
        case 3:
          sqlGrupos = sqlGrupos.append("nritemorcamentario  as cd_campo"+i+", "+strItem+" dsitemorcamentario  as ds_campo"+i+", ");
          break;
        }
}

é através desses 3 campos q consiste meu agrupamento no meu relatório.
Acredito eu que eu deixando eles, como campoX… independente de quem entrar irei agrupa-lo conforme o template que criei no ireport. Me corrijam se estiver errado.

Enfim, outra coisa estranha é que no meu abcControllerServlet onde tenho o meu método para gerar o PDf ocorrendo o seguinte erro:

Error loading object from file : D:\Aplicacao\build\web\Relatorios\relOrcamento.jasper

Minha pergunta é:

  • Qdo eu jogo esse caminho no executar do Windows Explorer ele acha o arquivo sem problemas… entao o problema nao está em encontra-lo e sim ao tentar carregar certo ??

O código do meu método para criar o relatório segue abaixo:

public void gerarRelatorio(HttpServletRequest request, HttpServletResponse response) throws Exception {
   RelSigenBns sigenBns = this.criaBusiness();
   RelOrcamentoFiscalDto sigenDto = this.criaDto();
   ResultSet rs = null;
   
   try{
      String reportFile = this.getServletContext().getRealPath("/Relatorios/relOrcamento.jasper");
            
      sigenDto = montaDadosReduzido(request);
      rs = sigenBns.relOrcamentoFiscal(sigenDto);
            
      JRResultSetDataSource jrRs = new JRResultSetDataSource(rs);
      Map parameters = new HashMap();
      
      // o erro está ocorrendo nesta linha abaixo
      JasperFillManager.fillReportToFile(reportFile, parameters, jrRs);

      JasperExportManager.exportReportToPdfFile(this.getServletContext().getRealPath("/Relatorios/relOrcamento.jrprint"));
            
      JasperViewer.viewReport(this.getServletContext().getRealPath("/Relatorios/relOrcamento.pdf"), false);
            
   }catch (Exception e ){
      request.setAttribute("mensagemErro", e.getMessage());
   }
//Aqui eu pedi para dar a saída do erro
//request.getRequestDispatcher("../relXxx/relOrcamentoFiscal.jsp").forward(request, response);
    }
  • Outra pergunta, o problema pode estar ocorrendo ao tentar carregar o Resultset no relOrcamento.jasper ???

se alguém puder dar essa força eu agradeço.

Abraço,

Marcelo Mello

Marcelo…

Não sei se vc já conseguiu mas eu utilizei um agrupamento do próprio report.

No report do jasper (arquivo jrxml) vc pode agrupar as informações utilizando o menu visualizar - Agrupamentos do relatório …
Esse menu vai criar uma nova banda de agrupamento, basta vode ordenar seu select para devolver este campo de agrupamento em ordem , para que o ireport não se perca.

Vc pode até colocar subtotais para esse agrupamento…