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.
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();
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?
Aguardando…
D
djemacao
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.
Abraços
P
perell
Bom dia a todos,
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
exatamente como está descrito no tutorial que te passei …
Bom que resolveu…
D
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
feltraco
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
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…
D
djemacao
perell:
Bom dia a todos,
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
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.
D
djemacao
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.
Abraços
feltraco
djemacao:
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…
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.
Abraços
Agoro entendi e concordo…
P
perell
Bom dia a todos,
Agora fiquei com uma duvida. Vamos lá:
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”?
aguardando…
Depois que eu entender isso eu ponho [ENCERRADO]
feltraco
pode sim…
do mesmo modo que vc coloca um field no corpo do relatorio
vc pode colocar na query do relatorio
select * from cidade where $F(where) order by $F(order)
ai vc popula $F(where) e $F(order)…
mas ainda sou a favor de vc resgatar todos os dados que
vc quer no relatorio e mandar so dados sem sql pro jasper
mas é opçao de cada um… FLwS
D
djemacao
No relatório JasperReports, via iReport, você coloca assim:
O parâmetro PAR_CONDICAO pode ter o valor padrão “”.
No relatório, você transmite o que desejar ao parâmetro.
Mapparameters=newHashMap();if(CbUf.getSelectedIndex()>0){sql=sql+"wherec.uf=:param";titulo=titulo+"daUF:" + CbUf.getSelectedItem().toString(); } if(CbOrdem.getSelectedIndex() == 0) { sql = sql + "orderbyc.codCidade"; } if(CbOrdem.getSelectedIndex() == 1) { sql = sql + "orderbyc.nomeCidade"; } //aqui você transmite a condicao que deseja e o relatório é geradoparameters.put("PAR_CONDICAO",sql);
Bom, fiz mais ou menos para ter uma idéia. Acredito que conheça o desenvolvimento de relatórios e entenda o que eu quis dizer.