You are on page 1of 42

Relatórios Corporativos

com Java e
Software Livre

Fernando Lozano
http://www.lozano.eti.br
Consultor Associado – Neki Technologies
Colunista da Revista Java Magazine

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 1


Sobre o Autor

Red Hat Certified Engineer
LPI Certified Professional Level I
Sair GNU/Linux Certified Professional

IBM Certified Network Engineer
IBM Certified DB2 Administrator &
Developer

Microsoft Certified Systems Engineer
Microsoft Certified Solutions Developer

Webmaster do Projeto GNU

Proctor, Reviewer & Item Writer do LPI

Community Manager do Java.Net

Autor do Livro "Java em GNU/Linux"
Ed. Alta Books www.altabooks.com.br

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 2


Agenda


Requerimentos para Relatórios Corporativos

Software Livre em Java para Relatórios

Porque relatórios baseados em Objetos

Design Visual com iReport

Geração de Relatórios com JasperReport

Demo

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 3


Requerimentos

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 4


Perfis de Sistemas
Desenvolvedores de
Relatórios

Aplicação Cliente/servidor desktop

Ferramentas tradicionais:
Crystal Reports, Oracle Reports, Access

Aplicação Web

Adaptação de ferramentas tradicionais
Crystal Server, Oracle Reports Server

Aplicação OO baseada em Design Patterns,
Frameworks e TDD

Nova geração de ferramentas Java
JasperReports, JReport, Style Reports, BIRT

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 5


Exemplo Tradicional

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 6


Requerimentos Tradicionais


Acesso direto a BDs relacionais

Totalização, Agrupamento, Ordenação, etc

Formatos Mestre/Detalhe

Suporte a logotipos, imagens, gráficos dinâmicos

Integração com ferramentas de desenvolvimento
para Desktop (GUI)

Pré-visualização

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 7


Ferramentas Tradicionais
(não-Java, não-Web)

Crystal Reports

Oracle Reports

Report Smith (Borland Delphi)

Componentes ActiveX / OLE Controls

CLIs / APIs programáticas (DLLs)

ODBC / OLE DB / BDE / dbExpress

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 8


Problemas com a Abordagem
Tradicional

Vínculo com a ferramenta de relatório, com a
linguagem de programação e sistema operacional

Duplicação de esforço:
consultas SQL na aplicação GUI e no Relatório

Pouco aproveitamento das capacidades de BDs
Relacionais

Dificuldades de adaptação à Web

Dependência em relação a um visualizador
proprietário

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 9


Novos Requerimentos


Acesso via Web ou e-mail

Formatos múltiplos de documentos de saída
(HTML, PDF, XLS, RTF)
✓ Independência do visualizador!

Agendamento e caching para maior performance

Integração com Servidores de Aplicação e Objetos
Distribuídos

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 10


Nova Geração de
Ferramentas

APIs para fontes de dados

Report Servers
(stand-alone ou como extensão para servidores web
/ servidores de aplicação)

Múltiplas APIs de acesso (bindings)

Integração com ferramentas de BI

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 11


Exemplo Nova Geração

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 12


Nova Geração x Java


Acesso via URLs

Pre-visualizadores nativos

JavaBeans utilizando JNI
(Overhead de conversão de objetos)

Restrições de plataformas suportadas pelos Report
Servers

Solução: engines de relatórios escritos em Java!
✓ Engines baseados em Java podem ser utilizados
diretamente por outras linguagens, como PHP

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 13


Software Livre para
Relatórios

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 14


Soluções Livres


Atendem a uma ou mais categorias:

Bibliotecas (Engines de Relatórios)
⇨ JasperReports, JFreeReport, Eclipse BIRT
⇨ Agata Reports (em PHP)

Servidores de Relatórios
⇨ OpenReports, JBoss Reporting Portal, JasperServer

Front-Ends (Desenhadores de Relatórios)
⇨ iReport, JasperEdit, JFreeReport, Eclipse BIRT

Business Inteligence
⇨ JasperInteligence

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 15


Por Que Relatórios Baseados
em Objetos

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 16


Demandas Adicionais do
Desenvolvedor Java

Suporte a Mecanismos de persistência de Objetos

Suporte a Design Patterns

Suporte a frameworks MVC ou IoC populares

⇨ Se a lógica de negócios, de persistência e mesmo a


interface com o usuário hoje é baseada em modelos OO,
porque a geração de relatórios deve seguir uma visão
relacional?

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 17


Evite Soluções Baixo Nível!


iText

Biblioteca para manipulação de documentos PDF
✗ Construção da página à partir de elementos gráficos de
baixo nível
✗ Controle manual da paginação

Apache FOP

Biblioteca para rasterização de documentos XSL-FO
✗ Descreve um documento genérico, não um relatório
estruturado

HTML e CSS
✗ O padrão não fornece controle de página

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 18


Design Visual com iReport

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 19


Sobre o iReport


Desenhador visual para descrições (layouts) do
JasperReports

Utiliza o JasperReports para compilar e executar o
relatório

Incorpora também o JFreeChart para geração
dinâmica de gráficos nos relatórios

Originalmente uma aplicação apenas para Windows;
à partir de 2003 Pure-Java (Swing)

Ritmo acelerado de evolução

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 20


Sobre a JasperSoft


Empresa criada pelos desenvolvedores do
JasperReports e iReports

Filiada ao JBoss Federation

Dedicada a fornecer suporte e treinamento nos odis
produtos

Desenvolve novas soluções livres sobre o
JasperReports, como as soluções de servidor de
Relatórios (JasperServer) e de BI (JasperIntelligence)

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 21


Novidades no iReport /
JasperReports

Relatórios cross-over

Fontes de dados OLAP

Linguagens de script

Virtualização
(Relatórios não precisam caber inteiramente em
memória RAM)

LAFs embutidos

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 22


iReport

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 23


Estrutura do Relatório


Faixas:
Título, Sumário, Colunas, Cabeçalhos, Rodapés,
Detalhe e Grupos

Elementos visuais estáticos e dinâmicos

Elementos dinâmicos são expressões Java, Groovy,
JavaScript (Rhino) ou BeanShell

Elementos “alargáveis” e flutuantes

Subrelatórios

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 24


Dados para o Relatório


Parâmetros
(estáticos durante uma execução do relatório)

Variáveis
(Expressões recalculadas em faixas pré-definidas)

Campos
(Mudam a cada linha / registro de detalhes)

Fonte de Dados
(Conexão JDBC, Coleção de Beans, Array, etc)

Consulta SQL ou HQL
(Apenas para Conexão JDBC ou Hibernate)

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 25


Fontes de Dados


Connection ou Resultset JDBC

Sessão Hibernate com ou sem Spring

Consulta EJBQL (EJB3)

Arquivo XML

Arquivo texto (CSV)

JavaBeans Serializados

Conexão Mondrian (OLAP)

Customizada (crie sua própria classe!)

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 26


Previsualização do Relatório


Janela Swing (adaptada do JasperReports)

Documentos PDF, HTML, XLS, RTF, XML, CSV
(mediante visualizadores externos)

Além dos visualizadores do JasperReports e
visualizadores externos, pode ser utilizado o
JasperAssistant, que fornece um visualizador SWT
✗ O designer baseado em SWT (do JasperAssistant) não é
software livre

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 27


Geração de Relatórios com
JasperReports

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 28


Sobre o JasperReports


Biblioteca de geração de relatórios para uso em
aplicações Java

Fornece um previsualizador Swing customizável

Utiliza outras biblitoecas livres para geração da
saída: iText (PDF), POI (XLS)

Utiliza ainda vários dos Jakarta-Commons

O desenvolvedor não necessita de conhecimento
das outras bibliotecas utilizadas, exceto pela sua
inclusão no classpath da aplicação

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 29


Ciclo de Funcionamento do
JasperReports

Definição (layout) do relatório em XML

Geração de classe Java à partir do layout

Compilação da classe (arquivo *.jasper)

Carga da classe

Preenchimento do relatório (execução da classe)

Renderização do relatório (em tela, impressora ou
arquivo)

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 30


Ciclo de Relatórios

Layout XML Carga Layout

Geração /
Relatório
Compilação

Preenchimento Impressão

Saída PDF/
Renderização
outra

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 31


API e Fachada do
JasperReports

Cada elemento de um relatório e cada operação do
ciclo são realizadas por classes em uma API de
“baixo nível”
✓ Flexibilidade para usar a API em um visualizador
customizado ou gerar novos elementos e renderizadores

Fachada em classes utilitárias (Jasper*Manager)
para as operações mais comuns
✓ Simplicidade de uso da biblioteca em aplicações gráficas
ou web

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 32


JasperReports API

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 33


Exemplo de Compilação e
Previsualização de Relatório

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;

private static final String layout = "produto.jrxml";

Carga + JasperReport relatorio =


Compilação JasperCompileManager.compileReport(layout);

Map parametros = new HashMap();


parametros.put("idProduto",
new Integer(Integer.parseInt(args[0])));

Preenchimento JasperPrint impressao = JasperFillManager.fillReport(


relatorio, parametros, con);

Renderização JasperViewer viewer = new JasperViewer(impressao, true);


viewer.show();

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 34


Exemplo de Geração de PDF
com Relatório Pré-Compilado

import net.sf.jasperreports.engine.*;

private static final String relatorio = "produto.jasper";


private static final String pdf = "produto.pdf";

Map parametros = new HashMap();


parametros.put("idProduto",
new Integer(Integer.parseInt(args[0])));

Carga + JasperPrint impressao = JasperFillManager.fillReport(


Preenchimento relatorio, parametros, con);

Renderização JasperExportManager.exportReportToPdfFile(impressao,
pdf);

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 35


Flexibilidade da API


Várias sobrecargas de cada método, ex:
String (nome de arquivo), InputStream, instância em
memória, recurso

Em geral o nome do arquivo original, um objeto File,
um InputStream ou o objeto interno do
JasperReports são intercambiáveis nas chamadas
aos métodos da fachada

Cada etapa intermediária pode ser serializada para
continuar o processamento posteriormente,
fornecendo suporte para a construção de servidores
de relatórios
(como o OpenReports e o JBoss Reporting Portal)

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 36


Automação e
Relatórios Dinâmicos

Task customizada do Ant para compilação de
relatórios

Subrelatórios

Linguagens de script (Groove, BeanShell) dentro dos
relatórios

Folhas de estilo XSL para geração dinâmica dos
layouts

Plug-ins do iReport

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 37


O Futuro

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 38


BI - Business Inteligence


Integração com ETI
(migrar dados operacionais para a DatawareHouse)

Fontes de dados Multidimensionais

Rearranjos do layout e drill down interetivo
(Ênfase em servidores de relatórios e visualizadores
de relatórios mais sofisticados)

É o foco da JasperSoft e do Eclipse BIRT

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 39


Demo

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 40


Referências


jasperreports.sourceforge.net

ireport.sourceforge.net

openreports.sourceforge.net

jfreereport.sourceforge.net

www.eclipse.org/birt

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 41


Perguntas?


Dúvidas:
fernando@lozano.eti.br

Palestras, Artigos e Apostilas:
www.lozano.eti.br

Consultoria e Capacitação:
www.neki.com.br

© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 42

You might also like