Esse artigo faz parte da revista Java Magazine edição 21. Clique aqui para ler todos os artigos desta edição

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 em classes Java. De fato, um layout de relatório do JasperReprts é uma classe Java gerada à partir da sua descrição em XML e compilada em bytecodes, de maneira similar ao que acontece com uma página JSP nim container web.

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

  ...

Quer ler esse conteúdo completo? Tenha acesso completo