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.
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.
[quote=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.
[/quote]
Que nada, usando um JasperViewer, mas, de qualquer forma, ele precisa pesquisar.
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.
Use um JRCollectionDataSource.
Você teria que antes consultar com jpa e colocar a lista resultante nesse objeto.
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.
[quote]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.[/quote]
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.
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?
Ou seja, falta quase tudo. Você só tem as telas…
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.
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.
Cara eu uso essa class
[code]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();
}
}
[/code]
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
[quote=thiago.gomes.lima]Cara eu uso essa class
[code]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();
}
}
[/code]
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
[/quote]
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.