[RESOLVIDO] Ireport - SubReport através JRBeanCollectionDataSource

6 respostas
S

Criei um subreport e no Data Source Expression informei [color=red]new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{report})[/color]

Ate ai blz… ele compila e gera o relatorio, o problema é que ele lista todos os subitens dentro de cada item.

Exemplo:

[color=blue]ADMINISTRATIVO[/color]
-USUARIOS
-DEPARTAMENTOS
-FILIAIS

[color=blue]FINANCEIRO[/color]
-USUARIOS
-DEPARTAMENTOS
-FILIAIS

6 Respostas

S

Consegui resolver, no subreport do report principal em “Subreport properties --> Parameters” adicionei um parametro NAME=Id EXPRESSION=$F{Id}

Depois dentro do subReport criei um parametro de nome Id do tipo Integer e depois em “More --> Filter Expression” adicionei $F{Id}.equals($P{Id})

R

savoine:
Consegui resolver, no subreport do report principal em “Subreport properties --> Parameters” adicionei um parametro NAME=Id EXPRESSION=$F{Id}

Depois dentro do subReport criei um parametro de nome Id do tipo Integer e depois em “More --> Filter Expression” adicionei $F{Id}.equals($P{Id})

Olá Savoine, como ficou seu código no java para esse tipo de relatório com JRBeanDatasource com subojetos? Estou com um problema idêntico ao seu.
Realizei o filterExpression mas não adiantou n.

E

cara eu faço tudo sempre pelo java

eu crio uma lista de JRBeanCollectionDataSource, dentro de cada objeto dessa lista eu crio mais uma lista do tipo JRBeanCollectionDataSource para poder montar o subrelatorio

exemplo

public class Teste {

private String teste1;

private String teste2;

private JRBeanCollectionDataSource lista;//aqui tem sua lista que monta o subrelatorio

}

no subrelatorio no atributo data source expression vc coloca o $F{lista}, pronto agora é só usar os atributos dessa lista interna no subrelatorio.

R

Consegui…
Seguite:
Tenho a seguinte classe exemplo:

class Axxx {
   int x1; //atributo identificador
   int x2;
   int x3;
   List objetoBList;
}

class B {
  int y1; ///atributo identificador
  int y2;
  Axxx a;
}
  1. No Ireport, relatório principal eu la na aba de conexão->JavaBean Data Source eu escolho a classe Axxx;
  2. No componente subreport, na propriedade Connection Type deixe Use a Data Source expression e na propriedade Data Source Expression use sua List/Collection, no caso do exemplo ficaria new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{objetoBList}) e na propriedade Parameters Map Expression passe o $P{REPORT_PARAMETERS_MAP} do relatório principal (fazendo com que o subrelatório receba também todos os parâmetros que foram passados para o relatório principal).
  3. Ainda no relatório principal adicione um parâmetro que será utilizado como filtro de expressão para o subreport, no meu caso utilizei o campo identificador x1.
  4. No Subreport vc escolhe como conexao o JavaBean Data Source do da classe B e na propriedade do subreport Filter Expression adicione um filtro no qual vc definiria a filtragem de para cada Objeto Axxx imprima todos os objetos da classe B B, mais ou menos assim: $P{x1}.equals($F{a}.getx1())

Tentarei realizar uma "VÍDEO DICA", postar no youtube e deixar o link aqui.

E

na verdade vc está fazendo errado, não precisaria passar esse Filter Expression, pois na sua coleçao só deveria ter dados associados a ele, dai vc nao precisaria bater chave, vc esta precisando fazer isso pois está passando coisas q nao são dele.
Uma coisa que eu penso em relatório ireport é, fazer tudo em java e nunca ficar colocando muita regra no ireport, dai fica mais facil dar manutençao.

R

eduJava:
na verdade vc está fazendo errado, não precisaria passar esse Filter Expression, pois na sua coleçao só deveria ter dados associados a ele, dai vc nao precisaria bater chave, vc esta precisando fazer isso pois está passando coisas q nao são dele.
Uma coisa que eu penso em relatório ireport é, fazer tudo em java e nunca ficar colocando muita regra no ireport, dai fica mais facil dar manutençao.

Certo eduJava! O Filter Expression não se faz necessário se o “Objeto Principal(do relatório principal)” e o subreport estão na mesma banda!

Criado 23 de abril de 2012
Ultima resposta 22 de nov. de 2013
Respostas 6
Participantes 3