pessoal,
eu gero um recibo no ireport. Então, pensei primeiro em gravar os dados no banco pro ireport buscá-los e se desse algum problema, eu deletava do banco… mas isso me deu problema qdo nos meus testes, o ireport gerava um documento sem paginas (eu ainda não sei pq isso acontece… testei a query no shell e funcionou… se alguem puder me ajudar nessa questão tb… :roll: ), pois ficava gravado um nro de recibo que na verdade naum foi emitido…
Então pensei em passar estes dados como parametros e gravar depois da emissao mesmo… Essa é a melhor solução ou tem outra melhor?
Particularmente não consegui entender muito bem sua duvida. mas quando faço relatórios procuro sempre pegar informações que já estão no banco. Contudo o jasper aceita diferentes fontes de dados inclusive objetos. Entendo que a melhor maneira de se obter a fonte (banco ou objeto) depende muito do seu négocio. Pergunto, deve ficar "persistente’ o registro dessa emissão do recido ? Caso afirmativo recomendo gravar antes e recuperar as informações para o relatorio através do banco. Sendo assim só nos resta analisar o código e a sql.
traga mais detalhes vamos discutir…
olá, herbert
os dados do recibo só podem ser gravados quando ocorreu tudo bem com o recibo, ou seja, a gravação só acontece com a geração do recibo pelo ireport for ok.
Na verdade, eu gravei no banco e carregava os dados de lá, mas quando eu executava e vinha uma janela de mensagem do ireport “Documento não contem páginas”, eu gravava no banco sem que o recibo fosse gerado… o q não pode ocorrer…
essa mensagem pro ireport não é um erro… qdo dava erro mesmo, eu deletava o recibo do banco…
será q consegui me expressar melhor?
dessa forma entendo que o seu data source seja um objeto. assim vc estria usando um JRDataSorce dos tipos: JRBeanArrayDataSource ou JRBeanCollection DataSource assim apartir do presuposto que vc ja tem uma colecao de obejtos que representam sua fonte de dados bastaria vc fazer assim:
//recupera o relatorio a ser preechido
JasperReport relatorio = (JasperReport) JRLoader.loadObject(“relatorio.jasper”);
//recuperar uma collection com os dados
List dados = ObjetoNegocio.getAllRecords();
//como o metodo pede um map de parametros criamos um vazio
Map parametros = new HashMap();
//preeche o relatório com os dados da colecao
JasperPrint imp = JasperFillManager.fillReport(relatorio, parametros, new JRBeanCollectionDataSource(dados));
//exibe o relatorio
JasperViewer.viewReport(imp);
isso seria usado uma collection por exemplo… é assim o processamento que vc ta fazendo ???
acho que ajudaria se vc colocasse informaçoes sobre a fonte de dados, e o trecho de codigo onde vc preeche o relatorio com a fonte.
eu particularmente odeio relatorios mas vamos resolver juntos…
herbert,
qdo eu tava escrevendo pra vc, caiu a luz aki… soh voltou agora… bom, valeu a ideia amigo, mas o recibo parte vem do banco (acho q JRBeanCollectionDataSource não daria certo… correto? sou iniciante… ), parte mando pelo codigo com o hashmap, em parte deu certo, mas agora tenho q arrumar o select…
bom, obrigado pelas dicas, vc foi mto atencioso… valeu mesmo… qq coisa dou mais um grito… heheheh
bom, pra resumir, usei parameters.put(…) nos dados do pagamento. acho q naum seria a solução mais bonita, mas foi o q consegui ateh agora…
claudete,
para a parte que vem do banco de dados vc pode usar um JRResultSetDataSource. o código continua o mesmo só que agora na linha de preechimento (Fill) do relatorio com dados vc usaria new JRResultSetDataSource ao invés de de um JRBeanCollectionDataSource. ah e claro agora a variavel dados ao inves de ser uma colletion (List) ela é um ResultSet.
tamo por aqui… 