Bom pessoal, meu primeiro post aqui, acompanho a muito tempo o fórum buscando soluções e acabo de me deparar com um problema. Peço a ajuda de vocês aqui no fórum.
Tenho que gerar um relatório com três querys com informações distintas. Não consegui resolver o problema utilizando subreport, pois ele funciona como um subdetail. Eu preciso de três detalhes, porém o ireports tem apenas opção de um detalhe.
Tenho alguns exemplos de como gerar direto o arquivo .jasper sem gerar o design em xml. Entretanto, tenho muitos relatório dessa natureza e gostaria de uma solução mais prática.
Bem, realmente se vc colocar subreports dentro do detail eles funcionarão como subdetails. Mas já pensou em colocá-los em outra banda?
E se vc colocar os 3 subreports dentro da sua banda de quebra, no header dela, ou até mesmo no footer dela? Ai vc coloca o tamanho da banda detail pra 0 e pronto!
Bom, isso da resultado também. Porém ainda busco uma solução melhor do que o POG hehe.
Outro problema, em uma banda preciso que os campos sejam adicionados dinamicamente. Por exemplo, tenho uma estrutura de níveis hierárquicos com autorelacionamento. Se eu escolher o 3º nível, tenho que acrescentar campos para o 1º, 2º e 3º.
Como poderia acessar uma banda do relatório antes de imprimir e adicionar os campos?
Exemplo da Banda:
Nivel 1: Descrição do 1
Nivel 2: Descrição do 2
Nivel 3: Descrição do 3
só sou a favor de sub-relatorios quando você quer unificar a complexidade de processamento do relatorio de forma a reusá-lo em outros. Caso esta situação não aconteça, utilize agrupamentos. Caso venha a ter muitos cálculos e processamentos de verificações entre estes níveis, aconselho o uso de um scriplet em paralelo para auxiliar nestas contas.
É isso ai, como o colega disse, Scriptlets é a solução caso deseje acessar algo do relatório durante sua execução. Pesquise aqui msm no GUJ sobre eles que encontrará algo, eu msm já postei explicando como usá-los.
Só que é o seguinte, não sei até que ponto isso poderá te ajudar, a definição de scriptlets é clara, veja:
Trocando em miúdos? Com scriptlets vc pode ACESSAR campos, parâmetros e variáveis. Mas pode MODIFICAR apenas variáveis. Por isso que eu acho que no seu caso não resolveria muita coisa. Ele não permite que vc acesse uma banda e crie componentes como existe em outros geradores de relatórios de outras linguagens.
Uma alternativa que já usamos aqui é escrever o .jrxml em tempo de execução. Temos um caso aqui em que há variação do número de colunas durante a impressão do relatório. A alternativa encontrada foi escrever aquele trecho do .jrxml em tempo de execução! Vc monta o .jrxml como deseja ainda no java, e depois chama ele normalmente. Eu tenho até um programa aqui, um gerador de relatórios msm, que o usuário escolhe os campos que deseja, etc, etc… e eu monto o .jrxml correspondente. Não é complicado, é trabalhoso apenas, é só observar como se comporta o .jrxml q vc consegue fazer.
Uma outra alternativa é usando Scriptlets… Na tal banda que pode ter diferentes níveis, vc coloca um campo com a propriedade Strech with overflow. Ai vc coloca pra imprimir neste campo uma variável $V{varNivel}. Então, usando scriptlets vc altera o conteúdo dessa variável em tempo de execução. Ai vc coloca dentro dela tudo que precisa que seja impresso, usando seu exemplo ainda, vc colocaria:
Vc pode usar dois campos invés de um, pode colocar um campo pra escrever o código dos níveis e outro as descrições, enfim, dá pra fazer MUITA coisa com o que eu chamo de POG (Programação Orientada a Genialidade… achou que era a gambiarra né? hauhauahuahuahaua)
Qdo a ferramenta não tem o que vc precisa, vc tem que inovar! Divirta-se! Qq. coisa é só “gritar”… :lol: