#Este é um post fechado Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!
Artigo Java Magazine 21 - Relatórios Avançados
Artigo publicado pela Java Magazine edição 21.

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

Figura 4. Definição do parâmetro idProduto

Figura 5. Execução do relatorio produto.jrxml
Passando parâmetros por uma aplicação
O pequeno programa na Listagem 1 demonstra como realizar a passagem Java de parâmetros de uma aplicação Java para um relatório. Para tal utiliza-se um Map da API de coleção, em que cada entrada corresponde ao nome=valor de um parâmetro. Por exemplo, passar o parâmetro chamado “idProduto” com o valor “2” utilizamos:
parametros.put(“idProduto”,new Integer(2));
Para compilar o relatório utilize o buildfile do ANT fornecido com os exemplos, ou consulte o artigo da Edição 13 citado para saber como compilar diretamente uma aplicação baseada na JasperReports. Veja também o quadro “Nova API do JasperReports 0.6”, que indeica mudanças em nomes de pacotes e classes com relação a versão 0.5(utilizada naquele artigo).
Para manter a listagem curta, optamos por uma aplicação de linha de comando que recebe como argumento o identificador do produto a ser exibido. Uma aplicação “real” permitiria selecionar o produto pelo nome sem exigir conhecimento dos identificadores internos utilizados no banco de dados. Nos fonte disponíveis para download você vai encntrar a aplicação JProdutos.java, que utiliza o mesmo relatório mas apresenta uma interface mais conveniente para a sua execução (veja a Figura 6).

Figura 6. Aplicação JProdutos, versão gráfica da aplicação do primeiro exemplo
Listagem 1.Produto.java:aplicação que executa o relatório produto.jrxml passando um parâmetro obtido da linha de comando
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;
import java.sql.*;
import java.util.*;
public class Produto {
private static final String driver = “org.hqsldb.jdbcDriver”;
private static final String url = “jdbc:hqsldb:/d/db/vendas”;
private static final String loggin = “sa”;
private static final String pasoworld = “”;
private static final String layout = “Produto.jrxml”;
private static final String pdf = “produto.pdf”;
[1] //private static final String relatorio = “produto.jasper;
ATENÇÃO! A exibição deste artigo foi interrompida.
#Este é um post fechado Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!

Space do autor

Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL

0
0
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!