Duvidas para gerar relatório no iReport [RESOLVIDO]

Pessoal,

Estou com a seguinte dúvida:

Tenho uma lista de objetos complexos [ com 3 niveis ]

Tenho um objeto Pai, que tem uma lista de objetos Filhos, que por sua vez tb tem uma lista de objetos filhos:

Pai
   |
   |->obejto1
                |->obejto1.1
   |->objeto2
               |->objeto2.1
               |->objeto2.2

Ou seja no relatorio quero a seguinte saida:


Pai

     objeto1

               objeto 1.1

     objeto2

               objeto 2.1
               objeto 2.2

Como se fosse um indice de topicos de um livro

Não sei nem por onde começar, não sei o que procurar na net

Obrigado!

q tal começar pelo inicio.

desenhe o relatório, faça conforme vc quer.
e depois estruture o sql ou então mande uma collection para ele…

:wink:

[quote=TheKill]q tal começar pelo inicio.

desenhe o relatório, faça conforme vc quer.
e depois estruture o sql ou então mande uma collection para ele…

;)[/quote]

Olá TheKill,

Me desculpe, sou iniciante com iReport…

Mas minha ideia é sim passar uma coleção de objetos.

A duvida é como eu faço para pegar os campos que estão dentro de outro campo do objeto?

Por exemplo, o objeto pai tem uma lista de objetos filho. Como eu faço para pegar um campo do filho.

Do pai eu faço

F${nomePai}

e do filho desse pai?

Como estruturo o relatorio no ireport?

Obrigado

Eu trabalho mto pouco com collection…

Primeiro faça de forma normal, só colocando o nome de cada campo da collection,
se não der, vc vai descobrindo o que tem que fazer com o proprio erro gerado…

Mas se nao me engano… seria F${nomePai}.get(“filho”) nao tenho certeza, mas testa como eu falei primeiro.

[quote=TheKill]
Eu trabalho mto pouco com collection…

Primeiro faça de forma normal, só colocando o nome de cada campo da collection,
se não der, vc vai descobrindo o que tem que fazer com o proprio erro gerado…

Mas se nao me engano… seria F${nomePai}.get(“filho”) nao tenho certeza, mas testa como eu falei primeiro.[/quote]

Mas o campo do filho é o que está entre “”, no caso filho?

F${nomePai}.get(“filho”)

Obrigado

primeiro faz como eu falei, se nao der certo vc tenta com o .get{nomeFilho}

Deu esse erro:

Error evaluating expression :
Source text : $F{codigoBarra}.get(“lacos”)

eu falei pra fazer como eu disse primeiro.

$F{lacos} e se nao der era pra tentar dessa forma…

Rodrigo,

é bem simples cara, no ireport cria os fields com os mesmos nomes dos teus atributos do objeto pai,
aí o field que irá receber a lista, tu deixa ele do tipo Collection.

Para percorer a próxima lista, tu podes criar um sub-relatório, e passar o field que tem a lista para ele como
um dataSource. Por exemplo, após criado o sub-relatório, tu clica em connection type, marca a opção use a dataSource expression,
depois clica em Data Source expression e adiciona a seguinte expressão:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{FIELD_CRIADO_LISTA})

Depois no sub-relatório tu irás criar os fields com os nomes dos atributos do objeto da lista que tu passou.

E assim tu fará para as demais listas.

Abraço.

Foi oque eu falei desde o inicio =x

Para ele fazer da primeira forma, e ai se nao desse certo tentace usar um get() no objeto pai.

Mas tudo bem ;D

Rodrigo se tu conseguistes resolver o problema, indica aqui qual solução usastes, e coloca como resolvido este tópico.

Vlw…

[quote=rafadeaguiar]Rodrigo se tu conseguistes resolver o problema, indica aqui qual solução usastes, e coloca como resolvido este tópico.

Vlw…[/quote]

Ok, assim que eu conseguir eu posto!

Valeu!

[quote=rafadeaguiar]Rodrigo,

é bem simples cara, no ireport cria os fields com os mesmos nomes dos teus atributos do objeto pai,
aí o field que irá receber a lista, tu deixa ele do tipo Collection.

Para percorer a próxima lista, tu podes criar um sub-relatório, e passar o field que tem a lista para ele como
um dataSource. Por exemplo, após criado o sub-relatório, tu clica em connection type, marca a opção use a dataSource expression,
depois clica em Data Source expression e adiciona a seguinte expressão:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{FIELD_CRIADO_LISTA})

Depois no sub-relatório tu irás criar os fields com os nomes dos atributos do objeto da lista que tu passou.

E assim tu fará para as demais listas.

Abraço.[/quote]

Pessoal, consegui fazer o relatório…

Exatamente seguindo os passos que o rafadeaguiar colocou em uma das respostas que me foram dadas, ou seja:

Fiz um relatório principal com um subrelatorio dentro

Criei três fields no relatório principal, dois campos do tipo String e um do tipo Collection, o qual é utilizado como “fonte de dados” para o subrelatorio

No subrelatorio criado dentro do relatorio principal, fiz a seguinte configuração:

Connection type: Use a dataSource expression

Data Source Expression: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{minhaColecao})

No subrelatorio, declarei normalmente os campos do segundo objeto.

Espero ter ajudado!

Agradeço a ajuda de todos!

Obrigado rafadeaguiar, valeu mesmo!

Boa tarde, gracas a essa pagina pude acessar dados de dentro de objetos, nao cheguei a fazer com um subreport, mas utilizei o metodo de recuperar o campo do object, no caso o Getter,
utilizei a seguinte expressao

$F{(classe do seu projeto)}.(metodo de recuperacao do campo).

funcionou perfeitamente, e resolvi compartilhar, mesmo q me desvalorizem por isso, kkkkkkk
eh apenas mais um metodo para resolver isso. Blz .

[quote=Dark_Stalker]Boa tarde, gracas a essa pagina pude acessar dados de dentro de objetos, nao cheguei a fazer com um subreport, mas utilizei o metodo de recuperar o campo do object, no caso o Getter,
utilizei a seguinte expressao

$F{(classe do seu projeto)}.(metodo de recuperacao do campo).

funcionou perfeitamente, e resolvi compartilhar, mesmo q me desvalorizem por isso, kkkkkkk
eh apenas mais um metodo para resolver isso. Blz .

[/quote]
Cara, estou tentando fazer da seguinte maneira: $F{lista}.iterator().next().getClass().status, sendo que a lista é uma collection…Não estou conseguindo,Poderia dar uma ajuda ai?? Se puder ajudar, agradeceria mto…Vlw