© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 1
Relatórios Corporativos Relatórios Corporativos com Java ecom Java e
Software LivreSoftware Livre
Fernando LozanoFernando Lozanohttp://www.lozano.eti.brhttp://www.lozano.eti.br
Consultor Associado – Neki TechnologiesColunista da Revista Java Magazine
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 2
Sobre o AutorSobre o Autor
● Red Hat Certified EngineerLPI Certified Professional Level ISair GNU/Linux Certified Professional
● IBM Certified Network EngineerIBM Certified DB2 Administrator & Developer
● Microsoft Certified Systems EngineerMicrosoft 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 3
AgendaAgenda
● 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 4
RequerimentosRequerimentos
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 5
Perfis de Sistemas Perfis de Sistemas Desenvolvedores de Desenvolvedores de
RelatóriosRelató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 JavaJasperReports, JReport, Style Reports, BIRT
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 6
Exemplo TradicionalExemplo Tradicional
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 7
Requerimentos TradicionaisRequerimentos 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 8
Ferramentas TradicionaisFerramentas Tradicionais(não-Java, não-Web)(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 9
Problemas com a Abordagem Problemas com a Abordagem TradicionalTradicional
● 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 10
Novos RequerimentosNovos 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 11
Nova Geração de Nova Geração de FerramentasFerramentas
● 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 12
Exemplo Nova GeraçãoExemplo Nova Geração
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 13
Nova Geração x JavaNova 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 14
Software Livre para Software Livre para RelatóriosRelatórios
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 15
Soluções LivresSoluçõ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 16
Por Que Relatórios Baseados Por Que Relatórios Baseados em Objetosem Objetos
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 17
Demandas Adicionais do Demandas Adicionais do Desenvolvedor JavaDesenvolvedor 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 18
Evite Soluções Baixo Nível!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 19
Design Visual com iReportDesign Visual com iReport
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 20
Sobre o iReportSobre 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 21
Sobre a JasperSoftSobre 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 22
Novidades no iReport / Novidades no iReport / JasperReportsJasperReports
● 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 23
iReportiReport
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 24
Estrutura do RelatórioEstrutura 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 25
Dados para o RelatórioDados 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 26
Fontes de DadosFontes 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 27
Previsualização do RelatórioPrevisualizaçã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 28
Geração de Relatórios com Geração de Relatórios com JasperReportsJasperReports
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 29
Sobre o JasperReportsSobre 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 30
Ciclo de Funcionamento do Ciclo de Funcionamento do JasperReportsJasperReports
● 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 31
Ciclo de RelatóriosCiclo de Relatórios
Layout XML Carga Layout
Relatório Geração /Compilação
Preenchimento Impressão
Saída PDF/outra
Renderização
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 32
API e Fachada do API e Fachada do JasperReportsJasperReports
● 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 33
JasperReports APIJasperReports API
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 34
Exemplo de Compilação eExemplo de Compilação ePrevisualização de RelatórioPrevisualização de Relatório
● import net.sf.jasperreports.engine.*;import net.sf.jasperreports.view.*;
private static final String layout = "produto.jrxml";
JasperReport relatorio = JasperCompileManager.compileReport(layout);
Map parametros = new HashMap();parametros.put("idProduto", new Integer(Integer.parseInt(args[0])));
JasperPrint impressao = JasperFillManager.fillReport( relatorio, parametros, con);
JasperViewer viewer = new JasperViewer(impressao, true);viewer.show();
Carga +Compilação
Preenchimento
Renderização
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 35
Exemplo de Geração de PDF Exemplo de Geração de PDF com Relatório Pré-Compiladocom 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])));
JasperPrint impressao = JasperFillManager.fillReport( relatorio, parametros, con);
JasperExportManager.exportReportToPdfFile(impressao, pdf);
Carga +Preenchimento
Renderização
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 36
Flexibilidade da APIFlexibilidade 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 37
Automação eAutomação eRelatórios DinâmicosRelató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 38
O FuturoO Futuro
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 39
BI - Business InteligenceBI - 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 40
DemoDemo
© 2006 Fernando Lozano, http://www.lozano.eti.br Relatórios Corporativos com Java e SL Slide 41
ReferênciasReferê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 42
Perguntas?Perguntas?
● Dúvidas:[email protected]
● Palestras, Artigos e Apostilas:www.lozano.eti.br
● Consultoria e Capacitação:www.neki.com.br