Ajuda com IREPORT!

20 respostas
diogoprosoft

Bom galera estou com outro probleminha com ireport deve ser bem simples mais to me quebrando…

Tenho uma classe com meus atributos onde nessa classe tenho um atributo do tipo resultSet, ate ai blz
trabalhamos aqui com procedures nessa que estou usando me retorna dados e um cursor, tranquilo…

no retorno da procedure passo os dados para minha classe populando meus atributos inclusive meu resultset

pergunta como faço para pegar os dados do resultset para imprimir no detail no relatorio?

minha classVO

public class ExtratoParcelaContrato {

    private Integer cdContrato;
    private String nmContrato;
    private Date dtInicio;
    private Date dtFinal;
    private String nmPredio;
    private String nmImovel;
    private String nmComprador;
    private String telefone;
    private String nmContato;
    private String deObservacao;
    private Date dtContrato;
    private String nmIndicador;
    private Float vlTotalParcelas;
    private Float vlTotalCorrecoes;
    private Float vlTotalJuros;
    private Float vlTotal;
    private ResultSet curParcelas;
get e set

Minha action

public ActionForward listaPorData(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        
        OracleDAOFactory orafactory = (OracleDAOFactory)DAOFactory.getDAOFactory(DAOFactory.ORACLE);
        orafactory.createConnection();
        
        ExtratoParcelaContratoService epcService = new ExtratoParcelaContratoService(orafactory);
        RelatorioParcelasContratoForm relatorioParcelasContratoForm = (RelatorioParcelasContratoForm) form;
        ExtratoParcelaContrato extratoParcelaContrato = new ExtratoParcelaContrato();                
        
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        Date dataFormatada = df.parse(relatorioParcelasContratoForm.getDtInicio());
        java.sql.Date dataSQL = new java.sql.Date(dataFormatada.getTime());
       
        extratoParcelaContrato.setDtInicio(dataSQL);
        
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date dataFormat = sdf.parse(relatorioParcelasContratoForm.getDtFinal());
        java.sql.Date dtSQL = new java.sql.Date(dataFormat.getTime());        
       
        extratoParcelaContrato.setDtFinal(dtSQL);
        
        extratoParcelaContrato.setCdContrato(relatorioParcelasContratoForm.getCdContrato());
        
        ExtratoParcelaContrato extratoParcelaContratoVO = epcService.selectExtratoParcelaCliente(extratoParcelaContrato);                
       
        List<ExtratoParcelaContrato> listaExtrato = new ArrayList<ExtratoParcelaContrato>();
        listaExtrato.add(extratoParcelaContratoVO);
        
        /////////////////////////////Relatorios/////////////////////////////
        //ExtratoParcelaContratoService extratoParcelaClienteService = new ExtratoParcelaContratoService(orafactory);
        //ExtratoParcelaContrato epc = new ExtratoParcelaContrato();
        
        String pathJasper = getServlet().getServletContext().getRealPath("/ireport/") + "/";   
        String pathImages = getServlet().getServletContext().getRealPath("/ireport/") + "/";   
  
        String path = getServlet().getServletContext().getRealPath("/");   
        Map parametros = new HashMap();   
  
        parametros.put("SUBREPORT_DIR", pathJasper);   
        parametros.put("IMAGES_URI", pathJasper);   

       try {           
           JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaExtrato);
           JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/ExtratoParcelaCliente.jasper", parametros, ds);
            
            byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
            byte[] arquivo = bytes;
            String nomeDoArquivo = "ExtratoParcelaCliente.pdf";
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
            response.setContentLength(arquivo.length);
            ServletOutputStream sos = response.getOutputStream();
            sos.write(arquivo, 0, arquivo.length);
            sos.flush();
            sos.close();
            } catch (Exception e) {
            if(e.getClass().getSimpleName().equals("ClientAbortException")){
                    System.out.println("Documento cancelado");
            } else{
                    System.out.println("Outros");
            } 
            }
        orafactory.closeConnection();
        return mapping.findForward(SUCCESS);
    }
    
}

Falou(y)

20 Respostas

andre_a_s

Pegue o seu ResultSet, passe ele para as suas entidades e passe uma lista de entidades para o JRBeanCollection.

matheus306

Ai, não rola de vc criar uma lista do seu resultSet e passar não? Quanto menos vc exigir do ireport melhor cara! trate tudo que possível no java e mande pra ele exibir!

diogoprosoft

Ja tentei fazer assim:

while(extratoParcelaContrato.getCurParcelas().next()){

       extratoParcelaContratoVO.setCdParcela(extratoParcelaContrato.getCurParcelas().setInt(1));

}

Mais ele nem entra no meu while!!!

Alguma idéia?

diogoprosoft

vejam como ficou meu codigo

ResultSet rs = extratoParcelaContratoVO.getCurParcelas();
        
        List<ExtratoParcelaContrato> listaCurParcela = new ArrayList<ExtratoParcelaContrato>();
        
        while(rs.next()){
            ExtratoParcelaContrato e = new ExtratoParcelaContrato();
            
            e.setCdParcela(rs.getInt(1));
            listaCurParcela.add(e);        
        }
matheus306

Esta funcionando?
Quando vc passa a lista ele imprime?

diogoprosoft

Sim está abrindo o relatorio sem o while com o while trava tudo, hehe

diogoprosoft

como posso abrir o resultset do atributo da classe? pois o while rs.next() so faz quando vem do banco…

acho que é esse o problema!!!

matheus306

Cara, uma coisa é fato! IReport so serve pra mostrar dados. Trabalhar dados nele é roubada!!!

diogoprosoft

sim mais o que eu quero é simplesmente pegar os dados do meu atributo ResultSet e setar no outros atributos da mesma classe, mais não estou conseguindo…

como posso fazer isso?

matheus306
while(resultSet.next()){
 funcionario  = new Funcionario();
 funcionario.setId(resultSet.getInt("NomeDaColuna ou numero"))
 funcionario.setNome(resultSet.getNome("NomeDaColuna ou numero"))
 ...
 ...
 listaDeFuncionario.add(funcionario)
}

Faça isto em uma classe fora, pra ficar mais organizado! Uma classe possui os atributos (Id, nome, RG) e outra faz a pesquisa no banco de dados e retorna. Entedeu?

diogoprosoft

Mano eu já fiz isso tbm, porém ta dando problema na hora de fazer o while ele pula direto nem chega fazer o while, pq?pq?pq? :frowning:

matheus306

Ele so pode estar vazio! ele so pula se estiver vazio, a não ser que ele esteja dentro de um bloco try-catch. Debuga seu código ai e verifica o resultado da query no seu resultSet.

diogoprosoft

cara ele esta vindo populado!!!

matheus306

ele não esta dentro de nenhum try-catch não ne? se não… andes do while de um resultSet.next(); uma linha antes do while.

diogoprosoft

se eu colocar assim ele passa pelo while()

ResultSet rs = extratoParcelaContratoVO.getCurParcelas();
        
        List<ExtratoParcelaContrato> listaCurParcela = new ArrayList<ExtratoParcelaContrato>();
        
        while(rs != null){
            ExtratoParcelaContrato e = new ExtratoParcelaContrato();             
aqui da erro ----> e.setCdParcela(rs.getInt(1));
            listaCurParcela.add(e);        
        }

caso contrario nem com rs.next() antes do while funciona

vou colocar minha action atual

public ActionForward listaPorData(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)throws Exception {
        
        OracleDAOFactory orafactory = (OracleDAOFactory)DAOFactory.getDAOFactory(DAOFactory.ORACLE);
        orafactory.createConnection();
        
        ExtratoParcelaContratoService epcService = new ExtratoParcelaContratoService(orafactory);
        RelatorioParcelasContratoForm relatorioParcelasContratoForm = (RelatorioParcelasContratoForm) form;
        ExtratoParcelaContrato extratoParcelaContrato = new ExtratoParcelaContrato();                
        
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        Date dataFormatada = df.parse(relatorioParcelasContratoForm.getDtInicio());
        java.sql.Date dataSQL = new java.sql.Date(dataFormatada.getTime());
       
        extratoParcelaContrato.setDtInicio(dataSQL);
        
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date dataFormat = sdf.parse(relatorioParcelasContratoForm.getDtFinal());
        java.sql.Date dtSQL = new java.sql.Date(dataFormat.getTime());        
       
        extratoParcelaContrato.setDtFinal(dtSQL);
        
        extratoParcelaContrato.setCdContrato(relatorioParcelasContratoForm.getCdContrato());
        
        ExtratoParcelaContrato extratoParcelaContratoVO = epcService.selectExtratoParcelaCliente(extratoParcelaContrato);                
       
        ResultSet rs = extratoParcelaContratoVO.getCurParcelas();
        
        List<ExtratoParcelaContrato> listaCurParcela = new ArrayList<ExtratoParcelaContrato>();
        
        while(rs.next()){
            ExtratoParcelaContrato e = new ExtratoParcelaContrato();             
            e.setCdParcela(rs.getInt(1));
            listaCurParcela.add(e);        
        }
        
        List<ExtratoParcelaContrato> listaExtrato = new ArrayList<ExtratoParcelaContrato>();
        listaExtrato.add(extratoParcelaContratoVO);
        
        /////////////////////////////Relatorios/////////////////////////////
        //ExtratoParcelaContratoService extratoParcelaClienteService = new ExtratoParcelaContratoService(orafactory);
        //ExtratoParcelaContrato epc = new ExtratoParcelaContrato();
        
        String pathJasper = getServlet().getServletContext().getRealPath("/ireport/") + "/";   
        String pathImages = getServlet().getServletContext().getRealPath("/ireport/") + "/";   
  
        String path = getServlet().getServletContext().getRealPath("/");   
        Map parametros = new HashMap();   
  
        parametros.put("SUBREPORT_DIR", pathJasper);   
        parametros.put("IMAGES_URI", pathJasper);   

       try {           
           JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaExtrato);           
           JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/ExtratoParcelaCliente.jasper", parametros, ds);
            
            byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
            byte[] arquivo = bytes;
            String nomeDoArquivo = "ExtratoParcelaCliente.pdf";
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
            response.setContentLength(arquivo.length);
            ServletOutputStream sos = response.getOutputStream();
            sos.write(arquivo, 0, arquivo.length);
            sos.flush();
            sos.close();
            } catch (Exception e) {
            if(e.getClass().getSimpleName().equals("ClientAbortException")){
                    System.out.println("Documento cancelado");
            } else{
                    System.out.println("Outros");
            } 
            }
        orafactory.closeConnection();
        return mapping.findForward(SUCCESS);
        
    }

que dor de cabeça para fazer um relatorio, hehehe

matheus306

Blz… então vamos por partes…

ExtratoParcelaContrato extratoParcelaContratoVO = epcService.selectExtratoParcelaCliente(extratoParcelaContrato);

Dentro de ExtratoParcelaContrato vc possui um resultSet que recebe o seu CurParcelas. Certo? Não teria como criar um método no seu service ai que vc passa o ExtratoParcelaContrato ele busca o CurParcelas? Ou CurParcela esta na mesma tabela de ExtratoParcelaContrato?

diogoprosoft

Mano antes de mais nada quero te agradecer pelo esforço em me ajudar, muito agradecido mesmo.

cara pior que os analistas me ferraram esta na mesma, é uma procedure que retorna campos e um cursor :-o

matheus306

putz brother!!

o foda que a única maneira de acessar o resultset é atravez do next mesmo. o que vc pode fazer é um for dentro pra pegar as colunas. mas nem adianta, se ele nem entra no while.

diogoprosoft

vou dar mais umas tentadas quando conseguir posto minha solução…

obrigado a todos :smiley:

diogoprosoft

Bom consegui resolver todos os problemas aqui…

O lance do while esta sim vindo o cursor do banco de dados = null o restante ficou show de bola

vou colocar o meu dodigo atual para quem tiver duvidas de como imprimir relatorio a partir de uma classe.

Classe Java VO

private Integer cdContrato;
    private String nmContrato;
    private Date dtInicio;
    private Date dtFinal;
    private String nmPredio;
    private String nmImovel;
    private String nmComprador;
    private String telefone;
    private String nmContato;
    private String deObservacao;
    private Date dtContrato;
    private String nmIndicador;
    private Float vlTotalParcelas;
    private Float vlTotalCorrecoes;
    private Float vlTotalJuros;
    private Float vlTotal;
    private ResultSet curParcelas;
    private Integer cdParcela;
    private String tipoParcela;
    private Date dtVencimento;
    private Integer nrParcela;
    private String situacao;
    private Float vlParcela;
    private Float vlCorrecao;
    private Integer taxa;
    private Integer percent;
    private Float vlJuros;
    private Float total;
    private Date dtPagto;
get e set

Minha action

