Ajuda com IREPORT

15 respostas
diogoprosoft

Galera estou trabalhando com relatorios no ireport o grande problema e que aqui na empresa usamos pl/sql entao no meu sistema eu mando paramentros para procedure e me retorna dados e um cursor ate ai blz …
Não tenho como fazer um select no banco para pegar os campo para meu ireport pq sao muitas tabelas e regras de negocio nas procedures , pergunta: tem como eu pegar no ireport os atributos da minha classe VO do java? e no momento que minha action fazer a consulta e os dados forem retornando no meu VO mostre no relatorio?

Obrigado.

15 Respostas

E

Tem sim configura teu classPath do Ireport para receber essa VO, faz todo o tratamento via listas no Java e manda pro ireport ele vai somente apresentar os dados não ficando nehuma regra de negócio nele e facilitando manutenções futuras

diogoprosoft

valeu por me responder, sabe onde posso encontrar um exemplo sobre esse assunto não me iluminou muito as ideias.

Andre_Fonseca

oi

dá uma olhada

http://www.devmedia.com.br/articles/viewcomp.asp?comp=2987

diogoprosoft

Valeu Andre mais na verdade nao quero usar procedures no ireport quero deixar somente para execução o que preciso e pegar minha classe VO e colocar no ireport para pegar meus atributos

E

No Ireport na Aba Opções tem a opção de classpath adiciona a pasta onde fica tuas classes compiladas do teu aplicativo por exemplo C:\eclipse\woskspace\teste\build\classes

Depois vai em na Aba Editar - Query do Relatorio

vai abrir uma tela com várias abas uma dela é a Fonte de Dados Java Bean

nela vc coloca o endereço do teu pacote por exemplo br.com.teste.TesteVO e pressiona o botao Ler atributos ai voce tem todos os campos da field e é só montar teu relatorio como se os fields fossem uma query

diogoprosoft

Cara show de bola funcionou no ireport porem quando gerou o relatorio gerou em branco meu codigo esta assim:

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 {
           JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/ExtratoParcelaCliente.jasper", parametros,  orafactory.getConnection());
            
            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");
            } 
            }
E

Tu queres somente exibir na tela ou quer salvar em algum banco ?

E

Quando nao aparece geralmente é porque vc nao passou a lista para o ireport

diogoprosoft

eu so preciso mostar na tela em estilo pdf para o usario imprimir ou salvar na tela e no meu ireport eu passei a lista ai mostrou todos os campos arrastei para minha pagina e ficou assim ${cdContrato}
mais nao mostrou nada oque posso fazer preciso entregar hoje :frowning:

E

A idéia de código é ± essa :

caminho = teu caminho relativo onde estao os arquivos compilados
listaTesteVO = e a tua VO adicinado os campos para exibção

JasperPrint report = null;

String reportName = caminho + “teste.jasper”;

String jrprint =  caminho + “teste.jrprint”;

String pdf =  caminho + “teste.pdf”;

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaTesteVO);

// Gerar arquivo no Disco

JasperFillManager.fillReportToFile(reportName,parametro, ds);

JasperExportManager.exportReportToPdfFile(jrprint,pdf);
// Gerar arquivo para ser salvo no Banco.

report = JasperFillManager.fillReport(reportName, parametro, ds);

byte x1[] = JasperExportManager.exportReportToPdf(report);
diogoprosoft

Mano meu código ficou assim:

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((Collection) extratoParcelaContratoVO); 
           //orafactory.getConnection()
           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");
            } 
            }

Porém esta dando erro nessa linha

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource((Collection) extratoParcelaContratoVO);

vai direto para exception

if(e.getClass().getSimpleName().equals("ClientAbortException")){
                    System.out.println("Documento cancelado");
            } else{
                    System.out.println("Outros");
            }

como posso resolver isso?

Fernando_Generoso_da

coloca o código da tua classe extratoParcelaContratoVO para visualizarmos…

Fernando

diogoprosoft

meu VO ExtratoParcelaContrato esta assim:

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 esta assim:

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);
        
        /////////////////////////////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((Collection) extratoParcelaContratoVO); 
           //orafactory.getConnection()
           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);
    }
    
}
diogoprosoft

Bom resolvido depois de muito quebrar a cabeça o codigo ficou assim:

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); 
           //orafactory.getConnection()
           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);
    }

Muito obrigado pela ajuda de todos vcs, :smiley:

E

parabéns cara

Criado 23 de setembro de 2008
Ultima resposta 23 de set. de 2008
Respostas 15
Participantes 4