GARANTIR DESCONTO

Fórum Impressão de Relatórios com Parametros no JSF usando iReport #10173

20/10/2009

0

 Bom dia,

 Estou desenvolvendo uma aplicação web com JSF,Spring,JPA e RichFaces, e neste momento estou com dificuldades de imprimir meu relatorio através de um parametro que possui no Relatorio e que por sua vez possui um sub_relatorio.

 O que preciso é atraves de um link na web eu possa imprimir este relatorio em PDF passando um paramentro do codigo do pedido.

Em anexo o codigo. no disco Virtual.  
Victor Lima

Victor Lima

Responder

Posts

21/10/2009

Dyego Carmo

Boa tade !

Sua duvida está em como passar um parametro para iReport ?
Ou como imprimir este PDF ?

Responder

Gostei + 0

21/10/2009

Dyego Carmo

para enviar os parametros no JasperReports , voce deve adicionar um parametro com o nome deseja dentro do iReport (o editor do layout)

ex: voce criou lá um parametro chamado "codigo" ,

Ai antes de mandar gerar via JASPERREPORTS voce envia este parametro da seguinte forma:


HashMap<String, String> parameterMap =  new HashMap<String, String>();
parameterMap.put("codigo","22");
jp = JasperFillManager.fillReport(arquivoDoRelatorio, parameterMap, banco.getConection());

LEMBRANCA MUITO IMPORTANTE: Voce deve criar este parametro utilizando o iReport antes , senao o JASPER nao vai conseguir encontra-lo !



Responder

Gostei + 0

21/10/2009

Victor Lima


Boa tarde Dyego,

Eu ja fiz exatamente isso mas nao deu certo,  o que não estou entendendo é :

 Criei um Parametro no iReport chamado PEDIDOID,esse parametro esta como java.lang.Long ,  esta no relatório de Mestre Detalhe.
 No SubReport tambem tem esse parametro PEDIDOID java.lang.Long, quando executo esse relatorio diretamente no iReport ele me retorna o relatório normalmente, abre uma caixa do prompt onde digito o codigo e mostra o Mestre detalhe e o subrelatorio.

O que não estou conseguindo é chamar esse relatório dentro da web que criei. Muitos exemplos so mostra com um relatório normal que nao tem subrelatório.

veja o que estou fazendo no código : dessa forma esta vindo em branco o relatório nao tem dados.


  public void executarRelatorio() throws java.text.ParseException, ParseException, SQLException {

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

        //pega o caminho do arquivo .jasper da aplicação
        InputStream reportStream = context.getExternalContext().getResourceAsStream("/reporter/pedidos/picking_SubReporte.jasper");
    

        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");


        try {


            Connection connection = getConnection();

            ServletOutputStream servletOutputStream = response.getOutputStream();

         //   HashMap<String,Integer> parametros = new HashMap<String,Integer>();
          //  parametros.put("PEDIDOID", 127 );
            HashMap map = new HashMap();
          //  map.put("PEDIDOID", 127);    // testei mas nao funcionou
            map.put("SUBREPORT_DIR","/reporter/pedidos/Itens_picking.jasper");
          
            //envia para o navegador o PDF gerado
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, map,connection);

            //    }
            servletOutputStream.flush();
            servletOutputStream.close();

            connection.close();

        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //evita erro do JSF após completar
            //a geração do relatório
            //avisando o FacesContext que a resposta está completa
            context.responseComplete();

        }

    }
Responder

Gostei + 0

21/10/2009

Victor Lima

Outro detalhe Dyego,

Para mim usando somente uma lista é bem mais fácil jogar o resultado em uma lista e depois passar os dados para o iReport. agora usando subreport nao tenho ideia, tentei  algumas coisas mas não deu certo.

Eu gostaria de fazer como esse exemplo abaixo: mas o problema é que com metre detalhe nao funciona, teria que implementar algo a mais que eu novato nao estou conseguindo. veja:


Eu consegui fazer a query normamente, retornando os dados na lista , jogando na tela uma previa tudo ok.



//separa a pesquisa do total encontrado
//possibilitando a utilização também no relatório
private List<?> todosResultsPesq(){
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("data1", new Timestamp(data1.getTime()));   
    params.put("data2", new Timestamp(dataConvertida()));   

    return usuarioDao.listPesqParam(consultaComprados(),params);
   
}




public void executarRelatorio(ActionEvent action) throws ParseException{
   
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) context.
        getExternalContext().getResponse();
   
    //pega o caminho do arquivo .jasper da aplicação
    InputStream reportStream = context.getExternalContext()
        .getResourceAsStream("/relatorios/relatorio.jasper");

    //envia a resposta com o MIME Type PDF
    response.setContentType("application/pdf");
    /*for�a a abertura de download
    response.setHeader("Content-disposition",
                "attachment;filename=relatorio.pdf");
    */
   
    try {
        ServletOutputStream servletOutputStream = response.getOutputStream();
   
        //envia o título para o relatório, usando o parâmetro criado
        Map<String, String> parametros = new HashMap<String, String>();
        parametros.put("TITULO", "Relat�rio de Compras Efetuadas no Site");
   
         List dados = new ArrayList();
         
         Map record = null;
         
         //varre a consulta e separa os objetos
         for (Iterator iterator = todosResultsPesq().iterator();
                 iterator.hasNext();) {
   
             Object[] o = (Object[]) iterator.next();
             record = new HashMap();
             //coloca em um Map cada um dos campos criados
             //manualmente pelo relatório
             record.put("pedido", Integer.parseInt(o[0].toString()));
             record.put("nome", o[1].toString());
             record.put("data", this.convertTimestamp(o[2].toString()));
             record.put("qtd", Integer.parseInt(o[3].toString()));
             record.put("total", Double.parseDouble(o[4].toString()));
             
             //adiciona o List dados
             dados.add(record);
         
         }
   
        //cria uma fonte de dados para cole��es
        JRBeanCollectionDataSource fonteDados =
            new JRBeanCollectionDataSource(dados);
   
        //envia para o navegador o PDF gerado
        JasperRunManager.runReportToPdfStream(reportStream,
                servletOutputStream, parametros,fonteDados);
   
        servletOutputStream.flush();
        servletOutputStream.close();
   
    } catch (JRException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        //evita erro do JSF após completar
        //a geração do relatório
        //avisando o FacesContext que a resposta está completa
        context.responseComplete();
   
    }
}




Responder

Gostei + 0

21/10/2009

Victor Lima

Boa noite Dyego,

Valeu pela força, funcinou a impressão, postei outro chamado porque preciso de varias paginas.

obrigado fica com Deus.
Responder

Gostei + 0

22/10/2009

Dyego Carmo

Beleza !!!!

Estou fechando o chamado !

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar