Fórum ArrayList #462722
02/12/2013
0
Estou criando um relatorio, faço a conexão desse relatorio com JRBeanCollectionDataSource, e estou passando uma lista que contém meus campos, até aí tudo bem, se eu jogar os meus campos diretamente no relatorio, funciona, apresenta os valores e tudo mais.
O meu problema está quando tenho um campo que é um ArrayList dentro da minha classe a estrutura que estou passando como "base de dados" no caso uma coleção seria assim:
public class Tags implements Serializable {
private XMLIde ide = new XMLIde();
private Complemento compl = new Complemento();
private Emitente emit = new Emitente();
private Expedidor exp = new Expedidor();
private Recebedor receb = new Recebedor();
private Remetente rem = new Remetente();
private Destinatario dest = new Destinatario();
private ValorPrestacaoServico vprest = new ValorPrestacaoServico();
private Impostos imp = new Impostos();
private InformacoesCTe inf = new InformacoesCTe();
private FaturamentoVeic fat = new FaturamentoVeic();
}
Pegando o exemplo do campo vprest a classe ValorPrestacaoServico está estruturada assim:
public class ValorPrestacaoServico {
private String vTPrest = "";
private String vRec = "";
private ArrayList<ComponentPrestacao> Componente = new ArrayList();
}
o campo Componente é um ArrayList
Como faço para listar esses valores dentro do iReport?
por exemplo, hoje no meu iReport para campos normais, eu passo
$F.getvRec()
Se alguém puder me dar uma ajuda, estou realmente precisando terminar isso o quanto antes
Obrigado
Josivan Laskoski
Curtir tópico
+ 0Posts
04/12/2013
Douglas
numa variável acumuladora para você exibir no seu relatório.
Gostei + 0
04/12/2013
Eduardo Pessoa
numa variável acumuladora para você exibir no seu relatório.
douglas, como ficaria o codigo?
Gostei + 0
05/12/2013
Josivan Laskoski
A solução é simples mas não muito logica, pois você em modo de desenvolvimento não consegue "ver" o funcionamento, mas enfim, vamos lá.
Na atual situação onde eu tenho um ArrayList dentro de uma classe chamada por outra classe é possível sim conseguir pegar esses dados e imprimir.
Para isso é necessário criar um subReport.
Passos:
1 - Relatorio principal: Cria um parametro [nome_que_desejar] mas com o tipo de dados java.long.Object
2 - Passe um parametro para sua chamada do relatorio:
JRDataSource dsComponente = new JRBeanCollectionDataSource(tags.getVprest().getComponente());
Map<String, Object> map = new HashMap<String, Object>();
map.put("componentes", dsComponente);
3 - Feito isso, Criei um SubReport, esse pode ser um subReport novo ou já existente, funciona igual
4 - Na etapa de Conexão por Expressão, marque Use a JRDatasource Expression
5 - Selecione o parametro que voce criou (java.long.Object)
6 - Vá ate seu SubReport e crie manualmente os campos que estão na tua classe, ou no caso, que formam seu objeto que é um ArrayList
Feito isso é so executar o report e ver se está tudo certo.
Espero que ajude alguém...
Gostei + 0
05/12/2013
Douglas
Gostei + 0
05/12/2013
Eduardo Pessoa
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)