14811322 desenvolvendo relatorios profissionais com ireport para netbeans ide

109

Upload: dane-johnson

Post on 01-Jan-2016

53 views

Category:

Documents


27 download

TRANSCRIPT

Page 1: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE
Page 2: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Desenvolvendo Relatórios Profissionais com iReport™

para NetBeans IDE

Edson Gonçalves

Demon

straç

ão

Page 3: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Este livro é dedicado ao Samuel,

filho do Ângelo e de sua esposa Erica,

grandes amigos e agora pais.

Demon

straç

ão

Page 4: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

AGRADECIMENTOSPrimeiramente quero agradecer a minha família, pelo apoio e compreen-

são da minha ausência.

Agradeço o apoio da Editora Ciência Moderna, em especial ao editor Pau-lo André P. Marques, pelo incentivo e crédito em mais este livro.

Um agradecimento especial ao JUG Leader e Founding Java Champion, Daniel deOliveira, pelo apoio que uma comunidade de grande peso como o DFJUG tem sobre meu trabalho.

Demon

straç

ão

Page 5: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

PREFÁCIONem bem havia feito um ano que meu primeiro livro sobre relatórios JasperRe-

ports usando iReport havia sido iniciado e, acompanhando o site oficial da ferra-menta, recebo uma excelente notícia: o iReport irá rodar sobre o NetBeans IDE.

Na prática, isso significa que você, como desenvolvedor, poderá criar, testar e utilizar seus relatórios diretamente na IDE, sem a necessidade de abrir outro aplica-tivo. De fato, isso é um grande salto para as ferramentas gratuitas, que anos atrás, não tinham essa característica.

Embora o iReport permaneça com sua estrutura, praticamente inalterada, hou-veram mudanças visuais para que o mesmo se incorporasse ao NetBeans.

Espero que gostem deste livro tanto quanto gostei de reescrevê-lo.

Demon

straç

ão

Page 6: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

INTRODUÇÃO AO DESENVOLVIMENTO DE RELATÓRIOS COM IREPORT

Em 2001, nasceu o JasperReports, criado por Teodor Danciu, quando teve a ta-refa de avaliar ferramentas de relatórios para um projeto que estava trabalhando. As soluções existentes eram muito caras para o orçamento do projeto e, em uma situação comum no mundo do desenvolvimento, ele decidiu escrever sua própria ferramenta de relatórios, que ao liberá-la para a comunidade, ficou imensamente popular em pouco tempo.

O JasperReports é uma biblioteca escrita em Java, de código fonte open source, projetada para ajudar o desenvolvedor com a tarefa de criar relatórios para aplica-ções, tanto Desktop como Web, fornecendo uma API que facilita sua geração.

Embora o JasperReports tenha simplificado o desenvolvimento de relatórios, o desenvolvedor, além da necessidade de conhecer seu formato XML, utilizado para criar os relatórios, também dependia de cálculos para determinar a posição de cada componente no relatório de forma harmônica.

Em 09 de outubro de 2002, o italiano Giulio Toffoli lançou, de forma indepen-dente, uma ferramenta para gerar relatórios visuais, chamando-a de iReport. Sua característica era de desenvolver relatórios gerando o formato XML no padrão Jas-perReports. Isso tornou mais acessível e intuitivo o uso dos relatórios escritos em JasperReports.

Em 2005, com a popularidade do iReport, a JasperSoft (empresa mantenedora do JasperReports) tornou esta ferramenta oficial na construção de relatórios para o JasperReports.

Com seis anos de existência, o iReport é reescrito para trabalhar dentro do Ne-tBeans IDE, após o seu criador ter visto uma palestra no JavaOne 2007 a respeito de um desenvolvedor que estava criando tal ferramenta para gerar relatórios Jas-perReports.

Demon

straç

ão

Page 7: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

X | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Este livro é a mais que uma orientação, é um guia que o ensinará a utilizar o iRe-port para NetBeans para construir relatórios JasperReports, criando desde os mais simples relatório até os mais sofisticados, utilizando desde uma linguagem SQL até as mais sofisticadas linguagens orientadas a objetos como HQL do Hibernate e EJB QL (Enterprise JavaBeans Query Language), passando por sub-relatórios, relatórios com gráficos, crosstab, passagem de parâmetros e outros.

Também será visto a exportação para diversos formatos suportados pelo Jasper-Reports, como PDF, MS Excel, RTF, ODF, entre outros.

O leitor também aprenderá a chamar seus relatórios através de aplicações desktop e Web criadas unicamente no NetBeans.

Demon

straç

ão

Page 8: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Introdução | XI

QUEM DEVE LER ESTE LIVRO?Este livro foi escrito para desenvolvedores com experiência na linguagem Java,

que possuem pouca ou nenhuma familiaridade com a construção de relatórios, seja em JasperReports com iReport ou com outra ferramenta qualquer neste sentido.

É também desejável que o leitor esteja bem familiarizado tanto com o desen-volvimento desktop Java Swing, como em aplicações Web envolvendo Servlets, JSP e JavaServer Faces. O conhecimento de frameworks Java ORM, como o Hibernate e TopLink, de EJB 3 e IoC, como o Spring, é importante para um melhor aproveita-mento dos exemplos.

ANTES DE COMEÇAREm algumas partes deste livro, você encontrará apenas o trecho do código pro-

duzido, focado no assunto em questão, possuindo uma simbologia indicativa de que o restante não está sendo mostrado. Este símbolo é mostrado a seguir:

... Indica que acima ou abaixo contém mais código, mas que não está sendo exi-bido, sendo necessário recorrer ao exemplo completo, para visualizá-lo na íntegra, que pode ser baixado gratuitamente no site do autor.

OS SOFTWARES REQUERIDOSOs aplicativos criados nesse livro não exigem software proprietário. Portanto ao

longo dos capítulos você não só aprenderá a usá-los, como também onde encontrá-los na Internet, caso precise de uma atualização.

Esse livro não está focado especialmente em um sistema operacional, portanto a sua escolha é livre neste sentido.

Demon

straç

ão

Page 9: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XII | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

HARDWARE REQUERIDO

Uma boa configuração de hardware se faz necessário para trabalhar com apli-cações escritas em Java. Um computador para rodar bem o iReport para NetBeans deve ter as seguintes configurações para uma confortável utilização, segundo o autor:

Processador: Pentium 4 (similar) ou superior

Memória: 512 MB de RAM mínimo (recomendo 2 GB de RAM no uso do NetBe-ans IDE completo)

HD: 100 MB de espaço livre (1GB caso esteja utilizando o NetBeans IDE)

Monitor: 17 polegadas ou superior

CÓDIGOS DOS EXEMPLOS CRIADOS NO LIVRO

Todos os códigos dos exemplos criados se encontram no site do autor: http://www.integrator.com.br.

Caso não encontre algum exemplo entre em contato pelo e-mail [email protected].

Demon

straç

ão

Page 10: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Introdução | XIII

VISÃO GERAL DOS CAPÍTULOSEmbora este livro esteja completamente focado na utilização do iReport para

NetBeans, ainda assim, você terá ao longo desta obra alguns códigos para desenvol-ver. Em grande parte, o código está sendo mostrado apenas no trecho que importa, focado para funcionar em aplicativos. Os exemplos completos estão no SITE do AUTOR, que possui a separação por capítulo, para sua melhor orientação.

O livro é completamente ilustrado, possuindo dezenas de figuras espalhadas ao longo de todos os seus capítulos, incluindo sempre o foco em detalhes, para que você não se perca. Dicas também são dadas para que o leitor possa ter uma melhor compreensão do que está sendo desenvolvido, incluindo os passos para executar cada exemplo.

A seguir, você tem uma sinopse de cada um dos capítulos do livro, incluindo também o apêndice:

CAPÍTULO 1 - CONHECENDO O IREPORT PARA NETBEANS IDEO iReport para NetBeans IDE é um programa Open Source, capaz de criar visual-

mente os mais complexos relatórios para aplicações Java no formato da biblioteca JasperReports.

Através de uma interface gráfica intuitiva, o desenvolvedor é capaz de criar qual-quer tipo de relatório de forma simples e rápida. Mesmo sabendo que o iReport desenvolve um formato XML usado pelo JasperReports, o que não é difícil de ma-nipular, há uma vantagem em usar esta ferramenta. Se o desenvolvedor é um usuá-rio iniciante no formato XML do JasperReports, o iReport supre suas necessidades evitando que seja necessário fazer modificações no código fonte. Caso seja expe-riente neste formato, o iReport minimiza o tempo na criação dos mais complexos relatórios.

Neste capítulo você aprenderá onde obter, os requerimentos necessários para executar, como instalar e entender sobre algumas das mais importantes caracterís-ticas do iReport.

Demon

straç

ão

Page 11: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XIV | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

CAPÍTULO 2 - INICIANDO NO IREPORT PARA NETBEANS

O iReport é uma ferramenta que está preparada para construir visualmente os mais complexos relatórios dentro dos limites do JasperReports.

Embora o primordial de iReport seja de desenhar relatórios, existem também suas características para configurações.

Este capítulo o introduzirá ao desenvolvimento básico de relatórios usando o iReport para NetBeans, partindo de sua execução inicial e suas configurações bási-cas.

CAPÍTULO 3 - ESTRUTURA DE UM RELATÓRIO E SEU DESENVOLVIMENTO

Um relatório é uma maneira agradável de apresentar as informações vindas de alguma base de dados com sua aparência formatada. Na maioria das vezes, relató-rios são usados para agrupar as informações vindas de um conjunto de dados, rela-cionados entre si, oriundos de diversas tabelas. Como resultado você tem apenas os campos determinados na construção do seu relatório e exposto como tal de forma a simplificar a compreensão das informações. Vindo em um formato padronizado para imprimir, como um texto feito em um editor de textos, você só precisa mandar para a impressão ou exportá-los para outro formato de uso maior.

Neste capítulo você irá conhecer a estrutura de um relatório JasperReports na ferramenta iReport para NetBeans e suas propriedades.

CAPÍTULO 4 - CRIANDO UM RELATÓRIO SEM O USO DE ASSISTENTES

Para uma maior compreensão dos diversos elementos que compõem um relató-rio no JasperReports, através do iReport para NetBeans, é importante a um desen-volvedor aprender a desenhá-lo manualmente, isto é, sem o uso de assistentes.

Demon

straç

ão

Page 12: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Introdução | XV

Neste capítulo você irá aprender a criar um relatório manualmente, adicionando diversos elementos, configurando-os e trabalhando com banco de dados.

CAPÍTULO 5 - GERANDO RELATÓRIOS COM GRUPOS E PASSAGEM DE PARÂMETROS

Os relatórios mais utilizados em aplicações, com toda certeza, são os dinâmi-cos. Aqueles relatórios que transmitimos uma determinada informação e este nos trazem determinados dados.

Neste capítulo você aprenderá a criar um relatório mais complexo, utilizando mais de uma entidade (tabela) no desenvolvimento, agrupando informações e fil-trando-as através de parâmetros.

CAPÍTULO 6 - CHAMANDO O RELATÓRIO POR UMA APLICAÇÃO DESKTOP

Assim como criar um relatório, é muito fácil chamá-lo por uma aplicação. Este capítulo utilizará uma aplicação desktop simples, com interface gráfica Swing, cria-da no NetBeans IDE, apenas com o intuito de ensiná-lo a chamar sua aplicação.

CAPÍTULO 7 - SUB-RELATÓRIOS

Os sub-relatórios são relatórios dentro de outros, também conhecidos como relatórios do tipo “mestre-detalhe”.

A idéia básica para a criação de um relatório mestre-detalhe é ter duas entidades relacionadas.

Estes relatórios, embora possam parecer complexos, são simples de desenvolver em JasperReports.

Demon

straç

ão

Page 13: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XVI | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Neste capítulo você aprenderá a criar sub-relatórios em seus relatórios usando o iReport para NetBeans e acesso a dados, conhecerá a band noData na prática e depois o chamará através de uma aplicação Web com JSP e Servlets.

CAPÍTULO 8 - RELATÓRIOS COM HIBERNATE

Criar relatórios com o uso do Hibernate como camada de acesso a banco de dados é um caso comum no desenvolvimento de aplicações Web.

O Hibernate é hoje o mais popular projeto de gerenciamento de dados per-sistentes em Java e também o que possui uma gama de soluções para problemas comuns.

Neste capítulo você aprenderá a desenvolver seus relatórios utilizando o Hiber-nate para acessar os dados, incluindo um exemplo com sub-relatório.

CAPÍTULO 9 - RELATÓRIOS USANDO EJB QLO uso de Java Persistence API se tornou muito intenso, e como não poderia

deixar de ser, o JasperReports possui suporte a esta especificação através de EJB QL. Esta linguagem de queries possui uma semelhança à HQL do Hibernate e também a tradicional instrução SQL.

Com a especificação do EJB3, na introdução da JPA, Java Persistence API, ficou muito popular o uso de JPQL, Java Persistence Query Language, que é uma é uma extensão da EJB QL (Enterprise JavaBeans Query Language).

Neste capítulo você vai aprender a configurar um arquivo de persistência e criar um relatório com sub-relatório utilizando a EJB QL.

Demon

straç

ão

Page 14: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Introdução | XVII

CAPÍTULO 10 - GERANDO RELATÓRIOS COM OUTRAS FONTES DE DADOS

O JasperReports é rico no fornecimento de outras fontes de dados acessíveis para que possamos gerar relatórios.

Muitos sistemas costumam exportar diversos tipos de dados, sendo os mais comuns o formato CSV e XML.

Este capítulo tratará de outras formas de acesso que não utilizam um banco de dados diretamente.

CAPÍTULO 11 - SIMPLIFICANDO RELATÓRIOS COM GROOVY

Groovy é uma linguagem dinâmica escrita para a plataforma Java, inspirada em linguagens como Ruby, Python e Smalltalk. Embora seja simples de manipular e mui-to similar as linguagens de scripting, Groovy é um pouco mais complexo. Aplicações com Groovy podem ser pré-compiladas em bytecodes Java, para ser integrada à suas aplicações Java.

Graças a um Java Specification Request (JSR-241), Groovy se tornou a segunda linguagem oficial padrão do Java Virtual Machine (JVM), depois de Java, claro.

Desde a versão 0.6.6 do JasperReports, há suporte a linguagem Groovy. Com isso, quem ganha é o desenvolvedor, que tem em suas mãos uma maior simplicida-de no desenvolvimento de expressões em seus relatórios.

Neste capítulo você vai construir um relatório utilizando Groovy, trabalhando com expressões e aprenderá como rodar o relatório criado em suas aplicações tam-bém usando Groovy.

Demon

straç

ão

Page 15: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XVIII | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

CAPÍTULO 12 - CRIANDO GRÁFICOS E SUBDATASET EM SEUS RELATÓRIOS

Como todo bom relatório, não poderia faltar os gráficos. Simples e eficazes, os gráficos exibem uma situação visualmente impactante, possibilitando um entendi-mento muito maior, mais rico, do que apenas números e textos.

O JasperReports possui suporte a geração de gráficos, facilitando o desenvolvi-mento do relatório, através da biblioteca JFreeChart.

Neste capítulo será apresentado como criar gráficos em um relatório JasperRe-ports usando o iReport para NetBeans, além de aprender a trabalhar com consultas diferentes no mesmo relatório, o que chamamos de Subdataset.

CAPÍTULO 13 - INTERNACIONALIZANDO RELATÓRIOS Aplicações internacionalizadas são muito comuns no mundo do desenvolvimen-

to. Não seria diferente no caso dos relatórios. O JasperReports introduziu esta ca-racterística na versão 0.6.2 e desde então seu suporte foi acrescentado ao iReport, facilitando mais ainda seu desenvolvimento.

Neste capítulo será criada uma aplicação Java desktop simples, pelo NetBeans, para ser usada com um relatório internacionalizado gerado pelo iReport.

CAPÍTULO 14 - CROSSTABS

Crosstabs (cross-tabulation), no JasperReports, são tabelas cruzadas, comuns no desenvolvimento de relatórios com a utilização de planilhas eletrônicas, também conhecidas por tabelas dinâmicas ou tabelas de referências cruzada.

Diferente dos demais relatórios criados até o momento no livro, um relatório crosstab possui uma tabela contendo um número de linhas e colunas que não se conhece em tempo de design.

Demon

straç

ão

Page 16: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Introdução | XIX

Graças ao iReport, você pode contar com o uso de um assistente, tornando esta tarefa não muito complicada.

Neste capítulo você aprenderá a criar crosstabs no iReport, modificar, formatar e usar também subdatasets para relatórios mais complexos.

CAPÍTULO 15 - OUTRAS CARACTERÍSTICAS DA GERAÇÃO DE RELATÓRIOS

Neste capítulo você conhecerá outras características da ferramenta iReport, além do JasperReports, que não foram apresentadas até o momento, sendo passadas em formato de dicas, como adicionar um trecho da query em um relatório, minimizar o consumo de memória, imagem de fundo no relatório e outras.

CAPÍTULO 16 - SCRIPTLET

Um scriptlet é uma classe Java desenvolvida unicamente para executar durante a geração da impressão do relatório na tela. O scriptlet possui métodos que são invocados na geração de relatórios possibilitando manipulá-los, como a ocorrência da criação de uma nova página ou o acesso a um determinado parâmetro.

Neste capítulo será visto como escrever um simples scriptlet, qual a sua utilida-de e como usá-lo em seu relatório.

CAPÍTULO 17 - DESENVOLVENDO SEUS PRÓPRIOS TEMPLATES

Quando usamos um assistente de criação de relatórios, na última etapa fazemos uso de templates. Algumas vezes pode ser útil criar um ou vários templates para usar no assistente.

Neste capítulo você vai aprender a criar seus próprios templates e utilizá-los no iReport.

Demon

straç

ão

Page 17: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XX | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

APÊNDICE A - EXPORTANDO PARA OUTROS FORMATOS

Este apêndice é uma referência sobre a API do JasperReports na exportação para outros formatos através de sua aplicação, seja desktop ou Web.

Os formatos discutidos aqui são os mais utilizados para exportação pelo Jasper-Reports: RTF, XLS, CSV, HTML e ODF.

PARA DOWNLOAD: APÊNDICES B, C, D E EPara Download, veja “CÓDIGOS DOS EXEMPLOS CRIADOS NO LIVRO”, além dos

arquivos referentes aos exemplos contidos no livro, há também os seguintes apên-dices:

APÊNDICE B – O MYSQL

APÊNDICE C – CONTEXTO DE DESENVOLVIMENTO WEB EM JAVA

APÊNDICE D – TRABALHANDO COM DATAS EM JAVA

APÊNDICE E – O TOMCAT

Demon

straç

ão

Page 18: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

SUMÁRIO

Capítulo 1 - Conhecendo o iReport para NetBeans IDE ........................................... 1Antes de utilizar o iReport para NetBeans IDE .............................................. 3Obtendo e instalando o Java SE .................................................................... 3A instalação no Windows ..............................................................................4Em Windows versão 9x .................................................................................5A instalação no Linux ....................................................................................5Obtendo e instalando o iReport para NetBeans IDE ..................................... 7Algumas características do iReport para NetBeans IDE ................................. 8 Instalando o iReport ....................................................................................9No Windows com instalador .........................................................................9No Windows e Linux sem instalador ........................................................... 10Como instalar o plug-in iReport for NetBeans ............................................. 10Compilando o fonte do iReport para NetBeans .......................................... 11

Capítulo 2 - Iniciando no iReport para NetBeans ................................................... 13Abrindo o iReport para NetBeans pela primeira vez ......................................... 15Um relatório com iReport para NetBeans ......................................................... 16

O banco de dados usado .............................................................................16O primeiro relatório no iReport para NetBeans na versão Standalone ....... 17Visualizando o primeiro relatório ............................................................... 21

Configurando o iReport para NetBeans ............................................................ 21A compilação do iReport para NetBeans no preview ........................................ 22A versão do iReport para NetBeans como plug-in ............................................ 22

O arquivo de propriedades do iReport como plug-in .................................. 23Abrindo um relatório no iReport para NetBeans ......................................... 23iReport para NetBeans em inglês ................................................................ 24

Capítulo 3 - Estrutura de um relatório e seu desenvolvimento .............................. 25A estrutura do relatório ....................................................................................27

Title .............................................................................................................29Page Header ................................................................................................29Column Header ...........................................................................................30Detail ...........................................................................................................30

Demon

straç

ão

Page 19: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XXII | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Column Footer ............................................................................................31Page Footer .................................................................................................31Last Page Footer ..........................................................................................32Summary .....................................................................................................32Background .................................................................................................33noData .........................................................................................................33

Compreendendo as propriedades de um relatório ........................................... 33Dimensões de um relatório .........................................................................34

Capítulo 4 - Criando um relatório sem o uso de assistentes .................................. 45Iniciando um relatório manualmente .......................................................... 47A janela Palette ............................................................................................47Adicionando uma conexão a um relatório vazio ......................................... 49Criando a query do relatório .......................................................................51Os elementos da query registrados no JasperReports ................................ 55Desenhando o relatório ...............................................................................56Os símbolos para exibir o formato de números .......................................... 63Conhecendo melhor o Text Field ................................................................ 64Criando o efeito zebra em seu relatório ..................................................... 65Estilos no JasperReports ..............................................................................67Exibindo imagens em seu relatório ............................................................. 68Um pouco mais sobre o elemento image .................................................... 69Adicionando links em elementos ................................................................ 74Contando registros e exibindo na band Summary ...................................... 77Salvando em outros formatos .....................................................................78

Capítulo 5 - Relatórios com grupos e passagem de parâmetros ............................ 79O relatório que será desenvolvido .............................................................. 81Gerando o relatório .....................................................................................81Criando a query do relatório .......................................................................83Criando o grupo ..........................................................................................85No arquivo JasperReports ............................................................................86Adicionando os elementos na band PedidoGroupHeader ........................... 87Padrões para datas ......................................................................................88Criando variáveis com cálculos .................................................................. 89Adicionando os elementos na band detail ................................................. 90

Demon

straç

ão

Page 20: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Sumário | XXIII

Totalizando por pedido ..............................................................................92Finalizando a aparência do relatório ........................................................... 93Adicionando parâmetros ao relatório ......................................................... 94

Capítulo 6 - Chamando o relatório por uma aplicação desktop ............................. 97A aparência final do aplicativo ....................................................................99As bibliotecas necessárias para obter o relatório ...................................... 100A biblioteca JDBC para a conexão com o banco de dados ........................ 100O projeto no NetBeans IDE para executar o relatório ............................... 101Executando o relatório ..............................................................................103Executando o projeto ................................................................................111

Capítulo 7 - Sub-relatórios....................................................................................113O relatório mestre-detalhe que será desenvolvido ................................... 115Criando e configurando o relatório principal ............................................ 116Gerando a query ........................................................................................117Definindo a posição dos campos ............................................................... 118O formato para a exibição do número de páginas .................................... 120Adicionando conteúdo na band noData .................................................... 120Gerando o sub-relatório ............................................................................121Configurando a aparência do sub-relatório ............................................... 121Modificando a query do sub-relatório ....................................................... 123Adicionando o sub-relatório ao relatório .................................................. 124No arquivo JasperReports ..........................................................................125Alterando as propriedades do sub-relatório ............................................. 127Retornando valores do sub-relatório ......................................................... 128Chamando o relatório por uma aplicação web ........................................ 131Criando marcadores para o relatório em PDF ........................................... 137

Capítulo 8 - Relatórios com Hibernate .................................................................141O Hibernate ...............................................................................................143Criando um projeto usando Hibernate no NetBeans IDE .......................... 144As bibliotecas do JasperReports e MySQL JDBC ........................................ 145Criando as entidades .................................................................................145Mapeando as tabelas .................................................................................147Configurando o Hibernate .........................................................................151

Demon

straç

ão

Page 21: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XXIV | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Compilando o projeto ...............................................................................154Sobre Hibernate Annotations no iReport .................................................. 154Configurando o Hibernate no iReport para NetBeans ............................... 154Criando a conexão com o Hibernate no iReport para NetBeans ............... 155Desenvolvendo o relatório ........................................................................156Criando um relatório com sub-relatório usando Hibernate ...................... 157A aplicação usando o Hibernate ................................................................ 161Finalizando o projeto no NetBeans com Hibernate e o relatório criado .. 162Relatório usando o Hibernate através do Spring ...................................... 167

Capítulo 9 - Relatórios usando EJB QL ..................................................................169O conceito da API de persistência ............................................................. 171Sobre Java Annotations .............................................................................172Criando as entidades .................................................................................173O relacionamento ......................................................................................178Onde encontrar o TopLink .........................................................................182Criando a conexão EJBQL no iReport ........................................................ 182Desenvolvendo o relatório ........................................................................183O sub-relatório ..........................................................................................186Adicionando o sub-relatório ao relatório mestre ...................................... 188Adicionando o parâmetro especial para manter a sessão ......................... 188Selecionando apenas alguns objetos com EJB QL ..................................... 190Como visualizar um relatório com EJB QL no seu aplicativo ..................... 191Alterando o relatório para utilizar no projeto do NetBeans IDE ............... 192Finalizando o projeto no NetBeans IDE .................................................... 192

Capítulo 10 - Gerando relatórios com outras fontes de dados ............................ 197Usando XML para criar relatórios .............................................................. 199Criando um relatório com XML .................................................................199Relatórios com XML remoto ......................................................................204Usando CSV para criar relatórios ............................................................... 204Registrando os campos de um arquivo CSV .............................................. 206Relatórios sem fonte de dados ..................................................................207Relatórios usando JavaBeans como fonte de dados .................................. 208Relatórios usando uma fonte de dados personalizada .............................. 213

Demon

straç

ão

Page 22: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Sumário | XXV

Capítulo 11 - Simplificando relatórios com Groovy .............................................. 219Criando um relatório usando Groovy ........................................................ 221Iniciando o desenvolvimento do relatório ................................................ 221O design do relatório ................................................................................223Resultado final do relatório com Groovy ................................................... 226Chamando seu relatório com Groovy ........................................................ 226Criando um projeto no NetBeans com Groovy ......................................... 226

Capítulo 12 - Criando gráficos e subdataset em seus relatórios .......................... 231Criando um gráfico simples .......................................................................233Links em seu gráfico ..................................................................................238Subdatasets ...............................................................................................238Utilizando Subdatasets em seu gráfico ..................................................... 241Gráficos de linhas ......................................................................................244Utilizando Gráficos em um relatório com Hibernate ................................ 248

Capítulo 13 - Internacionalizando relatórios ........................................................ 249Criando seu relatório internacionalizado .................................................. 251

Capítulo 14 - Crosstabs .........................................................................................257Criando seu primeiro relatório Crosstab ................................................... 259No JasperReports .......................................................................................263Compreendendo a disposição da Crosstab ............................................... 263Modificando uma célula na Crosstab ........................................................ 264Adicionando grupos de linhas e colunas ................................................... 265Compreendendo as Measures ...................................................................268Criando uma Crosstab com Subdataset ..................................................... 269

Capítulo 15 - Outras características da geração de relatórios .............................. 275Tratando relatórios grandes ......................................................................277Trechos SQL no relatório ...........................................................................279Adicionando uma imagem de fundo ......................................................... 280Exibindo somente um grupo por página ................................................... 281Reiniciando o número de páginas ............................................................. 281Alinhamento de objetos no design do relatório ....................................... 281Formatação entre textos no seu relatório ................................................. 281

Demon

straç

ão

Page 23: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

XXVI | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Data atual no relatório ..............................................................................284Stored Procedures e Functions ..................................................................284Erros na compilação ..................................................................................284

Capítulo 16 - Scriptlet ..........................................................................................287A classe JRAbstractScriptlet .......................................................................289Um exemplo da utilização de Scriptlets .................................................... 292A classe Scriptlet .......................................................................................293O projeto no NetBeans para usar Scriptlet em um relatório ..................... 295Desenvolvendo o relatório ........................................................................296A conexão com o arquivo CSV ...................................................................296Adicionando o scriptlet ao relatório ......................................................... 297Criando as variáveis do relatório ............................................................... 298Editando a query do relatório ...................................................................299Criando o design do relatório ...................................................................299Como evitar valores repetidos em um relatório ........................................ 301Forçando o valor a aparecer ao menos uma vez em cada página ............. 301Criando métodos personalizados com Scriptlets ...................................... 302

Capítulo 17 - Desenvolvendo seus próprios Templates ........................................ 303Criando um relatório modelo ....................................................................305Configurando o template criado no iReport ............................................. 307O uso do template no assistente do iReport ............................................. 308Imagem de preview do template no assistente ......................................... 308

Apêndice - Exportando para outros formatos ................................................. 311Exportando para o formato RTF ................................................................ 313Exportando para o formato Excel .............................................................. 313Exportando para HTML .............................................................................314Exportando para CSV ................................................................................314Exportando para ODF ................................................................................315

Demon

straç

ão

Page 24: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Sumário | XXVII

Bibliografia ......................................................................................................317Livros Nacionais ..............................................................................................319Livros Internacionais .......................................................................................319Sites ................................................................................................................319Acesso para pesquisa ......................................................................................320Tutoriais ..........................................................................................................320

Demon

straç

ão

Page 25: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

1CONHECENDO O IREPORT PARA

NETBEANS IDE

“Começar já é metade de toda a ação.”provérbio grego

Demon

straç

ão

Page 26: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 1 | 3

O iReport para NetBeans IDE é um programa Open Source, capaz de criar visual-mente os mais complexos relatórios para aplicações Java no formato da biblioteca JasperReports.

Através de uma interface gráfica intuitiva, o desenvolvedor é capaz de criar qual-quer tipo de relatório de forma simples e rápida. Mesmo sabendo que o iReport desenvolve um formato XML usado pelo JasperReports, o que não é difícil de ma-nipular, há uma vantagem em usar esta ferramenta. Se o desenvolvedor é um usuá-rio iniciante no formato XML do JasperReports, o iReport supre suas necessidades evitando que seja necessário fazer modificações no código fonte. Caso seja expe-riente neste formato, o iReport minimiza o tempo na criação dos mais complexos relatórios.

Neste capítulo você aprenderá onde obter, os requerimentos necessários para executar, como instalar e entender sobre algumas das mais importantes caracterís-ticas do iReport.

ANTES DE UTILIZAR O IREPORT PARA NETBEANS IDEO iReport para NetBeans IDE, por ser uma ferramenta Java, precisa do Sun Java

2 SDK 1.5 instalado em sua máquina, ou superior. Perceba que não é apenas a JVM (Java Virtual Machine) que deve estar instalada. Isso porque, para compilar os arqui-vos jasper, é necessária a instalação da distribuição do Java SE, sendo impossível somente com a JRE (Java Runtime Environment).

OBTENDO E INSTALANDO O JAVA SEAtualmente, o JDK (Java ™ SE Development Kit) está em sua versão 6 e possui

suporte para as seguintes plataformas:

Microsoft Windows

Linux

Sun Solaris

Mac Os

Entre outros

Demon

straç

ão

Page 27: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

4 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

A página Web oficial sobre a linguagem Java da Sun se encontra no endereço http://java.sun.com.

A Sun publica periodicamente releases do JDK e costuma numerá-los através do que chamam atualmente de updates.

Para obter o Kit de Desenvolvimento Java, que até o momento em que este livro é escrito está na versão 6 update 6 (JDK 6u6), conhecido como Java SE 6.0, acesse o endereço: http://java.sun.com/javase/downloads/index.jsp.

Na página de download do Java SE 6.0, existem vários produtos para download. Logo a seguir há uma descrição de alguns dos produtos do qual você encontra para download:

• JDK 6 Update 6 – Este é o kit de desenvolvimento Java. Este kit consiste em um compilador (javac), uma ferramenta de execução (java), uma ferramenta para geração de documentação (javadoc), um conjunto de bibliotecas prontas para o uso e etc.

• Java Runtime Environment (JRE) 6 Update 6 – Este é o ambiente runtime do Java, usado apenas para executar os programas feitos em Java.

• Java SE 6 Documentation – A documentação do J2SE. Esta documentação contém as informações sobre todas as bibliotecas do Java.

Clique no botão-link Download. Para efetuar o download do JDK, você deve aceitar os termos de uso do Java SE, clicando na opção “Accept”. Após a página recarregar, haverá a possibilidade de baixar a versão que você precisa para a sua pla-taforma. Observe que na página de Downloads existem diversos Java SE. Existe Java SE para a plataforma Windows, Linux, Solaris SPARC, Solaris x86 e Linux AMD64. Efetue o download do Java SE para o seu sistema operacional clicando sobre o link do produto que utilizará para instalação.

A INSTALAÇÃO NO WINDOWS

Tendo em vista que o Windows no qual será descrito está na versão XP ou supe-rior, inicie o assistente com um duplo clique sobre o arquivo executável, que como tantos outros desta plataforma, basta avançar até concluir.

Para configurar qualquer variável de ambiente em um sistema Windows na ver-são NT, você deve entrar no Painel de Controle, Sistema e na guia Avançado clique no botão Variáveis de Ambiente.

Demon

straç

ão

Page 28: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 1 | 5

As variáveis de ambiente são seqüências de caracteres que contêm informações como unidade, caminho ou nome de arquivo. As variáveis de ambiente controlam o comportamento de vários programas. Como exemplo de variáveis de ambiente: PATH, CLASSPATH, USER, TEMP, JAVA_HOME e etc.

Estas variáveis de ambiente são utilizadas por muitos programas, para definir um espaço em memória principal (RAM), onde alguns processamentos serão exe-cutados

Em Variáveis do sistema, clique em Nova. Adicione o nome da variável como JAVA_HOME e no valor o caminho onde você instalou o JDK.

A variável JRE_HOME é similar a anterior, mudando apenas para o valor onde se encontra a máquina virtual Java.

Na variável PATH, você tem que adicionar a variável JAVA_HOME, acrescida do caminho para os binários. Após o último valor, coloque um ponto-e-vírgula (“;”) e adicione %JAVA_HOME%\bin.

Ao confirmar as caixas de diálogo, teste se o Java está funcionando na sua má-quina em um prompt de comando, como mostrado a seguir:

java -version

EM WINDOWS VERSÃO 9X

Você deve editar o arquivo autoexec.bat, encontrado em C:\autoexec.bat e adi-cionar as variáveis como o exemplo a seguir:

set JAVA_HOME= C:\jdk1.6.0_06

Onde o local indicado no exemplo, é onde você tem instalado o JDK.

A INSTALAÇÃO NO LINUX

No momento em que este livro está sendo escrito, a versão baixada para o siste-ma operacional Linux é a jdk-6u6-linux-i586.bin.

Demon

straç

ão

Page 29: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

6 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Entre no terminal do seu Linux, após baixar o arquivo, e mude para o usuário Root ou administrativo do sistema e altere a permissão do arquivo para executável, assim você poderá instalá-lo:

shell# chmod +x jdk-6u6-linux-i586.bin

Execute o arquivo:shell# ./jdk-6u6-linux-i586.bin

Assim como ocorre em sistemas operacionais Windows, você terá um assistente para instalação, só que com a diferença de não ser gráfico.

Entre no arquivo profile em /etc/profile e adicione as linhas em seu final:

JAVA_HOME=/jdk1.6.0_06JRE_HOME=/jdk1.6.0_06/jreexport JAVA_HOMEexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/libexport MANPATH=$MANPATH:$JAVA_HOME/man

As variáveis usadas são explicadas rapidamente a seguir, dando a você noção do que cada uma faz:

JAVA_HOME - Diretório onde a JDK está instalada

JRE_HOME - Diretório onde a máquina virtual está instalada

PATH - Diretório dos executáveis, onde inclui o do Java

CLASSPATH - Diretório das libs

MANPATH - Diretório do manual, acessível por man javac.

Faça logout no sistema e logon e execute no terminal o seguinte comando:

java -version

Surgindo as informações mostradas a seguir, a instalação foi feita com sucesso.

java version “1.6.0_06”Java(TM) SE Runtime Environment (build 1.6.0_06-b02)

Demon

straç

ão

Page 30: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 1 | 7

Figura 1.1 – Verificando a versão de instalação do Java no Linux

OBTENDO E INSTALANDO O IREPORT PARA NETBEANS IDEPara baixar o iReport para NetBeans IDE, entre no endereço oficial http://www.

jasperforge.org/ireport ou http://ireport.sourceforge.net/. Até o momento em que este livro é escrito a versão atual do iReport para NetBeans IDE está em 3.1.2. Esta versão tem suporte completo ao JasperReports 3.1.2.

Clique no link Download iReport para ser redirecionado ao SourceForge.net, onde está alocado para baixar. Clique no item iReport-nb-3.1.2 e confirme no botão Browse Package. Copie o link existente em Location e o cole na barra de endere-ços.

Se você estiver usando o sistema operacional Microsoft Windows, baixe a versão iReport-nb-3.1.2-windows-installer.exe, ao qual inclui um instalador, ou o arquivo iReport-nb-3.1.2.zip, sem instalador. Para os demais sistemas operacionais, incluin-do Linux, baixe a versão iReport-nb-3.1.2.tar.gz. O código fonte pode ser encontra-do baixando-se o arquivo iReport-nb-3.1.2-src.zip.

Se estiver utilizando o NetBeans e desejar apenas incluir o plug-in, selecione iReport Plugin for NetBeans e baixe o arquivo iReport-nb-3.1.2-plugin.zip.

Atenção: As explicações neste tópico estão atreladas a versão atual do site, no momento em que este livro é escrito.

Demon

straç

ão

Page 31: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

8 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

ALGUMAS CARACTERÍSTICAS DO IREPORT PARA NETBEANS IDEO iReport possui diversas características que o tornam uma ferramenta de de-

senvolvimento de relatórios profissional, no mesmo padrão de outros do mesmo tipo consagrados pelo mundo do desenvolvimento. A seguir você tem algumas de suas principais características que fazem deste programa visual o Oficial para desen-volvimento de relatórios JasperReports:

• Suporte a 100% das tags XML do JasperReports;

• Editor WYSIWYG para criação de relatórios, possuindo ferramentas que in-cluem desenhos de retângulos, linhas, elipses, caixas de texto, rótulos, gráfi-cos, sub-relatórios, códigos de barras e etc.;

• Um editor para escrever as expressões incluindo destaques (highlights) nas sintaxes;

• Suporte para Unicode e línguas não latinas como: Russo, Chinês, Japonês, Coreano entre outras;

• Integração para compilar e exportar;

• Suporte para todos os bancos de dados acessíveis pela ponte JDBC;

• Suporte virtual para todos os tipos de DataSources;

• Assistentes para criar relatórios rapidamente;

• Suporte para sub-relatórios;

• Backup para o código fonte;

• Suporte para modelos de documentos (templates);

• Suporte para fontes TrueType;

• Extensão através de plug-ins;

• Suporte integrado para scriptlets;

• Suporte a gráficos;

• Gerenciamento de bibliotecas de objetos padrão tais como numeração de páginas;

• Arrastar e Soltar (Drag’n Drop);

• Ilimitados Desfazer e Refazer;

• Biblioteca de estilos e etc.

Demon

straç

ão

Page 32: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 1 | 9

INSTALANDO O IREPORT

Como há mais de uma forma de instalar o iReport para NetBeans, você verá to-das aqui. A primeira forma de instalação que será mostrada é no sistema operacio-nal Windows com o assistente. A segunda forma será sem o uso de assistente, neste caso tanto no sistema operacional Windows como no Linux será mostrada.

A última forma será no NetBeans IDE, em forma de plug-in.

NO WINDOWS COM INSTALADOR

O assistente para instalar o iReport para NetBeans no Windows é similar aos demais utilizados em outros programas neste sistema operacional. Dê um duplo clique no arquivo iReport-nb-3.1.2-windows-installer.exe para iniciar o processo de instalação pelo assistente.

1. Na primeira etapa você tem a tela inicial do iReport nb-3.1.2. Clique no botão Next para prosseguir.

2. Na segunda etapa do assistente você deve aceitar a licença de uso do iReport nb-3.1.2. Caso você não conheça a licença GNU (General Public License), reco-mendo lê-la antes de prosseguir. Clique no botão I Agree para continuar.

3. Na terceira etapa você define os componentes que serão instalados. Como no caso há apenas um, clique no botão Next para prosseguir.

4. A quarta etapa é o local onde será instalado o iReport. Por padrão ele é de-finido dentro do diretório JasperSoft\iReport-nb-3.1.2 em Arquivos de pro-gramas do seu sistema operacional Windows. Caso precise mudar, clique no botão Browse e selecione o novo local em que deseja instalar. Para prosseguir, clique no botão Next.

5. No quinto passo você define o local de acesso no menu Iniciar do Windows. Caso concorde com a atual configuração, basta clicar no botão Install para iniciar o processo de instalação. Caso deseje alterar o acesso, basta digitar no local selecionado, em JasperSoft\iReport-nb-3.1.2.

6. Após a instalação, a opção Run iReport nb-3.1.2 estará selecionada. Clicando no botão Finish, abrirá imediatamente o iReport para trabalhar. O instalador também criará um atalho na área de trabalho para acesso rápido ao programa, através do arquivo iReport.exe.

Demon

straç

ão

Page 33: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

10 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Atenção: O instalador cria, além do arquivo ireport.exe, um arquivo chamado ire-port_w.exe, que inicializa o iReport para NetBeans com o prompt de comando.

NO WINDOWS E LINUX SEM INSTALADOR

Caso você prefira a versão sem instalador, existem os dois arquivos compacta-dos iReport-nb-3.1.2.zip (recomendável para o sistema operacional Windows) ou iReport-nb-3.1.2.tar.gz (para o sistema operacional Linux). Descompacte o de sua preferência em um local desejado.

No Linux, você deve executar antes o comando para descompactação:

shell# tar –xpvzf iReport-nb-3.1.2.tar.gz

Ao descompactar o iReport, entre no diretório e execute a permissão de execução:

shell# cd iReport-nb-3.1.2/shell# chmod +x ireport

Para o Windows existem os arquivos ireport.exe e ireport_w.exe para inicializar, bastando um duplo clique. No sistema operacional Linux, basta entrar no terminal e executar o Shell, como mostrado a seguir:

shell# ./ireport

COMO INSTALAR O PLUG-IN IREPORT FOR NETBEANS

Caso já exista o NetBeans IDE instalado em sua máquina, não há a necessidade de instalação separada do iReport.

O plug-in do iReport se integra a ferramenta, suavizando o trabalho com seus aplicativos sem necessitar abrir outra IDE para criar relatórios.

Baixe o arquivo iReport-nb-3.1.2.nbms.zip para obter apenas o plug-in e des-compacte-o.

Para o exemplo, será instalado o plug-in no NetBeans IDE 6.5 beta, a versão mais atual no momento em que este livro é escrito.

Demon

straç

ão

Page 34: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 1 | 11

1. No seu NetBeans IDE, vá ao menu Tools>Plugins e clique na guia Downloaded.

2. Clique no botão Add Plugins e selecione todos os arquivos encontrados na descompactação do iReport-nb-3.1.2.nbms.zip.

Figura 1.2 – Selecionando os arquivos do plug-in iReport for NetBeans

3. Clique no botão Install para iniciar a instalação do plug-in na ferramenta.

4. Ao surgir a caixa de diálogo NetBeans IDE Installer clique em Next. Aceite os termos de licença em I accept the terms in all of the license agreements e confirme no botão Install.

Se a caixa de diálogo Verify Certificate surgir, apenas clique em Continue para prosseguir com a instalação do plug-in.

Após a instalação, você encontra o plug-in ireport-designer, na guia Installed.

COMPILANDO O FONTE DO IREPORT PARA NETBEANS

O projeto do iReport para NetBeans foi criado na versão 6.0 da ferramenta Ne-tBeans IDE. Isso significa que você deve baixar esta versão para abrir o projeto e, somente então, compilá-lo.

Demon

straç

ão

Page 35: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

12 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

A versão do NetBeans utilizado está no arquivo platform.properties, expandin-do iReport>Important Files, dando um duplo clique em NetBeans Platform Config. A última linha, mais especificamente em nbplatform.active, antes de compilar, deve ter o valor substituído para default.

Para compilar, clique com o direito do mouse sobre iReport, na janela Projects, e selecione Build ZIP Distribution, no menu de contexto. No source do iReport, surgirá um arquivo “zipado” dentro do diretório dist.

Figura 1.3 – Projeto do iReport aberto no NetBeans IDE 6.0

Demon

straç

ão

Page 36: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

2INICIANDO NO IREPORT PARA

NETBEANS

“Especialize-se em um setor determinado e procure conhecer mais sobre ele que qualquer outra pessoa“.

Joseph Murphy

Demon

straç

ão

Page 37: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 2 | 15

O iReport é uma ferramenta que está preparada para construir visualmente os mais complexos relatórios dentro dos limites de JasperReports.

Embora o primordial de iReport seja de desenhar relatórios, existem também suas características para configurações.

Este capítulo o introduzirá ao desenvolvimento básico de relatórios usando o iRe-port para NetBeans, partindo de sua execução inicial e suas configurações básicas.

ABRINDO O IREPORT PARA NETBEANS PELA PRIMEIRA VEZQuando o iReport executa pela primeira vez ele carrega informações de con-

figurações regionais de seu sistema operacional e cria um diretório chamado de .ireport no diretório do usuário em home no Linux, em Document and Settings de seu Windows XP ou AppData\Roaming no seu usuário em Windows Vista. Neste diretório você encontra diversos arquivos.

Figura 2.1 – Símbolo do iReport

Suas configurações pessoais e as configurações do programa estão gravados neste diretório, em seu arquivo ireport.properties, dentro de .ireport/dev/config/Preferences/com/jaspersoft.

Atenção: Se não for criado o diretório .ireport, alguns problemas indesejáveis podem ocorrer na execução do programa, além da impossibilidade de gravação das configurações personalizadas.

Demon

straç

ão

Page 38: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

16 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

UM RELATÓRIO COM IREPORT PARA NETBEANSAntes de continuar nas configurações do iReport, você vai se ambientar na ferra-

menta, criando um primeiro relatório. Isso possibilitará uma melhor compreensão da geração de relatórios JasperReports.

Para a geração deste relatório, você vai utilizar o assistente de relatórios existen-te na ferramenta. Isso facilitará na velocidade do desenvolvimento.

O BANCO DE DADOS USADO

O MySQL 5 será o gerenciador de banco de dados usado neste livro para a exe-cução dos exemplos de relatórios. Apesar de ser o MySQL, os exemplos mostrados poderão ser feitos em Oracle, SQL Server, PostgreSQL e etc.

O banco de dados chamado de relatorios será usado em todos os capítulos ao lon-go do livro, sendo as tabelas que o compõe são apresentadas na Figura 2.2 a seguir.

Figura 2.2 – Diagramação do banco de dados usado no livro

Demon

straç

ão

Page 39: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 2 | 17

Observação: As tabelas foram baseadas no banco de dados de exemplo Nor-thwind, encontrado no MS Office Access ® e no banco de dados MS SQL Server ®, ambos da Microsoft (MS).

Atenção: O arquivo relatorios.sql contendo o banco de dados relatorios e suas ta-belas devidamente populadas se encontra no site do autor, citado no início deste livro, em “Códigos dos exemplos criados no livro”.

O PRIMEIRO RELATÓRIO NO IREPORT PARA NETBEANS NA VERSÃO STANDALONE

O banco de dados a ser criado é composto por cinco entidades, sendo quatro delas principais para o cenário proposto. Para o exemplo, você vai criar o primeiro relatório usando apenas a tabela de produtos.

Vá ao menu File do iReport para NetBeans e selecione no menu o item Report Wizard.

Figura 2.3 – Selecionando o item de menu Report Wizard

Ao surgir à caixa de diálogo do assistente, chamada de New Report, você deverá seguir os seguintes passos para criar seu relatório:

1. Para a primeira etapa, coloque o nome do seu relatório em Report name. Chame de PrimeiroRelatorio se quiser ter um nome similar ao do livro. No botão Browse você pode alterar a localização de onde será salvo o relatório. Clique no botão Next para prosseguir.

2. A segunda etapa necessita da criação de uma conexão com o banco de dados. Como ainda não fora feito nenhuma, clique no botão New, ao lado do campo Con-nections/Data Sources.

Demon

straç

ão

Page 40: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

18 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

a. Na caixa de diálogo de Datasource selecione o item Database JDBC connec-tion. Clique no botão Next para prosseguir.

b. Como o driver JDBC usado é do MySQL, por padrão, a segunda etapa das pro-priedades de conexão surgirá com esta opção selecionada no campo JDBC Driver, contendo com.mysql.jdbc.Driver. Não há necessidade, neste caso, de se adicionar a biblioteca JDBC na sua aplicação.

c. No campo Name digite relatorios. No campo JDBC URL complete deixando jdbc:mysql://localhost/relatorios. Coloque o nome de usuário no campo User Name e sua respectiva senha em Password. Marque a opção Save password.

Figura 2.4 – Definindo as propriedades de conexão

d. Clique no botão Test para verificar se a conexão foi estabelecida com sucesso. Caso apareça a mensagem “Connection test successful!”, significa que você configu-rou tudo corretamente e que agora há uma comunicação com o banco de dados.

e. Salve as informações de conexão com o banco de dados através do botão Save da caixa de diálogo.

Demon

straç

ão

Page 41: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 2 | 19

Onde o iReport armazena minha conexão?

O iReport guarda as informações da configuração da conexão no diretório .ireport/dev/config/Preferences/com/jaspersoft, dentro do arquivo ireport.properties.

Neste arquivo há a propriedade connection seguida por um “ponto” e um núme-ro, que indica a conexão, onde a primeira é zero, a segunda é um e assim por dian-te. A string que existe como valor possui um XML, contendo uma compatibilidade com a versão do iReport que não está sobre a plataforma NetBeans.

f. Retornando ao assistente de relatório, na segunda etapa, concluída a conexão, você só precisa definir a tabela e dados que serão exibidos. No campo Query (SQL) digite a instrução SQL, a seguir, que selecionará somente a tabela de produtos e, em seguida, clique no botão Next para prosseguir:

SELECT * FROM produtos

Figura 2.5 – Criando a consulta SQL na segunda etapa do assistente

3. Na terceira etapa do assistente, em Fields, adicione todos os campos exceto CategoriaID (utilizando o botão “>”) e clique no botão Next.

Demon

straç

ão

Page 42: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

20 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Figura 2.6 – Seleção de campos para a geração do relatório

4. Na quarta etapa simplesmente avance clicando no botão Next.

5. Na quinta etapa, você vai selecionar o layout que deseja utilizar em seu rela-tório. Mantenha na opção Columnar layout e clique no botão Next.

6. Na última etapa, clique simplesmente no botão Finish para concluir o assistente.

Ao final você terá um relatório gerado com os campos selecionados em formato tabular, contendo sua visualização apenas estrutural.

Figura 2.7 - Estrutura do relatório gerado pelo assistente

Demon

straç

ão

Page 43: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 2 | 21

Observação: O driver JDBC do MySQL já vem com o iReport, no diretório ide8/modules/ext de sua instalação. Caso você deseje utilizar outro banco de dados ou atualizar a versão JDBC da biblioteca do MySQL, que se encontra na versão mysql-connector-java-5.0.7-bin.jar, adicione neste diretório.

VISUALIZANDO O PRIMEIRO RELATÓRIO

Antes de iniciar qualquer alteração, você vai visualizar o relatório da forma bruta como foi criado.

Clique em Preview (ou pelo menu View>Editors>Preview) e aguarde a rende-rização do relatório.

O visualizador de relatórios para o formato JasperReports está embutido no iReport para NetBeans, diferente do que acontecia em versões que não utilizam a plataforma NetBeans.

CONFIGURANDO O IREPORT PARA NETBEANSAgora com a criação de um relatório básico, você está preparado para configurar

o iReport para NetBeans em algumas de suas características.

Vá ao menu Tools e clique no item Options.

Ao surgir à caixa de diálogo Options, as configurações iniciais são do iReport. Como principais itens de configuração você tem:

Na guia General:

• Default unit – Indica a unidade utilizada para o trabalho com os relatórios. Podem ser: mm, cm, pixels e polegadas.

• Limit the number of records – Quando selecionado, você pode definir o número máximo de relatórios que podem ser exibidos, alterando em Max number of reports.

• Report locale – Define a localização atual da sua máquina, exibindo de forma correta certos padrões numéricos como números, moedas e datas.

• Report timezone – Define a timezone da região, pegando automaticamente a configuração do sistema operacional.

Demon

straç

ão

Page 44: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

22 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

• Ignore pagination – Ignora a paginação de dados na geração dos relatórios.

• Use virtualizer – Será visto mais adiante, em outro capítulo.

• Report defaults

o Language – A linguagem utilizada como padrão para os relatórios. Por pa-drão é Java, mas podemos usar nesta versão Groovy e JavaScript.

o Chart theme – Tema para o gráfico. Será visto mais adiante, em outro capítulo.

Em Classpath você pode adicionar bibliotecas e classes não disponíveis pelo iReport para compilar relatórios com acesso a dados de forma específica. Essa guia será utiliza-da mais adiante quando utilizar outras formas de conexão com o banco de dados.

Na guia Viewers você pode selecionar cada um dos programas que deseja uti-lizar como visualizadores quando compilar e exportar o relatório em um determi-nado formato. Depois, para visualizar no formato desejado, dentro do programa selecionado, você seleciona no menu Preview.

Adicione um programa que deseja utilizar para cada tipo de arquivo, principal-mente o PDF que será muito utilizado ao longo do livro.

A COMPILAÇÃO DO IREPORT PARA NETBEANS NO PREVIEW

Por padrão, o iReport utiliza o seu diretório corrente do arquivo .jrxml, aberto do seu relatório, para guardar os arquivos compilados.

Se determinar outro programa como preview, ele exibirá tanto internamente como abrirá o programa configurado para exibir o formato desejado.

A VERSÃO DO IREPORT PARA NETBEANS COMO PLUG-INDiferente do que acontece com a versão Standalone, o plug-in iReport for NetBeans exi-

ge a criação de um projeto, seja Web ou Desktop, para que seja possível criar um relatório.

Primeiro, antes de criar o relatório, selecione um diretório ou pacote onde vai criá-lo. Ao criar um novo arquivo, New File, você seleciona em Categories o item Report e, em File Types, novamente Report para o assistente de relatórios.

Demon

straç

ão

Page 45: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 2 | 23

Ao avançar, você define o nome do relatório, só que desta vez deve manter a extensão, como por exemplo: PrimeiroRelatorio.jrxml.

Na etapa de conexões siga os mesmos procedimentos feitos no passo número 2 da versão Standalone. Como extra, você pode selecionar uma conexão ativa já existente do NetBeans IDE, com a opção NetBeans Database JDBC connection.

O ARQUIVO DE PROPRIEDADES DO IREPORT COMO PLUG-INDiferente da versão Standalone, a versão plug-in armazena o arquivo ireport.pro-

perties no diretório de configurações do NetBeans IDE. Neste caso, ele costuma se en-contrar no diretório de usuário da sua máquina com o nome de .netbeans. O caminho para o arquivo é /.netbeans/dev/config/Preferences/com/jaspersoft/ireport.properties.

ABRINDO UM RELATÓRIO NO IREPORT PARA NETBEANS

Um relatório criado em nosso idioma possui muitos acentos em rótulos, devido a nossa língua. Entretanto, no NetBeans, ainda na versão utilizada pelo iReport e não corrigida até o momento que este livro é escrito, há o problema com a codifica-ção de caracteres no sistema operacional Windows, que inicializa trabalhando com o padrão iso-8859-1.

Como o tipo aceito pelo iReport é UTF-8, o programa precisa criar arquivos neste padrão. Se isso não ocorrer, quando abrir um relatório com a codificação diferente de UTF-8, verá o erro mostrado na Figura 2.8.

Figura 2.8 – Erro ao ler um relatório criado com acentos

Demon

straç

ão

Page 46: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

24 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Para corrigir este problema, basta alterar o atalho que inicializa o programa, transmitindo o seguinte parâmetro: -J-Dfile.encoding=UTF-8.

Você pode resolver este problema simplesmente criando um arquivo .bat, no diretório bin da instalação do iReport, da seguinte forma:

ireport.exe -J-Dfile.encoding=UTF-8

Porém, pode ser que você acredite que esta solução seja muito ruim e quer algo mais profissional. Neste caso, basta alterar o arquivo de configurações chamado - que é o mesmo do NetBeans (netbeans.conf), porém, com outro nome.

Altere no arquivo, que se encontra no diretório etc, no local da instalação do seu iReport, na seguinte linha:

default_options=”-J-Xms24m -J-Xmx64m -J-Dfile.encoding=UTF-8”

Ao inicializar o iReport, ele carregará estas configurações, encontradas nesta linha, e inicializará os arquivos com essa codificação.

IREPORT PARA NETBEANS EM INGLÊS

O suporte para o idioma nativo encontrado no sistema operacional é automático no NetBeans em que o iReport foi desenvolvido. Se desejar tê-lo somente em inglês, adicione as seguintes informações no arquivo ireport.conf, em default_options, junto aos demais parâmetros:

default_options=”-J-Duser.language=en -J-Duser.country=US …”Dem

onstr

ação

Page 47: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

3ESTRUTURA DE UM RELATÓRIO E SEU

DESENVOLVIMENTO

“A única hora que você não pode falhar é na última vez que tentar”.

Charles Kettering

Demon

straç

ão

Page 48: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 3 | 27

Um relatório é uma maneira agradável de apresentar as informações vindas de alguma base de dados com sua aparência formatada. Na maioria das vezes, relató-rios são usados para agrupar as informações vindas de um conjunto de dados, rela-cionados entre si, oriundos de diversas tabelas. Como resultado você tem apenas os campos determinados na construção do seu relatório e exposto como tal de forma a simplificar a compreensão das informações. Vindo em um formato padronizado para impressão, como um texto feito em um editor de textos, você só precisa man-dar para a impressão ou exportá-los para outro formato de uso maior.

Neste capítulo você irá conhecer a estrutura de um relatório JasperReports na ferramenta iReport para NetBeans e suas propriedades.

A ESTRUTURA DO RELATÓRIOUm relatório no JasperReports possui diversas seções, separadas por linhas ho-

rizontais ao qual são chamadas de Bands (bandas).

O comportamento de cada Band depende da funcionalidade para a qual está pre-parada. Quando o relatório se junta aos dados para rodar a impressão, estas seções são impressas na tela de diferentes maneiras, com diferentes tempos. Por exemplo, o cabeçalho da página (pageHeader) é repetido em todas as páginas, uma vez em cada página, enquanto que os detalhes onde serão exibidos os dados (detail), é gerado em uma seqüência elaborada de acordo com os dados existentes (query ou datasource), repetindo-se uma vez para cada registro, incorporando-se ao desenho do relatório.

As bands de um relatório JasperReports é dividido em dez seções pré-definidas para que novos grupos possam ser adicionados.

Demon

straç

ão

Page 49: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 3 | 39

• Summary on a new page - esta opção é similar a anterior (Title on a new page), mas com a diferença de ser a banda summary que será impressa como a última página.

• Floating column footer - as bandas columnFooter são impressas por padrão no fim das páginas. Se na impressão do relatório não houver dados suficientes para preencher uma página, um espaço em branco aparecerá entre a coluna e o rodapé da coluna (columnFooter). Se você quer que o texto encontrado na banda columnFooter seja impresso logo após a impressão da coluna, marque a opção Floating column footer. Esta opção permite forçar a impressão da banda columnFooter imediatamente após a última interação da banda detail e não do término de todas as colunas. Esta opção é geralmente usada quando você quer criar tabelas usando os elementos de relatórios.

• Ignore pagination - ignora a paginação ao preencher o relatório, impossibi-litando a visualização das demais páginas caso haja mais que uma. Quando ativa, esta opção implica até mesmo na visualização correta dos dados caso haja mais de uma coluna.

• Print order - a ordem de impressão determina como os dados impressos na pági-na serão organizados em mais de uma coluna. O padrão para a ordem de impres-são é Vertical. Com a ordem Vertical, primeiro os dados são impressos um em-baixo do outro, passando para uma nova coluna somente quando a coluna está totalmente preenchida no final da página. Na ordem Horizontal os dados são preenchidos em linha. Os dados passam por todas as colunas, adicionando uma nova linha somente quando a última coluna da página foi preenchida naquela determinada linha. A Figura 3.5 a seguir ilustra as duas ordens de impressão.

Figura 3.5 – Ordem de impressão na Vertical e na Horizontal

Demon

straç

ão

Page 50: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

4CRIANDO UM RELATÓRIO SEM O USO DE

ASSISTENTES

“A imaginação é mais poderosa que o conhecimento. Ela alarga a visão, estimula a inteligência, desafia o impos-

sível. Sem a imaginação, o pensamento estagnará.”Albert Einstein

Demon

straç

ão

Page 51: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 4 | 47

Para uma maior compreensão dos diversos elementos que compõem um relató-rio no JasperReports, através do iReport para NetBeans, é importante a um desen-volvedor aprender a desenhá-lo manualmente, isto é, sem o uso de assistentes.

No capítulo anterior foram apresentadas as bandas e as configurações iniciais de um relatório em branco através de suas propriedades. Neste capítulo você irá aprender a criar um relatório manualmente, adicionando diversos elementos, confi-gurando-os e trabalhando com banco de dados.

INICIANDO UM RELATÓRIO MANUALMENTE

Para iniciar, crie um novo relatório. Na propriedade do relatório (selecione re-port name na janela Report Inspector) dê um nome para o seu relatório. Os tama-nhos predefinidos serão mantidos.

Dica: Caso queira visualizar o Grid para desenhar o relatório, vá ao menu View>Report Designer Grid e clique em Show Grid.

A JANELA PALETTE

O iReport para NetBeans na lateral direita a janela Palette. Esta janela contém doze elementos que são muito usados na construção de um relatório. Estes ditos “elementos” são objetos gráficos que podem compor um relatório, como uma linha, rótulo ou uma elipse.

A Figura 4.1 apresenta as principais ferramentas que podem ser usadas tanto para a criação de elementos, como também para sua manipulação, em um relatório JasperReports.

Figura 4.1 - Ferramentas para a criação de elementos no relatório

Demon

straç

ão

Page 52: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

48 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

1. Break – Quebra a página a partir dele.

2. Ellipse – Desenha elipses no relatório.

3. Line – Em um relatório JasperReports uma linha é definida por um elemento retangular com uma linha diagonal. A linha pode ser desenhada em uma reta perfeita, na horizontal, vertical ou em ângulo se pressionada a tecla <Shift> antes de arrastar. A linha segue o grid.

4. Static Text – Utilizado para criar rótulos de relatórios.

5. Chart – Gera um gráfico através de valores determinados transmitidos. Mais adiante haverá um capítulo exclusivamente para gráficos.

6. Frame – Cria quadros que podem conter outros elementos em seu interior, com bordas ao seu redor.

7. Rectangle – Usado para desenhar retângulos ao redor de outros elementos, criando destaques como uma formatação de parágrafo de um programa de edição de textos, este elemento pode também conter retângulos com cantos arredondados.

8. Subreport – Cria um relatório dentro de outro, o que chamamos de mestre-deta-lhe. Mais adiante haverá um capítulo abordando exclusivamente este assunto.

9. Crosstab – Desenvolve o que chamamos em programas de planilhas eletrô-nicas de tabela dinâmica (referência cruzada), muito utilizado em relatórios gerenciais (Business Intelligence). Mais adiante também haverá um capítulo abordando exclusivamente este assunto.

10. Image – Utilizado para exibir imagens em seu relatório. Podem ser imagens dinâmicas (preenchidas por um banco de dados, por exemplo) ou estáticas.

11. Round Rectangle – Gera o elemento rectangle, porém, com a propriedade Radius já pré-definida com um valor.

12. Text Field – Utilizado para criar os campos dinâmicos dos relatórios. É neste elemento que você se conecta a um determinado campo do banco de dados para exibir suas informações, por exemplo.

Demon

straç

ão

Page 53: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 4 | 57

Figura 4.9 – Barra de ferramentas Formatação de Texto

1. Font – Altera a fonte do texto encontrado no elemento.

2. Font Size – Altera o tamanho da fonte do texto encontrado no elemento, em uma seleção numérica ou digitada (pressione <ENTER> para confirmar).

3. Increase Font Size – Altera o tamanho da fonte do texto encontrado no ele-mento aumentando sempre em dois pontos (2pt).

4. Decrease Font Size – Altera o tamanho da fonte do texto encontrado no ele-mento diminuindo sempre em dois pontos (2pt).

5. Bold – Aplica negrito ao texto encontrado no elemento.

6. Italic – Aplica itálico ao texto encontrado no elemento.

7. Underlined – Sublinha o texto encontrado no elemento.

8. Strikethrough – Desenha uma linha no meio do texto encontrado no elemen-to (tachado).

9. Align Left – Alinha o texto à esquerda em relação à área do elemento.

10. Align Justify – Alinha o texto às margens esquerda e direita da área do ele-mento.

11. Align Center – Alinha o texto ao centro em relação à área do elemento.

12. Align Right – Alinha o texto à direita em relação à área do elemento.

13. Align Top – Alinha o texto na parte superior vertical em relação à área do elemento.

14. Align Vertical Axis – Alinha o texto no centro vertical em relação à área do elemento.

15. Align Bottom – Alinha o texto à parte inferior vertical em relação à área do elemento.

Demon

straç

ão

Page 54: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

58 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Adicionando os textos estáticos

Antes de iniciar a criação do desenho, você tem na Figura 4.10 como será o resultado final.

Figura 4.10 – Design final do relatório

Para criar a aparência vista na Figura 4.10, os seguintes passos serão feitos:

1. Na janela Palette, clique na ferramenta Static Text e arraste um tamanho qual-quer na band pageHeader.

2. Dê um duplo clique neste elemento desenhado e digite: Produtos Cadastrados. Na barra de ferramentas formatação altere em Font Size para 24 e clique no botão Bold. Textos estáticos são representados pelo elemento JasperReports <staticText />. Alguns sub-elementos são comuns a todos, porém não serão apresentados aqui.

<staticText>... <textElement> <font size=”24” isBold=”true” /> </textElement> <text><![CDATA[Produtos Cadastrados]]></text></staticText>

O sub-elemento <textElement />, de <staticText />, determina as configu-rações da fonte. Todas estas configurações de fonte são feitas em <font />. Este elemento, por sua vez, possui alguns atributos que determinam o comportamento

Demon

straç

ão

Page 55: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 4 | 65

CRIANDO O EFEITO ZEBRA EM SEU RELATÓRIO

Embora o relatório esteja funcionando, temos um problema estético. Compare seu atual relatório com o da Figura 4.15 mostrado a seguir. Veja que é bem mais simples de visualizar as várias linhas encontradas no relatório quando este possui o efeito de cores alternadas.

Figura 4.15 – Relatório com o efeito zebra

A exibição de cores de linhas alternadas, conhecido como efeito zebra, é a me-lhor maneira de exibir um relatório tabular como o criado. Ajuda na rápida identifi-cação de linhas, além do design agradável.

Na janela Report Inspector, em Styles, clique com o direito do mouse e selecio-ne no menu de contexto o item Add Style.

Com o estilo criado e selecionado, vá até a janela Properties e digite Zebra em Name.

Retornando a janela Report Inspector, clique com o direito do mouse sobre o es-tilo Zebra e selecione no menu de contexto o item Add Conditional Style. Selecione o item que surgirá (<No condition set>) e digite a expressão mostrada a seguir, em Condition Expression:

new Boolean( $V{REPORT_COUNT}.intValue() % 2 == 0 )

Demon

straç

ão

Page 56: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

68 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

EXIBINDO IMAGENS EM SEU RELATÓRIO

A última modificação que será feita em seu relatório manual é da adição de ima-gens. Seu relatório ficará similar a Figura 4.17 mostrada a seguir.

Figura 4.17 – Imagens no relatório com dados da tabela

Para essa alteração, salve (Save As) com outro nome, por exemplo: Relatorio-ManualComImagem. Perceba que foi retirado o elemento Frame deste exemplo. Porém, no seu, não será necessário, caso deseje.

Apague o Text Field da imagem e o substitua pelo elemento Image. Ajuste a imagem para que ela tenha a Height (Altura) de 70 e a Width (Largura) de 85, em Properties. Ainda na janela Properties, em Image, clique no botão com três pontos da propriedade Image Expression.

Na caixa de diálogo Image Expression, coloque entre “aspas” o caminho para o di-retório onde se encontram as imagens que deseja exibir. Depois, concatene (em Java é o sinal de “+”) com o campo imagem do banco de dados, que já está com o nome de cada produto armazenado. Por exemplo, no caso do livro, as imagens estarão em um diretório chamado de imagens, onde você deverá ter a seguinte expressão:

“imagens/”+$F{Imagem}

Demon

straç

ão

Page 57: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

5RELATÓRIOS COM GRUPOS E PASSAGEM

DE PARÂMETROS

“Tudo que uma pessoa pode imaginar, outras podem tornar real.”Júlio Verne

Demon

straç

ão

Page 58: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 5 | 81

Os relatórios mais utilizados em aplicações, com toda certeza, são os dinâmi-cos. Aqueles relatórios que transmitimos uma determinada informação e este nos trazem determinados dados.

Neste capítulo você aprenderá a criar um relatório mais complexo, utilizando mais de uma entidade (tabela) no desenvolvimento, agrupando informações e fil-trando-as através de parâmetros.

O RELATÓRIO QUE SERÁ DESENVOLVIDO

O relatório final será composto por quatro tabelas, resultando em um grupo formado por pedidos efetuados com seus respectivos produtos adquiridos. A Figura 5.1 ilustra o resultado final do relatório.

Figura 5.1 – Exemplo final do relatório com grupos

GERANDO O RELATÓRIO

Para começar, pegue o relatório zebrado feito no capítulo anterior. Salve como RelatorioAgrupado. Na janela Report Inspector, clique no primeiro item da árvore de componentes e digite em Report name, na Properties, Relatorio_Agrupado.

Apague os itens existentes e mantenha apenas os elementos das bands pageHe-ader, columnHeader e pageFooter. Em detail mantenha apenas o Frame.

Em pageHeader altere o rótulo para Pedidos Efetuados. Quanto aos quatro rótu-los encontrados na band columnHeader altere como mostra a Tabela 5.1 a seguir.

Demon

straç

ão

Page 59: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

84 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Veja os campos selecionados na Figura 5.3.

Figura 5.3 – Criando a query visualmente através do Query designer

Para completar a query, você deverá adicionar uma ordenação pelo código do pedido (PedidoID). Clique com o direito no campo PedidoID, no desenho da query do primeiro quadro, e selecione no menu de contexto o item add to order-by. Con-firme a caixa de diálogo logo após.

Figura 5.4 – Adicionando uma ordenação através do query designer

Demon

straç

ão

Page 60: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

94 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

ADICIONANDO PARÂMETROS AO RELATÓRIO

Antes de construirmos um aplicativo para chamar o relatório, você vai criar um parâmetro para exibir um determinado pedido.

Assim como adicionar variáveis, vá até a janela Report Inspector e clique com o direito do mouse em Parameters.

Na janela Properties digite PAR_PEDID no campo Name. Selecione java.lang.Integer em Parameter Class. Isso significa que até o momento você terá um parâme-tro chamado PAR_PEDID com o tipo Integer. Como precisamos testar o relatório, você vai manter selecionado o item Use as a prompt. Isso fará com que um prompt apareça para que você digite o código do pedido para testá-lo.

Existe um campo chamado Default Value Expression. É a opção padrão para o valor do prompt, caso não se lembre de nenhum código de pedido. Neste caso, você vai adicionar o número do pedido 10248 como padrão. Por se tratar de um int, converta para java.lang.Integer, digitando neste campo o detalhe a seguir:

new Integer( 10248 )

Caso queira completar com uma descrição para o parâmetro criado, basta adi-cioná-lo no campo Parameter Description como é mostrado na Figura 5.11. Esta descrição aparecerá na caixa de diálogo que será exibida quando chamar o relatório pelo iReport.

Figura 5.11 – A adição do parâmetro PAR_PEDID

Demon

straç

ão

Page 61: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

6CHAMANDO O RELATÓRIO POR UMA

APLICAÇÃO DESKTOP

“A disciplina é a parte mais importante do sucesso.”Truman Capote

Demon

straç

ão

Page 62: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 6 | 99

Assim como criar um relatório, é muito fácil chamá-lo por uma aplicação. Este capítulo utilizará uma aplicação desktop simples, com interface gráfica Swing, cria-da no NetBeans IDE, apenas com o intuito de ensiná-lo a chamar sua aplicação.

A APARÊNCIA FINAL DO APLICATIVO

Para melhor compreender o exemplo deste capítulo, você tem a Figura 6.1 que exibe a aparência final do simples aplicativo Swing que será criado. Observe que ha-verá uma caixa de combinação e um botão. A caixa de combinação receberá valores da tabela de pedidos para que você escolha qual pedido deseja visualizar.

Figura 6.1 – Aparência do aplicativo Swing para exibição do relatório

Demon

straç

ão

Page 63: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

7SUB-RELATÓRIOS

“Ter problemas na vida é inevitável, ser derrotado por eles é opcional.”

Roger Crawford

Demon

straç

ão

Page 64: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 7 | 115

Os sub-relatórios são relatórios dentro de outros, também conhecidos como relatórios do tipo “mestre-detalhe”.

A idéia básica para a criação de um relatório mestre-detalhe é ter duas entidades relacionadas.

Estes relatórios, embora possam parecer complexos, são simples de desenvolver em JasperReports.

Neste capítulo você aprenderá a criar sub-relatórios em seus relatórios usando o iReport para NetBeans e acesso a dados, conhecerá a band noData na prática e depois o chamará através de uma aplicação Web com JSP e Servlets.

O RELATÓRIO MESTRE-DETALHE QUE SERÁ DESENVOLVIDO

O relatório com sub-relatório, a ser desenvolvido, possui como semelhança do Capítulo 5 sua estrutura, uma vez que fará uso das mesmas tabelas, mas em uma situação completamente diferente. Antes, você criou o relatório com agrupamento; desta vez, será criado com um sub-relatório. A Figura 7.1 ilustra o resultado do relatório com o sub-relatório que será desenvolvido.

Figura 7.1 – Exemplo final do relatório mestre-detalhe

Demon

straç

ão

Page 65: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

118 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

DEFININDO A POSIÇÃO DOS CAMPOS

Embora não seja nada obrigatório, uma vez que o design do relatório fica por conta de cada desenvolvedor, vamos dar a você um similar ao feito no Capítulo 5, mas com algumas mudanças.

Figura 7.4 – A estrutura do relatório

A Figura 7.4 exibe como deverá ficar o formato do relatório principal. Estes ele-mentos são listados a seguir, conforme é mostrado na imagem:

1. Na band pageHeader arraste um Static Text ocupando de preferência de uma margem a outra da página e digite Relatório de Pedidos Efetuados. Clique com o direito do mouse sobre o texto estático e selecione no menu de con-texto o item Padding and borders. Na caixa de diálogo vá em Borders e se-lecione na caixa abaixo, a parte superior e inferior, representando a borda superior e inferior. Em Line width altere para 1 Point. Escolha em Line Style o estilo desejado e a cor em Line color. Veja na Figura 7.5 como poderá ficar a configuração final das bordas.

Demon

straç

ão

Page 66: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 7 | 123

Ajuste seu relatório de modo a ficar com alinhamento dos valores exibidos. Como o relatório não sofreu mudanças ainda na query, você pode executá-lo para visualizar sua aparência. A Figura 7.8 lhe dará uma visão melhor do que pode ser feito.

Figura 7.8 – Resultado da estrutura e exibição final do sub-relatório criado

MODIFICANDO A QUERY DO SUB-RELATÓRIO

Para finalizar este sub-relatório, por enquanto, você vai alterar a query desenvol-vida inicialmente para a geração do assistente. Esta mudança possibilitará assim a transmissão do número do pedido, referente ao relatório mestre, ao sub-relatório.

Clique com o direito do mouse sobre o primeiro item de Report Inspector e selecione o item Edit Query. Adicione a cláusula WHERE na sua query, como mos-trado a seguir:

...WHERE PedidoID = $P{PAR_PEDIDOID}

Demon

straç

ão

Page 67: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 7 | 131

Figura 7.14 – Resultado final com a adição do retorno da variável para o relatório mestre

CHAMANDO O RELATÓRIO POR UMA APLICAÇÃO WEB No Capítulo 6, foi ensinado como configurar as bibliotecas do JasperReports na IDE

NetBeans através de uma aplicação Swing. Agora você vai criar um projeto, para a Web, chamando o relatório desenvolvido para ser exibido em formato PDF.

A estrutura de sua aplicação Web

A seguinte estrutura demonstra a organização dos arquivos em sua aplicação Web Java:

RelatoriosNaWeb/|_ WEB-INF/||_ lib/|||_Arquivos JAR (JasperReports e MySQL)||_ classes/|||_ br/|||_ com/|||_ integrator/|||_ Relatorio.class||_ relatorios/|||_ RelatorioMestreDetalhe.jasper|||_ SubRelatorio.jasper||_ web.xml|_ index.jsp

As bibliotecas encontradas no diretório lib foram omitidas, uma vez que você já as conhece.

Demon

straç

ão

Page 68: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 7 | 137

Figura 7.16 – Relatório em PDF gerado pelo Servlet e exibido no navegador

CRIANDO MARCADORES PARA O RELATÓRIO EM PDFPara colocar na prática o uso de Hyperlinks explicado no Capítulo 4 deste livro,

você vai criar os marcadores para o relatório, uma vez que seu resultado é composto por muitas páginas e seria importante tê-los marcados para facilitar a navegação.

Iremos marcar os números dos pedidos, mas se desejar pode marcar os nomes, embora a saída se torne repetitiva.

Clique com o direito do mouse sobre o Text Field que representa o nome do cliente. Selecione no menu de contexto o item Hyperlink.

No campo Anchor Name Expression, utilize o Expression Editor e digite o cam-po $F{PedidoID}.toString(). Por se tratar de um campo numérico, você deverá con-vertê-lo para string, uma vez que esta opção só aceita este tipo. Clique no botão Apply para confirmar.

Demon

straç

ão

Page 69: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 7 | 139

Figura 7.18 – Destaque da utilização dos marcadores no Adobe Acrobate®

Demon

straç

ão

Page 70: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

8RELATÓRIOS COM HIBERNATE

“Na teoria, não há diferença entre teoria e prática. Mas na prática há.”

Jan L. A. van de Snepscheut

Demon

straç

ão

Page 71: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 8 | 143

Criar relatórios com o uso do Hibernate como camada de acesso a banco de dados é um caso comum no desenvolvimento de aplicações Web.

O Hibernate é hoje o mais popular projeto de gerenciamento de dados persisten-tes em Java e também o que possui uma gama de soluções para problemas comuns.

Neste capítulo você aprenderá a desenvolver seus relatórios utilizando o Hiber-nate para acessar os dados, incluindo um exemplo com sub-relatório.

O HIBERNATE

Hibernate é um projeto audacioso que procura ter uma completa solução para o problema de gerenciamento de dados persistentes em Java. O Hibernate é um framework que se relaciona com o banco de dados, onde esse relacionamento é co-nhecido como mapeamento objeto/relacional para Java, deixando o desenvolvedor livre para se concentrar em problemas da lógica do negócio. Sua simplicidade em configuração, dá ao desenvolvedor algumas regras para que sejam seguidas como padrões de desenvolvimento ao escrever sua lógica de negócios e suas classes per-sistentes. De resto, o Hibernate se integra suavemente ao seu sistema se comuni-cando com o banco de dados como se fosse diretamente feito por sua aplicação. Uma mudança de banco de dados, nesse caso, não se torna traumática, alterando apenas um ou outro detalhe nas configurações do Hibernate.

Atenção: Este capítulo, nem mesmo o livro, tem a intenção de ensinar o uso do Hibernate. Além de ser um assunto complexo, exigindo até mesmo um livro so-mente sobre ele, o foco do livro se baseia na criação de relatórios usando o iRe-port para NetBeans.

Demon

straç

ão

Page 72: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

144 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

CRIANDO UM PROJETO USANDO HIBERNATE NO NETBEANS IDEDiferente do que foi feito nos capítulos anteriores, desta vez você terá que pri-

meiro criar um projeto dentro do NetBeans IDE e configurar o Hibernate, mapeando suas tabelas antes de criar um relatório no iReport.

Crie um novo projeto Web Application no NetBeans IDE. Coloque o nome de ProjTrabComHibernate. Na última etapa, selecione o framework Hibernate 3.2.5.

Ao selecionar o item Hibernate 3.2.5, você terá disponível dois itens: Database Connection e Database Dialect.

Execute os passos a seguir para criar uma conexão em Database Connection:

1. Selecione no menu de contexto o item New Database Connection;

2. Na caixa de diálogo New Database Connection altere para MySQL (Connec-tor /J driver) em Name. Preencha os demais itens conforme as configurações feitas no seu banco de dados relatorios. Veja na Figura 8.1 como deverá ficar preenchida a caixa de diálogo. Confirme no botão OK;

Figura 8.1 – Configurações da conexão JDBC para o banco de dados relatorios no MySQL

Demon

straç

ão

Page 73: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 8 | 145

3. Retornando a caixa de diálogo New Web Application, você terá as opções Da-tabase Connection e Database Dialect configuradas com o dialeto do MySQL. Confirme no botão Finish.

Figura 8.2 – Configuração completa da conexão e dialeto usado pelo projeto com o Hibernate

Automaticamente o NetBeans IDE adicionará as bibliotecas do Hibernate neces-sárias para o desenvolvimento do relatório e aplicação que o utilizará.

AS BIBLIOTECAS DO JASPERREPORTS E MYSQL JDBCAntes de continuar no projeto, adicione as bibliotecas do JasperReports e MyS-

QL JDBC no projeto.

CRIANDO AS ENTIDADES

Para o exemplo proposto, você terá um pacote em sua aplicação chamado de br.com.integrator.model, que possuirá as entidades Categoria e Produto.

Fora dos pacotes, você possui os arquivos XML que mapeiam as entidades junto ao arquivo que configura o Hibernate.

Demon

straç

ão

Page 74: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

156 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

DESENVOLVENDO O RELATÓRIO

O relatório final utilizando o Hibernate será similar ao mostrado na Figura 8.5. No caso, será feito sem o uso de assistentes.

Figura 8.5 – Resultado final do primeiro relatório com Hibernate

Gerando a query HQL

Vá até a janela Report Inspector e clique com o direito do mouse sobre o primeiro item, selecionando no menu de contexto a opção Edit Query. Na caixa de diálogo Re-port query, selecione em Query language o item Hibernate Query Language (HQL).

Digite a query para selecionar todos os campos da entidade Produto:

from Produto

Caso você não tenha experiência com o Hibernate, saiba que ele usa uma linguagem própria para selecionar dados, similar às cláusulas SQL, só que simplificado. Quando é adicionada a query from Produto, é o mesmo que dizer ao Hibernate em SQL:

SELECT * FROM produtos

De todos os objetos que surgirão, selecione categoria e unidadesEmEstoque para excluir teclando <DELETE>. Confirme logo após.

Demon

straç

ão

Page 75: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 8 | 165

Duas taglibs são adicionadas nesta página, uma vez que se utiliza a JSTL. A URI do primeiro cabeçalho chama as tags CORE e o segundo cabeçalho são as tags de formatação.

A tag <c:forEach /> varre o List enviado pelo Servlet através de requestScope, transmitido pelo Servlet criado, ao qual repassa à página JSP.

<c:forEach var=”lista” items=”${ requestScope. categoriasList }”>

A primeira coluna terá a exibição do ID da categoria, a segunda o nome da categoria e a terceira a descrição. Na quarta coluna, há um link ao Servlet com a query string: id=NÚMERO DO ID DA CATEGORIA. Esse Servlet será o responsável por exibir o relatório criado. Clicando nesse link, você submete ao Servlet o ID da categoria que deseja visualizar.

Por fim, crie na página índex.jsp, um link que chamará o Servlet ServletCatego-ria, contendo por entre as tags <body/>:

<a href=”ServletCategoria”>Visualizar Categorias para Relatório</a>

Adicione ao projeto a biblioteca JSTL, clicando com o direito do mouse em Li-braries, na janela Projects, do NetBeans, selecionando o item Add Library no menu de contexto.

Figura 8.11 – Página que chamará o Servlet que fará a geração do relatório

Demon

straç

ão

Page 76: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

9RELATÓRIOS USANDO EJB QL

“Nunca ande pelo caminho traçado, pois ele conduz somente até onde os outros foram.”

Alexandre Graham Bell

Demon

straç

ão

Page 77: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 9 | 171

O uso de Java Persistence API se tornou muito intenso, e como não poderia deixar de ser, o JasperReports possui suporte a esta especificação através de EJB QL. Esta linguagem de queries possui uma semelhança à HQL do Hibernate e também a tradicional instrução SQL.

Com a especificação do EJB3, na introdução da JPA, Java Persistence API, ficou muito popular o uso de JPQL, Java Persistence Query Language, que é uma é uma extensão da EJB QL (Enterprise JavaBeans Query Language).

Neste capítulo você vai aprender a configurar um arquivo de persistência e criar um relatório com sub-relatório utilizando a EJB QL.

O CONCEITO DA API DE PERSISTÊNCIA

Até a versão J2EE 1.4, a plataforma Java não possuía uma forma simples de ma-pear objetos em um banco de dados. Uma forma mais complexa podia ser utilizada, exigindo um container EJB, utilizando EJB QL (que foi introduzida como parte da es-pecificação EJB2.0). Com a introdução de JPA (Java Persistence API), definida na JSR-220 (Enterprise JavaBeans, Version 3.0), houve uma padronização no mapeamento de objeto/relacional na plataforma Java. No EJB3, as sentenças são expressas através da JPQL (Java Persistence Query Language). A JPQL é uma extensão da EJB QL, como já foi dito na introdução deste capítulo.

Apesar de descrita na especificação do EJB 3, a JPA não depende de um container para funcionar, sendo possível usar e testar soluções apenas com o Java SE.

A JPA é baseada no conceito POJO (Plain Old Java Object), algo como “Bom e Velho Objeto Java”, que incorpora idéias de renomados frameworks de persistência para padronizar o mapeamento O/R em Java.

Na JPA, os objetos persistentes são denominados entidades (Entities). Uma entidade é um objeto simples (POJO), que representa um conjunto de dados persistido no banco. Como entidades são definidas por classes Java comuns, sem relação com frameworks ou bibliotecas, elas podem ser abstratas ou herdar de outras classes, sem restrições.

A chave primária, indicada como um conceito importante nas entidades, possui uma identificação e estado, sendo seu ciclo de vida independente do tempo de duração da aplicação.

Demon

straç

ão

Page 78: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 9 | 175

Retornando a caixa de diálogo New Entity Classes from Database, altere os no-mes de Class Name para o singular, mantendo o padrão de nomes de entidades.

Em Package digite o nome do pacote em que estas entidades serão colocadas. No livro foi usado br.com.integrator.entities. Veja a Figura 9.4 para melhor compreensão.

Figura 9.4 – Alteração do nome das entidades e criação do pacote

Na quarta e última etapa, em Mapping Options, altere para lazy, em Association Fetch e java.util.Set, em Collection Type. Clique no botão Finish.

Observe que o NetBeans criará duas classes (em Source Packages) e o arquivo persistence.xml, em Configuration Files.

A entidade Categoria

A entidade Categoria, criada pelo NetBeans, já possui todas as anotações neces-sárias para o reconhecimento no iReport. Para sua melhor compreensão, temos a Listagem 9.1 mostrando como ela pode estar:

Demon

straç

ão

Page 79: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 9 | 183

Na segunda etapa, digite o nome de sua conexão, no campo Name e, no campo Persistence Unit Name, o nome dado em seu arquivo de persistência (no caso foi relatorios). Clique no botão Test e caso a conexão tenha sido bem sucedida, con-firme e Salve.

Figura 9.5 – Criando e testando a conexão EJBQL

Esta conexão é armazenada no arquivo ireport.properties do iReport para Ne-tBeans (diretório .ireport) e utiliza a classe it.businesslogic.ireport.connection.EJBQLConnection.

DESENVOLVENDO O RELATÓRIO

O relatório que será criado é com sub-relatório. Infelizmente o iReport para NetBeans não suporta o uso de assistente para criar o sub-relatório. Portanto você deverá criar os dois relatórios manualmente e depois chamar o sub-relatório, atra-vés da ferramenta subreport.

Demon

straç

ão

Page 80: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 9 | 185

Nota: O livro não se aprofundará neste assunto, uma vez que está focado no de-senvolvimento de relatórios JasperReports com o uso do iReport para NetBeans.

De todos os objetos que surgirão, selecione class e produtos (na parte inferior, em Field name) e tecle <DELETE>. Confirme logo após.

Figura 9.7 – A query EJBQL para selecionar os itens da entidade Categoria

A composição final do relatório mestre

Apenas para que você possa examinar, seu relatório mestre, quando executado, poderá ser semelhante ao mostrado na Figura 9.8 mostrada a seguir.

Demon

straç

ão

Page 81: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 9 | 187

Gerando a query EJBQL do sub-relatório

Execute o Report Query. Na caixa de diálogo Report query, selecione em Query language o item EJBQL.

Digite a query para selecionar todos os campos da entidade Produto, com a condição estabelecida por categoriaID, filtrando com o parâmetro recém criado PAR_CATID, como mostrado a seguir:

SELECT p FROM Produto p JOIN p.categoria cWHERE c.categoriaID = $P{PAR_CATID}

A Figura 9.9 a seguir mostra o resultado final da query escrita no Report query.

Figura 9.9 – A query criada para o sub-relatório

O design final do sub-relatório

Quanto aos campos, apenas o Nome do Produto (produtoNome), o Preço (pre-co) e Quantidade em Estoque (unidadesEmEstoque) serão exibidos. A Figura 9.10 a seguir ilustra o design final.

Demon

straç

ão

Page 82: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

190 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

SELECIONANDO APENAS ALGUNS OBJETOS COM EJB QLNo caso de precisar de apenas alguns objetos retornados pelo EJB QL, você não

pode utilizar a criação de “apelidos” nos campos retornados. Uma instrução como a mostrada a seguir:

select c.nome, p.pedidoID, p.dataPedidofrom Pedido p join p.cliente c

Retorna três campos/colunas, que são nomeados pelo iReport para NetBeans como COLUMN_x, onde x é o número da coluna/objeto na ordem existente na instrução.

Figura 9.13 – Uma query com apenas alguns objetos/valoresDemon

straç

ão

Page 83: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

10GERANDO RELATÓRIOS COM OUTRAS

FONTES DE DADOS

“Nunca ande pelo caminho traçado, pois ele conduz somente até onde os outros foram.”

Alexandre Graham Bell

Demon

straç

ão

Page 84: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 10 | 199

O JasperReports é rico no fornecimento de outras fontes de dados acessíveis para que possamos gerar relatórios.

Muitos sistemas costumam exportar diversos tipos de dados, sendo os mais comuns o formato CSV e XML.

Este capítulo tratará de outras formas de acesso que não utilizam um banco de dados diretamente.

USANDO XML PARA CRIAR RELATÓRIOS

Atualmente o XML (EXtensible Markup Language) é praticamente um padrão no desenvolvimento interoperativo de sistemas. Com a popularidade dos Web Servi-ces em 2004, a linguagem XML fincou sua bandeira na transmissão de dados. Isso significa que diversos sistemas e gerenciadores de banco de dados exportam neste formato. Por ser uma linguagem extensível, seu formato tem como característica principal sua semelhança em tags e atributos como o HTML (HyperText Markup Language). Mas a semelhança para por ai, pois o XML não contém tags pré-defini-das, possibilitando que cada fornecedor crie suas próprias tags. Mas graças a sua semântica de não poder conter tags desordenadas, sua leitura é de fácil acesso.

O iReport suporta o uso de XML como datasource desde a versão 0.4.0, graças ao suporte do JasperReports.

CRIANDO UM RELATÓRIO COM XMLPara a criação de um relatório usando XML, você tem o seguinte formato encon-

trado em um arquivo chamado produtos.xml, como mostrado na Listagem 10.1.

Listagem 10.1 – O arquivo produtos.xml<?xml version=”1.0” encoding=”UTF-8”?><produtos> <produto id=”1”> <nome>Chopp e Pêssego DRAFT &amp; FRUIT</nome> <categoria>1</categoria> <preco>1.99</preco> <qdtEmEstoque>39</qdtEmEstoque> <imagem>chopp_pessego.jpg</imagem> </produto> <produto id=”2”>

Demon

straç

ão

Page 85: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

202 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Expanda o nó de produtos e, em produto, clique com o direito do mouse. Sele-cione Set record node (generate xPath), no menu de contexto (Figura 10.2). Obser-ve que foi adicionada a expressão XPath:

/produtos/produto

Figura 10.2 – Adicionando o nó de pesquisa através do XPath

O que é XPath?

O XPath (XML Path Language) é uma linguagem de consulta usada para pesquisar e recuperar informações contidas nos nós de um documento XML. As consultas do XPath são formadas como expressões e são usadas para se referir às várias partes de um documento XML. Esta linguagem exibe um documento XML como uma árvore com tipos de nós diferentes. Suas expressões identificam esses nós no documento XML com base no seu tipo, nome e valores, bem como a relação de um nó com outros nós do documento.

Para definir os campos, clique com o direito do mouse sobre cada elemento e selecione, no menu de contexto, o item Add node as field (Figura 10.3).

Demon

straç

ão

Page 86: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

206 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Figura 10.5 – Definindo as características do arquivo CSV

REGISTRANDO OS CAMPOS DE UM ARQUIVO CSVNo Report query, você possui a guia CSV Datasource. Basta clicar no botão Get

fields from datasource. Os campos aparecem na parte inferior. Como ocorre com o arquivo XML, você pode definir a mudança de um tipo pois o iReport registra todos como java.lang.String.

Figura 10.6 – Definindo os campos de um arquivo CSV

Demon

straç

ão

Page 87: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

11SIMPLIFICANDO RELATÓRIOS COM

GROOVY

“O duro e rijo quebra. O flexível prepondera.”

Tao Te Ching

Demon

straç

ão

Page 88: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 11 | 221

Groovy é uma linguagem dinâmica escrita para a plataforma Java, inspirada em linguagens como Ruby, Python e Smalltalk. Embora seja simples de manipular e mui-to similar as linguagens de scripting, Groovy é um pouco mais complexo. Aplicações com Groovy podem ser pré-compiladas em bytecodes Java, para ser integrada à suas aplicações Java.

Graças a um Java Specification Request (JSR-241), Groovy se tornou a segunda linguagem oficial padrão do Java Virtual Machine (JVM), depois de Java, claro.

Desde a versão 0.6.6 do JasperReports, há suporte a linguagem Groovy. Com isso, quem ganha é o desenvolvedor, que tem em suas mãos uma maior simplicida-de no desenvolvimento de expressões em seus relatórios.

Neste capítulo você vai construir um relatório utilizando Groovy, trabalhando com expressões e aprenderá como rodar o relatório criado em suas aplicações tam-bém usando Groovy.

CRIANDO UM RELATÓRIO USANDO GROOVY

Crie um relatório e, selecionando na janela Report Inspector, o nome do relató-rio, vá até a propriedade (janela Properties) Language e selecione o item Groovy.

Graças a esta pequena mudança, você já valerá do uso de Groovy em seu rela-tório.

O iReport para NetBeans possui em seu diretório de instalação, em modules/ext, o arquivo groovy-all-1.5.5.jar.

O arquivo JasperReports usando Groovy

No arquivo JasperReports aberto, em XML, você possui no elemento raíz <jas-perReport/> o atributo language, com o valor groovy.

<jasperReport language=”groovy”...

INICIANDO O DESENVOLVIMENTO DO RELATÓRIO

Mantenha apenas as bands Page Header, Column Header, detail e Page Footer. Deixe a conexão como sendo a de SQL.

Demon

straç

ão

Page 89: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

12CRIANDO GRÁFICOS E SUBDATASET EM

SEUS RELATÓRIOS

“Uma imagem vale por mil palavras.”Provérbio Chinês

“Um bom esboço vale mais que um longo discurso.”Napoleão Bonaparte

Demon

straç

ão

Page 90: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 12 | 233

Como todo bom relatório, não poderia faltar os gráficos. Simples e eficazes, os gráficos exibem uma situação visualmente impactante, possibilitando um entendi-mento muito maior, mais rico, do que apenas números e textos.

O JasperReports possui suporte a geração de gráficos, facilitando o desenvolvi-mento do relatório, através da biblioteca JFreeChart.

Neste capítulo será apresentado como criar gráficos em um relatório JasperRe-ports usando o iReport para NetBeans, além de aprender a trabalhar com consultas diferentes no mesmo relatório, o que chamamos de Subdataset.

CRIANDO UM GRÁFICO SIMPLES

O primeiro exemplo na geração de relatórios com gráficos um gráfico no forma-to de pizza 3D (Pie 3D). A Figura 12.1 a seguir ilustra o resultado final.

Figura 12.1 – Relatório gerado completo

Demon

straç

ão

Page 91: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 12 | 243

Como o gráfico é de barras, você terá como categorias os nomes dos clientes e os valores o total encontrado das compras efetuadas por cada um no respectivo período. Observe que Series expression é o mesmo que Value axis label expression. Confirme tudo e dê um Preview.

Figura 12.6 – Resultado final do relatório utilizando um tema padrão do iReport

Demon

straç

ão

Page 92: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

244 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

GRÁFICOS DE LINHAS

Por último, o relatório que será criado utilizará um gráfico de linhas para repre-sentar a demanda de vendas 4 de um determinado produto. A Figura 12.7 demons-tra o resultado do relatório final.

Figura 12.7 – Resultado final do relatório utilizando um gráfico de linhas

4 Baseado no livro Excel Avançado 2003/2007 Forecast – Análise de Previsão de Demanda (veja bibliografia)

Demon

straç

ão

Page 93: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

13INTERNACIONALIZANDO RELATÓRIOS

“Informação é a matéria prima mais importante da humanidade.”

Waldez Ludwig

Demon

straç

ão

Page 94: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 13 | 251

Aplicações internacionalizadas são muito comuns no mundo do desenvolvimen-to. Não seria diferente no caso dos relatórios. O JasperReports introduziu esta ca-racterística na versão 0.6.2 e desde então seu suporte foi acrescentado ao iReport, facilitando mais ainda seu desenvolvimento.

Neste capítulo será criada uma aplicação Java desktop simples, pelo NetBeans, para ser usada com um relatório internacionalizado gerado pelo iReport.

CRIANDO SEU RELATÓRIO INTERNACIONALIZADO

Para ilustrar o seu desenvolvimento crie um projeto Java no NetBeans IDE, onde há também instalado o plugin do iReport.

Em seu projeto, crie um pacote, se não o tiver feito ao criar a classe Main, cli-cando com o direito do mouse sobre Source Packages e selecionando no menu de contexto o item New>Java Package. Se preferir seguir o exemplo do livro, digite br.com.integrator no campo Package Name, da caixa de diálogo New Java Package.

A internacionalização da aplicação exigirá a geração de um arquivo .properties. Crie um novo arquivo, clicando com o direito do mouse sobre o pacote br.com.in-tegrator (ou o gerado por você). No menu de contexto, selecione New>Other. Na caixa de diálogo New File, selecione Other>Properties File.

Ao avançar no assistente, digite rotulos (sem acento) e clique no botão Finish para confirmar.

Atenção: Adicione as bibliotecas do JasperReports e do JDBC do banco de dados MySQL.

Adicionando as chaves e valores do arquivo

O NetBeans exibirá em seu editor o arquivo recém criado. Altere-o como mostra-do a seguir, na Listagem 13.1, e salve clicando no botão Save.

Demon

straç

ão

Page 95: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

14CROSSTABS

Fazendo o melhor neste momento o colo-ca na melhor situação para o próximo.”

Oprah Winfrey

Demon

straç

ão

Page 96: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 14 | 259

Crosstabs (cross-tabulation), no JasperReports, são tabelas cruzadas, comuns no desenvolvimento de relatórios com a utilização de planilhas eletrônicas, também conhecidas por tabelas dinâmicas ou tabelas de referências cruzada.

Diferente dos demais relatórios criados até o momento no livro, um relatório crosstab possui uma tabela contendo um número de linhas e colunas que não se conhece em tempo de design.

Graças ao iReport, você pode contar com o uso de um assistente, tornando esta tarefa não muito complicada.

Neste capítulo você aprenderá a criar crosstabs no iReport, modificar, formatar e usar também subdatasets para relatórios mais complexos.

CRIANDO SEU PRIMEIRO RELATÓRIO CROSSTAB

O design não necessitará da maioria das bands, uma vez que apenas a band Summary será usada neste primeiro exemplo.

Crie um novo relatório, sem o uso do assistente.

Criando a query

Em seu relatório, crie uma query contendo apenas o nome do cliente (clientes.nome), o código do pedido (pedidos.PedidoID) e a data do pedido (pedidos.data-Pedido).

Sua query será similar a mostrada a seguir:

SELECT clientes.nome, pedidos.dataPedido, pedidos.PedidoIDFROM clientes INNER JOIN pedidos ON clientes.ClienteID = pedidos.ClienteID

Demon

straç

ão

Page 97: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

262 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

Como a tabela criada tem uma área exclusiva, também não poderia deixar de possuir características próprias para sua manipulação.

1. Na janela Report Inspector é possível visualizar os parâmetros, grupos, mea-sures e demais itens que compõem a crosstab gerada.

2. No Designer da crosstab, podemos alterar a largura, altura, formatação de cada componente selecionando-o e modificando-o através da janela Properties.

3. Na janela Properties há um pequeno conjunto de propriedades próprias para o elemento crosstab.

Se você executar o relatório, em Preview, observará melhor sua disposição, como mostrada na Figura 14.4.

Na parte superior haverá os anos em que cada cliente efetuou sua compra e na la-teral seus respectivos nomes. Os dados agrupados, contam o número de pedidos efe-tuados em cada ano. Ao final, você possui o total de pedidos efetuados por cliente.

Figura 14.4 – Relatório Crosstab (agrupado por clientes e pedidos por ano)

Demon

straç

ão

Page 98: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 14 | 267

Arraste PedidoIDMeasure para Detail /Mes, expandindo Measures na janela Report Inspector. Formate com cor de fundo para a célula, alinhamentos de texto e alterações de borda. Na célula Mestotal header, adicione um elemento Static Text e digite Total.

Na última linha, desta coluna, adicione na célula que resta a measure da janela Report Inspector chamada de PedidoIDMeasure. Esta variável irá contar o período de todos os meses do ano e o adicionará no relatório. Como os demais, formate.

Figura 14.9 – Resultado final do exemplo desenvolvido

Ao executar o relatório, você terá um resultado similar ao mostrado na Figura 14.10 a seguir:

Figura 14.10 – Resultado final na execução do relatório

Demon

straç

ão

Page 99: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 14 | 269

CRIANDO UMA CROSSTAB COM SUBDATASET

Vamos partir da hipótese que você deseja visualizar um relatório contendo as com-pras efetuadas por cada cliente, agrupados por produto, como mostra a Figura 14.11.

Figura 14.11 – Relatório contendo Crosstab e Subdataset

Crie um novo relatório e mantenha apenas as bands: Title, Page Header, Detail e Page Footer.

Os elementos que serão adicionados são: Static Texts e Text Fields. Apenas os detalhes necessários para criar o assunto deste tópico serão apresentados.

Aos demais, a Figura 14.12 mostra o resultado final do design do seu relatório.

Demon

straç

ão

Page 100: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

15OUTRAS CARACTERÍSTICAS DA GERAÇÃO

DE RELATÓRIOS

“Nós somos o que repetidamente fazemos. Exce-lência, então, não é um ato, mas um hábito.”

Aristóteles

Demon

straç

ão

Page 101: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 15 | 277

Neste capítulo você conhecerá outras características da ferramenta iReport, além do JasperReports, que não foram apresentadas até o momento, sendo passa-das como dicas.

TRATANDO RELATÓRIOS GRANDES

O virtualizador de relatórios é uma forma de minimizar a criação de relatórios JasperReports grandes. Esta opção ajuda a minimizar a limitação física, economizan-do na memória usada e empregando outras formas avaliadas (geralmente o disco rí-gido) para salvar páginas completas durante a impressão de um relatório. Isso evita que relatórios grandes recebam a mensagem de exceção “Out of Memory”.

Para configurar o Report Virtualizer, vá ao menu Tools e clique em Options. Na guia Virtualizer, você possui o grupo Report Virtualizer. Em Use this virtualizer você possui três opções que estão destinadas a configuração de três tipos de virtua-lizadores fornecidos pelo JasperReports (iReport): JRFileVirtualizer (File Virtualizer), JRSwapFileVirtualizer (Single Swap/File Virtualizer) e JRGzipVirtualizer.JRFileVirtu-alizer (GZIP In-memory Virtualizer).

Figura 15.1 – Onde configurar a virtualização de relatórios grandes no iReport

Demon

straç

ão

Page 102: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

16SCRIPTLET

“Mude seu modo de pensar e você mudará seu mundo.”Norman Vincent Peale

Demon

straç

ão

Page 103: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 16 | 289

Um scriptlet é uma classe Java desenvolvida unicamente para executar durante a geração da impressão do relatório na tela. O scriptlet possui métodos que são invocados na geração de relatórios possibilitando manipulá-los, como a ocorrência da criação de uma nova página ou o acesso a um determinado parâmetro.

Neste capítulo será visto como escrever um simples scriptlet, qual a sua utilida-de e como usá-lo em seu relatório.

A CLASSE JRABSTRACTSCRIPTLET

Para implementar um scriptlet em seus relatórios, primeiro você deve criar uma classe estendendo a classe JRAbstractScriptlet, de net.sf.jasperreports.engine. Esta classe expõe todos os métodos abstratos que manipulam os eventos que ocorrem durante a geração de um relatório e fornece estrutura de dados para acessar todas as variáveis, campos e parâmetros presentes no relatório.

O JasperReports fornece uma implementação bem simples através da classe JR-DefaultScriptlet (veja a Listagem 16.1), estendendo a classe abstrata JRAbstractS-criptlet.

Listagem 16.1 – A classe JRDefaultScriptletpackage net.sf.jasperreports.engine;/*** @author Teodor Danciu ([email protected])* @version $Id: JRDefaultScriptlet.java,v 1.3 2004/06/01 20:28:22 teodord Exp $*/public class JRDefaultScriptlet extends JRAbstractScriptlet{ public JRDefaultScriptlet() { } public void beforeReportInit() throws JRScriptletException { } public void afterReportInit() throws JRScriptletException { } public void beforePageInit() throws JRScriptletException { } public void afterPageInit() throws JRScriptletException { } public void beforeColumnInit() throws JRScriptletException {

Demon

straç

ão

Page 104: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

296 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE

DESENVOLVENDO O RELATÓRIO

Conforme o já visto no Capítulo 10, podemos trabalhar diretamente com arqui-vos CSV, simplesmente informando o arquivo e sua estrutura para a leitura.

O relatório proposto possui o design tabular, conforme a Figura 16.2 ilustra após executado.

Figura 16.2 – Preview do relatório criado usando CSV e Scriptlet

Portanto, dentro do seu projeto no NetBeans IDE, no mesmo pacote criado, gere um novo relatório sem o uso de assistentes.

A CONEXÃO COM O ARQUIVO CSVPara preparar o relatório, inicialmente, você terá que ler o Scriptlet e também

o arquivo CSV.

O arquivo CSV, chamado de pedidos.csv, se encontra nos arquivos que você já fez download, no diretório arquivos/csv.

Crie uma conexão CSV, conforme ilustrado no Capítulo 10, onde, na guia Se-parators, você deverá marcar Semicolon em Field separator (char) e, New line, em Row separator.

Demon

straç

ão

Page 105: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 16 | 301

COMO EVITAR VALORES REPETIDOS EM UM RELATÓRIO

Como dica, caso queira evitar valores repetidos no relatório, como ocorre na co-luna Produto, você pode selecionar o Text Field, no Designer, e desmarcar a opção Print Repeated Values.

Figura 16.6 – Relatório exibindo dados sem campos repetidos

No JasperReports, você verá o elemento <reportElement /> com a propriedade isPrintRepeatedValues contendo o valor false (o padrão é true).

<textField ...> <reportElement isPrintRepeatedValues=”false” ...> ... </reportElement></textField>

FORÇANDO O VALOR A APARECER AO MENOS UMA VEZ EM CADA PÁGINA

Se colocarmos um determinado campo para não repetir valores, logo percebe-remos um problema, se este campo estiver em uma segunda página, não teremos como saber de qual se trata sem olhar a página anterior (ou anteriores).

Para evitar isso, basta forçar sua impressão na primeira vez que a band for usada na página. Nas propriedades, marque Print In First Whole Band.

Demon

straç

ão

Page 106: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

17DESENVOLVENDO SEUS PRÓPRIOS

TEMPLATES

“Nossa maior fraqueza está em desistir. O caminho mais seguro para o sucesso é sempre tentar apenas uma vez mais.”

Thomas Edison

Demon

straç

ão

Page 107: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 17 | 305

Quando usamos um assistente de criação de relatórios, na última etapa fazemos uso de templates. Algumas vezes pode ser útil criar um ou vários templates para usar no assistente.

Neste Capítulo você vai aprender a criar seus próprios templates e utilizá-los no iReport.

CRIANDO UM RELATÓRIO MODELO

Para a geração de um template é necessário apenas criar um relatório vazio, sem dados, usando no máximo quatro grupos.

Na criação do relatório base, que servirá como template, você deve estar atento ao detalhe do nome do arquivo/relatório. Este nome deve terminar com C de Colu-mnar ou com T de Tabular. É assim que o iReport diferenciará o template colunar ou tabular na opção de layout do seu assistente de criação de relatório.

No exemplo, o Template mostrado na Figura 17.1 utiliza um formato colunar, o que o fez ser chamado de TemplateExemploC.jrxml, onde você pode observar o término do nome do arquivo com “C” maiúsculo.

Para começar, mantenha apenas as bands: Title, Detail e PageFooter.

Na band Title adicione um Static Text e coloque o texto Template de Exemplo. Altere sua cor de fundo e fonte se achar necessário.

Figura 17.1 – Template criado para o exemplo deste capítulo

Demon

straç

ão

Page 108: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

Capítulo 17 | 309

Figura 17.3 – Resultado final do template e seu preview no assistente de relatório

Demon

straç

ão

Page 109: 14811322 Desenvolvendo Relatorios Profissionais Com iReport Para Netbeans IDE

APÊNDICE

EXPORTANDO PARA OUTROS FORMATOS

Demon

straç

ão