Relatórios com ireport usando JPA em java SE. Como fazer pra chama-los?

13 respostas
LucasSistemas2012

Olá, estou tendo dificuldades com os relatorios, estou desenvolvendo uma aplicação desktop utilizando JPA, já criei os relatorios, mas nao sei como chama-los. Alguem pode me informar um material onde tem ensinando, ou pode postar aqui os metodos caso já tiverem feito algum em alguma aplicação? Obrigado. :slight_smile:

13 Respostas

drsmachado

Aqui

lele_vader

Da mesma forma que web eu acho.
Você vai carregar o jrxml e depois compilar, ou já vir compilado e chamar o relatório, ou me memória ou gravar um pdf não sei.

drsmachado

lele_vader:
Da mesma forma que web eu acho.
Você vai carregar o jrxml e depois compilar, ou já vir compilado e chamar o relatório, ou me memória ou gravar um pdf não sei.

Que nada, usando um JasperViewer, mas, de qualquer forma, ele precisa pesquisar.

LucasSistemas2012

Já pesquisei muito, mas nao achei nada a respeito. Os que encontrei estao utilizando tecnologias ultrapassadas, utilizando classes de conexao, sql querys, etc. Gostaria de encontrar algum material ensinando fazer com JPA. Grato.

lele_vader

Use um JRCollectionDataSource.
Você teria que antes consultar com jpa e colocar a lista resultante nesse objeto.

drsmachado

O que algumas pessoas não entendem é que não se planta trigo com cana de açúcar para conseguir massa para bolo, mas, cada um em seu espaço. Após processos específicos, podemos usar o produto de cada um para fazer coisas como pães, tortas, bolos.
Eu nem irei questionar, pois quando eu procuro,consigo encontrar informações. Mesmo que seja um pedacinho em cada lugar.
Aliás, embora comprar o bolo pronto seja mais fácil, fazê-lo pode tornar a experiência de saboreá-lo mais proveitosa.

LucasSistemas2012

O que algumas pessoas não entendem é que não se planta trigo com cana de açúcar para conseguir massa para bolo, mas, cada um em seu espaço. Após processos específicos, podemos usar o produto de cada um para fazer coisas como pães, tortas, bolos.
Eu nem irei questionar, pois quando eu procuro,consigo encontrar informações. Mesmo que seja um pedacinho em cada lugar.
Aliás, embora comprar o bolo pronto seja mais fácil, fazê-lo pode tornar a experiência de saboreá-lo mais proveitosa.

Eu pesquisei de tudo já antes de postar amigão, eu não postaria um tópico sem antes não tentar pesquisar sobre tal assunto antes. Seria muita ignorância da minha parte. E até agora não encontrei nada viável utilizando JPA, só com tecnologias ultrapassadas. Agradeceria se vc pudesse me ajudar. É meu tcc, e só falta isso pra concluir o sistema. Obrigado.

drsmachado

Pelo visto, minha analogia foi demais para ti, não?
O que eu disse é que você não deve esperar tudo pronto.
Pegue um bom tutorial de JPA. Pegue um bom tutorial de iReport. Use um pouco da tua capacidade de raciocínio. Junte tudo isso. Pronto, você tem um bolo.

Manja?

drsmachado

Ou seja, falta quase tudo. Você só tem as telas…

LucasSistemas2012

Cadastros, consultas, edições e lógicas funcionando 100%, relatorios montados e funcionando no preview, só falta aprender como fazer pra chama-los qdo clicar no menu/botao. Infelismente não é qualquer um que sabe fazer isso. Ainda mais usando JPA.

Leandro_Rocha

Realizei diversas pesquisas e não consegui estabelecer uma conexão JPA/Hibernate com o iReport, sempre dando erros como: “No Persistence Provider” entre outros (obs: persistence.xml configurado, bibliotecas no classpath do iReport).
Realmente, é complicado realizar uma conexão JPA com o iReport, adiciona/retira .jars do classpath, configura dali, configura daqui e nada!
Os tutoriais são mais orientados ao modo antigo de se fazer, usando JDBC puro com regras SQL (e se trocar de banco??), e existem alguns tutoriais ensinando com JPQL/HQL etc (boa alternativa).

Porém a solução que encontrei fui utilizar um JavaBeans set datasource, que na minha opnião é bem melhor, já que vai trabalhar apenas com os atributos da classe de entidade no layout e as consultas JPQ/HQL ficam por responsabilidade dos DAOs, restando para o JasperReports apenas o layout.
Depois de desenhar seu layout direitinho, é só passar uma collection/list como parâmetro para um JRBeanCollectionDataSource ao gerar o relatório, por exemplo:

