Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML.
Java livre
Relatórios Avançados
Mais recursos do JasperRports e iReport
Aprenda a utilizar parâmetros, imagens e JavaBeans com as populares ferramentas livres para geração de relatórios
O engine para geração de relatórios JasperReports e o desenhador de layout iReport fornecem juntos um ambiente poderoso para o desenvolvimento de relatórios, tanto em aplicações web quanto desktop. O artigo “Relatórios Comparativos” da Edição 13 apresentou ferramentas e foi um dos que mais gerou interesse dos leitores, especialmente em cartas com duvidas sobre recursos mais avançados. Atendendo à demanda, este artigo mostra a funcionalidade avançadas e dicas para resolução de problemas com duas ferramentas. Pressupomos noções básicas do JasperReports e iReport, mas os exemplos são construídos de forma que o leitor seja capaz de executá-lo mesmo sem conhecimento prévio.
Arquitetura de um relatório no JasperReports
Vamos começar com uma recapitulação. Um relatório do JasperRports recebe duas entradas: uma fonte de dados, que fornece os valores dos campos para detalhe do relatório, e um mapa (java.util.Map) com parâmetros, onde são passadas informações que não variam com cada linha do detalhe (uma linha de detalhe é a parte variável do relatório, geralmente associada a um registro ou conjunto de atributos da fonte de dados).
O relatório em si é organizado em faixas (bands). Exemplos de faixas são cabeçalhos e rodapés de pagina, coluna e grupo. A Figura 1 ilustra essa organização. Dentro das faixas podem ser ingeridos vários tipos de elementos gráficos, que ocupam uma área delimitada dentro de uma faixa e têm atributos como cor de fundo ou de borda.
Entre os elementos gráficos temos campos de texto estáticos, com conteúdo fixo, e campos de texto dinâmicos, que exibem o resultado de uma expressão em Java (ou com o Bean Sheall¹). Dentro dessa expressão são reconhecidas as seguintes construções para macro-substituição:
- $P {nome} – parâmetro, fornecido como entrada para o relatório.
- $V {nome} – variável, que é uma expressão recalculada dentro do relatório em momentos específicos definidos pelo desenvolvedor.
- $F {nome} – campo, que fica dentro de uma linha de detalhes
Parâmetros, variáveis e campos devem ser declarados antes de sua utilização nas faixas, de forma semelhante a variáveis e atributos
As variáveis, expressões e campos são tipados, utilizando para isso classes e interfaces Java; campos de texto dinâmico também são tipados.
ü É um erro comum o iniciante definir o tipo de uma variável e esquecer de definir o tipo correto para o campo de texto dinâmico que referencia a variável.
Vistos os conceitos básicos, podemos passar à pratica. Os quadros “Instalando e executando o iReport” e “Criando o banco de dados de testes” mostram como preparar o ambiente básico para execução dos exemplos. Depois, baixe do site da Java Magazine os fontes dos exemplos e abra no iReport o arquivo vendas.jrxml. A Figura 2 mostra com ele deve se parecer no preview do iReport. Uma vez que você consiga abrir e executar o relatorio com sucesso, estará pronto para prosseguir para o próximo tópico.
Figura 1. Estruturas de faixas de um relatório do JasperReports
Figura 2. Relatório vendas.jrxml em pré-visualização no iReport.
Utilizando parâmetros
O primeiro relatório de exemplo exibe o mesmo resultado (a não ser, é claro, que estejam modificados os registros no banco de teste). Mas normalmente espera-se que um relatório filtre dinamicamente os registros de acordo com critérios definidos pelo usuário. É ai que entram os parâmetros.
Nosso segundo exemplo é um relatório que exibe as vendas de um determinado produto em cada região em ordem decrescente de vendas. A Figura 3 apresenta o layout. O parâmetro “idproduto” recebido deve ser criado pela opção View|Report Parameter do iReport, como ikustra a Figura 4. O parâmetro é então utilizado na consulta do relatorio, que pode ser editada via opção View|Report Query. O comando SQL usado é o seguinte:
select regiao.nome.regiao,
produto.nome.produto,
sum (qtde*preço)valor
from regiao,produto,vendas
where regiao.uf=vendas.uf
and produto.id=vendas.produto
and produto.id=$P{idProduto}
group by regiao.nome
order by regiao.nome
A Figura 5 ilustra a execuçao do relatorio pelo iReport, que utilizará o valor default definido para o parâmetro.
Figura 3. Layout do relatorio produto.jrxml