Relatórios Corporativos com Java e Software Livre
Fernando Lozano
http://www.lozano.eti.br Consultor Associado – Neki Technologies
Colunista da Revista Java Magazine
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
Agenda ●
Requerimentos Requerime ntos 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 JasperReport
●
Demo
Requerimentos
Perfis de Sistemas Desenvolvedores de Relatórios ●
Aplicação Cliente/servidor desktop ●
●
Aplicação Web ●
●
Ferramentas tradicionais: Crystal Reports, Oracle Reports, Access Adaptação de ferramentas f erramentas tradicionais Crystal Server, Oracle Reports Server
Aplicação OO baseada em Design Patterns, Frameworks e TDD ●
Nova geração de ferramentas f erramentas Java JasperReports, JReport, Style Reports, BIRT
Exemplo Tradicional
Requerimentos Tradicionais ●
●
Acesso direto a BDs relac r elacionais ionais Totalização, Agrupamento, Ordenação, etc
●
Formatos Mestre Mestre/Detalhe /Detalhe
●
Suporte a logotipos, imagens, gráficos dinâmicos
●
●
Integração com ferramentas de desenvolvim desenvolvimento ento para Desktop (GUI) Pré-visualização
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
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 SQ L 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
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 Apli cação ção e Objetos Distribuídos
Nova Geração de Ferramentas ●
●
APIs para fontes de dados Report Servers (stand-alone ou como c omo extensão para servidores web / servidores de aplicação)
●
Múltiplas APIs de acesso (bindings)
●
Integração com ferramentas de BI
Exemplo Nova Geração
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
Software Livre para Relatórios
Soluções Livres ●
Atendem a uma ou mais categorias:
●
Bibliotecas (Engines de Relatórios) ⇨ JasperReports, ⇨
●
OpenReports, JBoss Reporting Portal, JasperServer
Front-Ends (Desenhadores de Relatórios) ⇨
●
Agata Reports (em PHP)
Servidores de Relatórios ⇨
●
JFreeReport, Eclipse BIRT
iReport, JasperEdit, JFreeReport, Eclipse BIRT
Business Inteligence ⇨ JasperInteligence
Por Que Relatórios Baseados em Objetos
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?
Evite Soluções Baixo Nível! ●
iText ●
●
✗
Construção da página à partir de elementos gráficos de baixo nível
✗
Controle manual da paginação
Apache FOP ●
✗
●
Biblioteca para manipulação de documentos PDF
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
Design Visual com iReport
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
Sobre a JasperSoft ●
●
●
●
Empresa criada pelos desenvolvedores desenvolvedores do do JasperReports e iReports Filiada ao JBoss Federation Dedicada a fornecer suporte e treinamento treinamento nos odis odi s produtos Desenvolve novas soluções livres sobre o JasperReports, como as soluções de servidor de Relatórios (JasperServer) e de BI (JasperIntelligence) ( JasperIntelligence)
Novidades no iReport / JasperReports ●
Relatórios cross-over
●
Fontes de dados OLAP
●
Linguagens de script
●
●
Virtualização (Relatórios não precisam precis am caber inteiramente em memória RAM) LAFs embutidos
iReport
Estrutura do Relatório ●
●
●
Faixas: Título, Sumário, Colunas, Cabeçalhos, Rodapés, Detalhe e Grupos Elementos Eleme ntos visuais estáticos e dinâmicos Elementos dinâmicos são expressões Java, Groovy, Elementos JavaScript (Rhino) ou BeanShell
●
Elementos Eleme ntos “alargáveis” e flutuantes
●
Subrelatórios
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, B eans, Array, etc) Consulta SQL ou HQL (Apenas para Conexão JDBC ou Hibernate)
Fontes de Dados ●
Connection ou Resultset JDBC
●
Sessão Hibernate com ou sem Spring
●
Consulta EJBQL (EJB3)
●
Arquivo XML
●
Arquivo texto (CSV)
●
JavaBeans Serializ S erializados ados
●
Conexão Mondrian (OLAP)
●
Customizada (crie sua própria classe!)
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, externos, pode ser utilizado o JasperAssistant, que fornece um u m visualizador SWT ✗
O designer baseado em SWT (do JasperAssistant) não é software livre
Geração de Relatórios com JasperReports
Sobre o JasperReports ●
●
●
●
●
Biblioteca de geração de relatórios para uso em aplicações Java Fornece um previsua p revisualizador lizador Swing Swi ng customizável 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 bibli otecas utilizadas, exceto exceto pela sua s ua inclusão no classpath da aplicação
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 Preenchime nto do relatório (execução da classe)
●
Renderização do relatório Renderização r elatório (em tela, impressora ou arquivo)
Ciclo de Relatórios Layout XML
Carga
Relatório
Geração / Compilação
Preenchimento
Saída PDF/ outra
Renderização
Layout
Impressão
API e Fachada do JasperReports ●
Cada elemento de um relatório e cada operação do 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 utilit árias ( Jasper*Manager Jasper*Manager) para as operações mais comuns ✓
Simplicidade de uso da biblioteca em aplicações gráficas ou web
JasperReports API
Exemplo de Compilação e Previsualização de Relatório ●
import net.sf.jasperre net.sf.jasperreports.engine.*; ports.engine.*; import net.sf.jasperre net.sf.jasperreports.view.*; ports.view.*; private static final String layout = "produto.jrxml";
Carga + Compilação
JasperReport relatorio = JasperCompileManager.compileReport(layout); Map parametros = new HashMap(); parametros.put("idProduto", new Integer(Integer. Integer(Integer.parseInt(args[0]))); parseInt(args[0])));
Preenchimento
Renderização
JasperPrint impressao = JasperFillManager.fi JasperFillManager.fillReport( llReport( relatorio, parametros, con); JasperViewer viewer = new JasperViewer(impre JasperViewer(impressao, ssao, true); viewer.show();
Exemplo de Geração de PDF com Relatório Pré-Compilado ●
import net.sf.jasperrepo net.sf.jasperreports.engine.*; rts.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. Integer(Integer.parseInt(args[0]) parseInt(args[0]))); ));
Carga + Preenchimento
Renderização
JasperPrint impressao = JasperFillManager JasperFillManager.fillReport( .fillReport( relatorio, parametros, con); JasperExportManager.exportReportToPdfFile(impressao, JasperExportManager.exportReportToP dfFile(impressao, pdf);
Flexibilidade da API ●
●
●
Várias sobrecargas de cada método, ex: String (nome de arquivo), InputStream InputS tream,, instância em memória, recurso Em geral o nome do arquivo original, um objeto File, F ile, um InputStream ou o objeto interno do JasperReports são intercambiáve i ntercambiáveis is 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)
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 XS L para geração dinâmica dos layouts Plug-ins do iReport
O Futuro
BI - Business Inteligence ●
●
●
●
Integração com ETI (migrar dados operacionais para a DatawareHouse) DatawareHouse) Fontes de dados Multidimensionais Rearranjos do layout e drill down interetivo (Ênfase em servidores de relatórios e visualizadore visualizadoress de relatórios mais sofisticados) É o foco da JasperSoft e do Eclipse BIRT
Demo
Referências ●
jasperreports.sourceforge.net
●
ireport.sourceforge.net
●
openreports.sourceforge.net
●
●
jfreereport.sourceforge.net www.eclipse.org/birt
Perguntas? ●
●
●
Dúvidas:
[email protected] Palestras, Artigos e Apostilas: www.lozano.eti.br Consultoria e Capacitação: www.neki.com.br