List<Usuario> lista = usuarioDAO.listAll(); //Recebe uma lista de todos os usuários no DB.
jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), new JRBeanCollectionDataSource(lista));

Eu encontrei esse tutorial, é muito bom:
http://1010111chen.wordpress.com/2010/05/19/ireport-tutorial-using-javabean-datasource/
Espero que tenha te ajudado…
Abraço.

T
Cara eu uso essa class
package relatorio;  
  
import java.util.HashMap;  
import javax.swing.JOptionPane;  
import net.sf.jasperreports.engine.JRResultSetDataSource;  
import net.sf.jasperreports.engine.JasperFillManager;  
import net.sf.jasperreports.engine.JasperPrint;  
import net.sf.jasperreports.view.JasperViewer;  
import utilitarios.conexao;  
  
  
public class relatorio {  
  
      
    conexao con = new conexao();  // inicia a conexão com a class de conexão de banco de dados  
  
  
public relatorio() //método construtor  
{  
  try   
  {  
      con.conecta();  
      con.executeSQL("SELECT * from cliente");  
      JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);  
      JasperPrint jasperPrint;  
        jasperPrint = JasperFillManager.fillReport(  
         "src/relatorio/cliente.jasper", new HashMap(), jrRS);  // nesta linha na área entre "" vc coloca o caminho do seu relatório    
      JasperViewer.viewReport(jasperPrint,false); //false para nao fechar o form  
  } catch (Exception erro){  
             JOptionPane.showMessageDialog(null,erro);  
   }  
}  
  
  public static void main (String args[])   
  {  
    new relatorio();   
  }  
}
no botão que vc quer chamar o relatório vc vai colocar o seguinte comando
new relatorio.relcliente(); // relatorio = é nome do pacote, relcliente = é nome da class
Leandro_Rocha
thiago.gomes.lima:
Cara eu uso essa class
package relatorio;  
  
import java.util.HashMap;  
import javax.swing.JOptionPane;  
import net.sf.jasperreports.engine.JRResultSetDataSource;  
import net.sf.jasperreports.engine.JasperFillManager;  
import net.sf.jasperreports.engine.JasperPrint;  
import net.sf.jasperreports.view.JasperViewer;  
import utilitarios.conexao;  
  
  
public class relatorio {  
  
      
    conexao con = new conexao();  // inicia a conexão com a class de conexão de banco de dados  
  
  
public relatorio() //método construtor  
{  
  try   
  {  
      con.conecta();  
      con.executeSQL("SELECT * from cliente");  
      JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);  
      JasperPrint jasperPrint;  
        jasperPrint = JasperFillManager.fillReport(  
         "src/relatorio/cliente.jasper", new HashMap(), jrRS);  // nesta linha na área entre "" vc coloca o caminho do seu relatório    
      JasperViewer.viewReport(jasperPrint,false); //false para nao fechar o form  
  } catch (Exception erro){  
             JOptionPane.showMessageDialog(null,erro);  
   }  
}  
  
  public static void main (String args[])   
  {  
    new relatorio();   
  }  
}
no botão que vc quer chamar o relatório vc vai colocar o seguinte comando
new relatorio.relcliente(); // relatorio = é nome do pacote, relcliente = é nome da class
Hum, sim, mas pelo que vi o que o LucasSistemas2012 quer é uma conexão com JPA, esse que você postou está utilizando JDBC puro, provavelmente devem haver consultas SQL e regras no próprio relatório, e cada field do relatório é uma coluna da tabela no DB. Utilizando um Javabeans set datasource, se trabalha apenas com os atributos das classes de entidade (os espelhos das tabelas) nos fields do relatório, a responsabilidade de consultas, listagens, pesquisas específicas no DB fica por conta dos DAOs e a maioria das regras (lógica de negócio) nas próprias classes de entidade (troca do padrão BOLOVO por Entity/Bean). Dessa forma a mobilidade da aplicação aumenta em muito e evitamos também o famoso Contexto Duplicado ("Duplicated Context is not good!"), fazendo a manutenção das queries apenas nos DAOs/Entities ou em um arquivo especifico para elas. Abraço.
Criado 2 de outubro de 2012
Ultima resposta 26 de dez. de 2012
Respostas 13
Participantes 5