DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

  #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.

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

 

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!







    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Autor
Fernando Lozano

é consultor independente, ativista do software livre e professor da Faculdade Metodista Bennett, além de autor do livro “Java em GNU/Linux” (Editora Alta Books). É detentor de certificações da Sun, IBM, Microsoft e Red Hat, sendo uma espécie de “agente duplo” nas várias tribos.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.

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

Plano conveniência – Neste plano este post custa R$ 4,90 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ 1,96 (assinante) ou R$ 2,45 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ 1,47
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03