public ActionForward listaPorData(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)throws Exception {
        
        OracleDAOFactory orafactory = (OracleDAOFactory)DAOFactory.getDAOFactory(DAOFactory.ORACLE);
        orafactory.createConnection();
        
        ExtratoParcelaContratoService epcService = new ExtratoParcelaContratoService(orafactory);
        RelatorioParcelasContratoForm relatorioParcelasContratoForm = (RelatorioParcelasContratoForm) form;
        ExtratoParcelaContrato extratoParcelaContrato = new ExtratoParcelaContrato();                
        
        if(relatorioParcelasContratoForm.getDtInicio() != ""){
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        Date dataFormatada = df.parse(relatorioParcelasContratoForm.getDtInicio());
        java.sql.Date dataSQL = new java.sql.Date(dataFormatada.getTime());       
        extratoParcelaContrato.setDtInicio(dataSQL);
        }
        if(relatorioParcelasContratoForm.getDtFinal() != ""){
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date dataFormat = sdf.parse(relatorioParcelasContratoForm.getDtFinal());
        java.sql.Date dtSQL = new java.sql.Date(dataFormat.getTime());               
        extratoParcelaContrato.setDtFinal(dtSQL);
        }
        extratoParcelaContrato.setCdContrato(relatorioParcelasContratoForm.getCdContrato());
        
        ExtratoParcelaContrato extratoParcelaContratoVO = epcService.selectExtratoParcelaCliente(extratoParcelaContrato);       
        
        ResultSet rs = extratoParcelaContratoVO.getCurParcelas();                
        
        List<ExtratoParcelaContrato> listaExtrato = new ArrayList<ExtratoParcelaContrato>();
        //listaExtrato.add(extratoParcelaContratoVO);
        
            while(rs.next()){                                            
                ExtratoParcelaContrato e = new ExtratoParcelaContrato();
                
                e.setCdContrato(extratoParcelaContratoVO.getCdContrato());
                e.setDtInicio(extratoParcelaContratoVO.getDtInicio());
                e.setDtFinal(extratoParcelaContratoVO.getDtFinal());
                e.setNmPredio(extratoParcelaContratoVO.getNmPredio());
                e.setNmImovel(extratoParcelaContratoVO.getNmImovel());
                e.setNmComprador(extratoParcelaContratoVO.getNmComprador());
                e.setTelefone(extratoParcelaContratoVO.getTelefone());
                e.setNmContato(extratoParcelaContratoVO.getNmContato());
                e.setDeObservacao(extratoParcelaContratoVO.getDeObservacao());
                e.setDtContrato(extratoParcelaContratoVO.getDtContrato());
                e.setNmIndicador(extratoParcelaContratoVO.getNmIndicador());
                e.setVlTotalParcelas(extratoParcelaContratoVO.getVlTotalParcelas());
                e.setVlTotalCorrecoes(extratoParcelaContratoVO.getVlTotalCorrecoes());
                e.setVlTotalJuros(extratoParcelaContratoVO.getVlTotalJuros());
                e.setVlTotal(extratoParcelaContratoVO.getVlTotal());
                
                e.setCdParcela(rs.getInt(1));
                e.setTipoParcela(rs.getString(2));
                e.setDtVencimento(rs.getDate(3));
                e.setNrParcela(rs.getInt(4));
                e.setSituacao(rs.getString(5));
                e.setVlParcela(rs.getFloat(6));
                e.setVlCorrecao(rs.getFloat(7));
                e.setTaxa(rs.getInt(8));
                e.setPercent(rs.getInt(9));
                e.setVlJuros(rs.getFloat(10));
                e.setTotal(rs.getFloat(11));
                e.setDtPagto(rs.getDate(12));                
                
                listaExtrato.add(e);
            }                        
        //listaExtrato.add(extratoParcelaContratoVO); 
        /////////////////////////////Relatorios/////////////////////////////        
        
        String pathJasper = getServlet().getServletContext().getRealPath("/ireport/") + "/";   
        String pathImages = getServlet().getServletContext().getRealPath("/ireport/") + "/";   
  
        String path = getServlet().getServletContext().getRealPath("/");   
        Map parametros = new HashMap();   
  
        parametros.put("SUBREPORT_DIR", pathJasper);   
        parametros.put("IMAGES_URI", pathJasper);   

       try {           
           JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaExtrato);           
           JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/ExtratoParcelaCliente.jasper", parametros, ds);
            
            byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
            byte[] arquivo = bytes;
            String nomeDoArquivo = "ExtratoParcelaCliente.pdf";
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
            response.setContentLength(arquivo.length);
            ServletOutputStream sos = response.getOutputStream();
            sos.write(arquivo, 0, arquivo.length);
            sos.flush();
            sos.close();
            } catch (Exception e) {
            if(e.getClass().getSimpleName().equals("ClientAbortException")){
                    System.out.println("Documento cancelado");
            } else{
                    System.out.println("Outros");
            } 
            }
        orafactory.closeConnection();
        return mapping.findForward(SUCCESS);
        
    }

Valeu galeras

Criado 23 de setembro de 2008
Ultima resposta 24 de set. de 2008
Respostas 20
Participantes 3