Boa tarde a todos,
Fiz um relatorio no ireport e consigo ve-lo legal, so que o relatorio esta sendo gerado pela query que fiz quando estava gerando o relatorio. Eu queira poder passar minha query, pois eu posso quer imprimir em ordem de codigo, ou em ordem alfabetica, ou poderia imprimir somentes as cidades de um determinado estado.
Como posso fazer isso?
Veja abaixo ate onde eu consegui chegar.
[code]
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("BDistribuidorPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
String sql = "select c from CidadeBean c ";
if(CbUf.getSelectedIndex() > 0) {
sql = sql + "where c.uf = :param ";
}
if(CbOrdem.getSelectedIndex() == 0) {
sql = sql + "order by c.codCidade";
}
if(CbOrdem.getSelectedIndex() == 1) {
sql = sql + "order by c.nomeCidade";
}
Map parametros = new HashMap();
parametros.put("EMPRESA", "EMPRESA MODELO");
parametros.put("TITULO", "TITULO DO RELATORIO");
parametros.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);
try {
JasperFillManager.fillReportToFile("relatorio/RelCadCidade.jasper", parametros);
JasperViewer jv = new JasperViewer("relatorio/RelCadCidade.jrprint", false, false);
jv.setTitle("Relatório de Cidades");
jv.setVisible(true);
}
catch(JRException e) {
javax.swing.JOptionPane.showMessageDialog(null, e.getMessage(), "Mensagem", 2);
}
em.close(); [/code]
Desculpem a pergunta mal elaborada.
O que eu quero é poder mandar minha query para o jasper gerar meu relatorio somente com os registros que eu selecionar. Como é que eu faço isso usando Hibernate com JPA?
Se você for fazer relatórios que se adaptam dinamicamente, acho que o projeto é outro. Procura no fórum que tem um que faz isso.
Agora, se for mandar parâmetro, ai sim, mas seria interessante explicar melhor pra entendermos o que realmente quer.
Deu um pouco de trabalho, mas acabei descobrindo.
O que eu tava querendo era poder mandar para o relatorio somente os registros selecionados por uma query (esta na linha 30 do fonte).
Estou postando o codigo abaixo, pode ser que sirva para alguem que venha a precisar.
Obrigado a todos pela atencao
[code] EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("BDistribuidorPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
String sql = "select c from CidadeBean c ";
List list = null;
String titulo = "Relatório de cidades";
if(CbUf.getSelectedIndex() > 0) {
sql = sql + "where c.uf = :param ";
titulo = titulo + " da UF: " + CbUf.getSelectedItem().toString();
}
if(CbOrdem.getSelectedIndex() == 0) {
sql = sql + "order by c.codCidade";
}
if(CbOrdem.getSelectedIndex() == 1) {
sql = sql + "order by c.nomeCidade";
}
if(CbUf.getSelectedIndex() > 0) {
list = em.createQuery(sql).setParameter("param", CbUf.getSelectedItem()).getResultList();
}
else {
list = em.createQuery(sql).getResultList();
}
JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(list);
Map parametros = new HashMap();
parametros.put("EMPRESA", "EMPRESA MODELO");
parametros.put("TITULO", titulo);
parametros.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);
em.close();
try {
JasperFillManager.fillReportToFile("relatorio/RelCadCidade.jasper", parametros,jr);
JasperViewer jv = new JasperViewer("relatorio/RelCadCidade.jrprint", false, false);
jv.setTitle("Relatório de Cidades");
jv.setVisible(true);
}
catch(JRException e) {
javax.swing.JOptionPane.showMessageDialog(null, e.getMessage(), "Mensagem", 2);
} [/code]
Só uma dica, relatórios geralmente são montados com escopos específicos. Você não precisa transmitir a query e o restante.
Você monta a query parcial no relatório e transmite o parâmetro com apenas as partes que deseja, falo da condição.
Há, coloque no título [RESOLVIDO].
[quote=djemacao]Só uma dica, relatórios geralmente são montados com escopos específicos. Você não precisa transmitir a query e o restante.
Você monta a query parcial no relatório e transmite o parâmetro com apenas as partes que deseja, falo da condição.
Há, coloque no título [RESOLVIDO].
Abraços e bons códigos[/quote]
não entendi o que vc quiz dizer…
nos meus relatorio normalmente eu nem envio query deixo essa responsabilidade
(resgatar os dados) para a aplicação, mando soh Objetos e listas…
Deu um pouco de trabalho, mas acabei descobrindo.
O que eu tava querendo era poder mandar para o relatorio somente os registros selecionados por uma query (esta na linha 30 do fonte).
Estou postando o codigo abaixo, pode ser que sirva para alguem que venha a precisar.
Obrigado a todos pela atencao
[/quote]
Ele disse que resolveu, descobrindo como queria fazer. Então, pra ele, o problema foi resolvido. Não vejo porque não dizer que está resolvido na thread.
E transmitiu ao relatório. Essa query não precisa ser transmitida, uma vez que estaria já no relatório.
Ele está transmitindo um JRBeanCollectionDataSource para o relatório, mas nada disso é preciso. Ele pode montar um relatório tranquilamente com JPA e depois somente transmitir os parâmetros faltantes para completar a query e gerar o relatório.
Acho que ele teve mais trabalho fazendo dessa forma, foi o que quis dizer.
[quote=djemacao][quote=feltraco]
não entendi o que vc quiz dizer…
nos meus relatorio normalmente eu nem envio query deixo essa responsabilidade
(resgatar os dados) para a aplicação, mando soh Objetos e listas…
naum sakei o que vc quis dizer ?
PS: o problema ainda nao foi resolvido…
[/quote]
Ele fez essa query:
String sql = "select c from CidadeBean c ";
E transmitiu ao relatório. Essa query não precisa ser transmitida, uma vez que estaria já no relatório.
Ele está transmitindo um JRBeanCollectionDataSource para o relatório, mas nada disso é preciso. Ele pode montar um relatório tranquilamente com JPA e depois somente transmitir os parâmetros faltantes para completar a query e gerar o relatório.
Acho que ele teve mais trabalho fazendo dessa forma, foi o que quis dizer.
Bom, eu posso criar o relatorio no ireport somente usando ‘select c from CidadeBean’, até ai tudo bem.
Agora como eu vou passar em tempo de execusao as clausulas “where” e “order by”?