• Nenhum resultado encontrado

IReport Crie Relatorios Praticos e Elegantes - Casa Do Codigo

N/A
N/A
Protected

Academic year: 2021

Share "IReport Crie Relatorios Praticos e Elegantes - Casa Do Codigo"

Copied!
138
0
0

Texto

(1)
(2)
(3)

Maurício Morais é analista de sistemas, mestrando em Maurício Morais é analista de sistemas, mestrando em Informática Aplicada e pós-graduado em desenvolvimento de Informática Aplicada e pós-graduado em desenvolvimento de sistemas com ênfase na arquitetura J2EE pela Universidade de sistemas com ênfase na arquitetura J2EE pela Universidade de Fortaleza. Possui mais de 20 anos de experiência profissional em Fortaleza. Possui mais de 20 anos de experiência profissional em desenvolvimento de software.

desenvolvimento de software.

Tutor a distância do curso de licenciatura em Computação a Tutor a distância do curso de licenciatura em Computação a Distância na Universidade Estadual do Ceará, e professor do curso Distância na Universidade Estadual do Ceará, e professor do curso de desenvolvimento web com JSF, Hibernate e iReport na de desenvolvimento web com JSF, Hibernate e iReport na Universidade de Fortaleza.

Universidade de Fortaleza.

SOBRE O AUTOR 

SOBRE O AUTOR 

(4)

Primeiramente, agradeço a Deus, que até aqui nos tem Primeiramente, agradeço a Deus, que até aqui nos tem proporcionado uma vida cheia de adversidade, mas também de proporcionado uma vida cheia de adversidade, mas também de  vitória, acima de tudo

 vitória, acima de tudo..

Aos meus pais, Gerson Augusto de Oliveira (em memória) e Aos meus pais, Gerson Augusto de Oliveira (em memória) e Hulda Morais de Oliveira, que me ensinaram princípios e valores Hulda Morais de Oliveira, que me ensinaram princípios e valores éticos que têm norteado a minha existência e que venho tentando éticos que têm norteado a minha existência e que venho tentando repassar aos meus filhos.

repassar aos meus filhos.

A minha esposa Vera Lúcia, que sempre me apoia, incentiva e A minha esposa Vera Lúcia, que sempre me apoia, incentiva e está sempre ao meu lado.

está sempre ao meu lado.

Aos meus filhos Júlia e Lucas, que a cada ano que passa sempre Aos meus filhos Júlia e Lucas, que a cada ano que passa sempre me enchem de orgulho com suas conquistas.

me enchem de orgulho com suas conquistas.

Aos meus tios Gentil e Teresa Augusto de Oliveira e família, Aos meus tios Gentil e Teresa Augusto de Oliveira e família, pelo o apoio e acolhimento quando morei em sua casa no Rio de pelo o apoio e acolhimento quando morei em sua casa no Rio de Janeiro.

Janeiro.

Às minhas tias Raimunda, Onezilda (em memória), Amália e Às minhas tias Raimunda, Onezilda (em memória), Amália e Noemi, que sempre apoiaram meus pais e contribuiram Noemi, que sempre apoiaram meus pais e contribuiram significativamente na minha educação.

significativamente na minha educação.

Aos meus irmãos Marcia, Marta, Gerson Junior, Marcílio e Aos meus irmãos Marcia, Marta, Gerson Junior, Marcílio e Matheus, que sempre me incentivaram e apoiaram em situações Matheus, que sempre me incentivaram e apoiaram em situações adversas.

adversas.

Aos amigos que fiz ao longo dos 15 anos que morei no Rio de Aos amigos que fiz ao longo dos 15 anos que morei no Rio de Janeiro e que me proporcionaram momentos épicos. Em especial, Janeiro e que me proporcionaram momentos épicos. Em especial, Ricardo Braga, Carlos André e

Ricardo Braga, Carlos André e Eduardo Fonseca.Eduardo Fonseca.

Aos meus alunos do curso de desenvolvimento web com JSF, Aos meus alunos do curso de desenvolvimento web com JSF, Hibernate e iReport na Universidade de Fortaleza. Suas críticas e Hibernate e iReport na Universidade de Fortaleza. Suas críticas e

AGRADECIMENTOS

AGRADECIMENTOS

(5)

sugestões contribuíram para melhoria do material didático que sugestões contribuíram para melhoria do material didático que utilizo no curso e que serviram para nortear o

utilizo no curso e que serviram para nortear o conteúdo deste livro.conteúdo deste livro. Ao departamento de educação continuada da Universidade de Ao departamento de educação continuada da Universidade de Fortaleza pela parceria no curso de desenvolvimento web com JSF, Fortaleza pela parceria no curso de desenvolvimento web com JSF, hibernate e iReport.

hibernate e iReport.

Ao Roberto Gadelha da Secrel de Fortaleza, que me apresentou Ao Roberto Gadelha da Secrel de Fortaleza, que me apresentou o iReport, e que teve paciência, tranquilidade e dedicação ao me o iReport, e que teve paciência, tranquilidade e dedicação ao me ensinar a implementar meus primeiros relatórios com iReport.

ensinar a implementar meus primeiros relatórios com iReport.

Ao editor Márcio Marcelli, que me orientou durante a escrita do Ao editor Márcio Marcelli, que me orientou durante a escrita do livro, me passando dicas e

livro, me passando dicas e sugestões, e tirando dúvidas.sugestões, e tirando dúvidas.

Não poderia deixar de agradecer aos editores Paulo Silveira e Não poderia deixar de agradecer aos editores Paulo Silveira e Adriano Almeida, que acreditaram e apoiaram o meu projeto de Adriano Almeida, que acreditaram e apoiaram o meu projeto de escrever um livro sobre iReport.

escrever um livro sobre iReport.

Em fim, aos meus colegas de trabalho que, ao longo destes anos, Em fim, aos meus colegas de trabalho que, ao longo destes anos, no dia a dia contribuíram direta ou indiretamente para meu no dia a dia contribuíram direta ou indiretamente para meu crescimento pessoal e profissional.

(6)

Criar o design do relatório diretamente em XML pode ser uma Criar o design do relatório diretamente em XML pode ser uma tarefa muito demorada e improdutiva. Seria bom se existisse uma tarefa muito demorada e improdutiva. Seria bom se existisse uma ferramenta fácil de usar e intuitiva que automatizasse esse processo. ferramenta fácil de usar e intuitiva que automatizasse esse processo. O iReport veio preencher essa lacuna, facilitando a definição e o O iReport veio preencher essa lacuna, facilitando a definição e o design do relatório com um ambiente gráfico e com todos os design do relatório com um ambiente gráfico e com todos os recursos que a biblioteca Jasper oferece.

recursos que a biblioteca Jasper oferece.

O iReport facilita a definição de relatórios com designs O iReport facilita a definição de relatórios com designs modernos e complexos, sem a necessidade de escrever uma linha de modernos e complexos, sem a necessidade de escrever uma linha de código em XML, e é todo gerado automaticamente. O ambiente código em XML, e é todo gerado automaticamente. O ambiente disponibiliza para o desenvolvedor atalhos para tarefas de disponibiliza para o desenvolvedor atalhos para tarefas de compilação e visualização do relatório, proporcionando a realização compilação e visualização do relatório, proporcionando a realização de testes e, consequentemente, uma maior produtividade no de testes e, consequentemente, uma maior produtividade no processo de design.

processo de design.

É uma ferramenta gráfica que possibilita desenhar e configurar É uma ferramenta gráfica que possibilita desenhar e configurar um relatório ao arrastar e soltar componentes, de forma bem um relatório ao arrastar e soltar componentes, de forma bem parecida com a criação de interfaces e janelas de

parecida com a criação de interfaces e janelas de algumas linguagensalgumas linguagens de programação com Delphi e Visual Basic.

de programação com Delphi e Visual Basic.

Ao salvar, automaticamente será gerado um arquivo

Ao salvar, automaticamente será gerado um arquivo JRXMLJRXML

que será utilizado em uma aplicação. A vantagem é que não é que será utilizado em uma aplicação. A vantagem é que não é necessário conhecer a fundo o

necessário conhecer a fundo o XMLXML a ser editado, economizandoa ser editado, economizando

tempo de desenvolvimento. Ele também disponibiliza um conjunto tempo de desenvolvimento. Ele também disponibiliza um conjunto de modelos (

de modelos (templatestemplates) que pode ser usado, sendo possível também) que pode ser usado, sendo possível também

escrever os próprios modelos para serem

escrever os próprios modelos para serem reaproveitados sempre quereaproveitados sempre que houver necessidade de criar um novo tipo de relatório.

houver necessidade de criar um novo tipo de relatório. Este livro apresenta, de forma didática e

Este livro apresenta, de forma didática e prática, como utilizar osprática, como utilizar os recursos do iReport para implementar relatórios com Java.

recursos do iReport para implementar relatórios com Java. O leitor aprenderá como:

O leitor aprenderá como:

PREFÁCIO

PREFÁCIO

(7)

1.

1. Utilizar a Utilizar a interface de dinterface de desenvolvimento desenvolvimento do iReport;o iReport; 2.

2. Criar Criar o o design do design do relatórrelatório;io; 3.

3. Criar parâmetrosCriar parâmetros, atributos , atributos e variáveis e variáveis em um relatóem um relatório;rio; 4.

4. Gerar relatório uGerar relatório utilizando como tilizando como fonte de dados fonte de dados ArrayList;ArrayList;

5. Gerar relatório utilizando como fonte de dados instruções 5. Gerar relatório utilizando como fonte de dados instruções

SQL; SQL; 6.

6. Gerar Gerar relatório relatório com com gráficos;gráficos; 7.

7. Gerar Gerar relatório relatório com com sub-relatórios;sub-relatórios; 8.

8. Gerar Gerar relatório relatório com com Map;Map; 9.

9. Gerar Gerar relatório relatório com com Crosstab.Crosstab.

O leitor deste livro terá a oportunidade de entender detalhes de O leitor deste livro terá a oportunidade de entender detalhes de como implementar relatórios utilizando iReport com extrema como implementar relatórios utilizando iReport com extrema facilidade e produtividade.

facilidade e produtividade.

O livro tem por objetivo mostrar para estudantes, O livro tem por objetivo mostrar para estudantes, programadores e desenvolvedores quais são os conhecimentos programadores e desenvolvedores quais são os conhecimentos necessários para implementação de relatórios com Java usando um necessários para implementação de relatórios com Java usando um dos principais framework da arquitetura Java.

dos principais framework da arquitetura Java. Participe das discussões sobre o livro

Participe das discussões sobre o livro iReport: Crie relatóriosiReport: Crie relatórios práticos e elegantes

práticos e elegantes, em, em http://forum.casadocodigo.com.brhttp://forum.casadocodigo.com.br, para, para

tirar dúvidas, críticas e

(8)

1 1 11 33 44 13 13 19 19 19 19 20 20 23 23 26 26 48 48 59 59 60 60 60 60 74 74 78 78 81 81 82 82 82 82

Sumário

Sumário

1 Introdução 1 Introdução 1.1 JasperReports 1.1 JasperReports 1.2 Instalação do iReport 1.2 Instalação do iReport 1.3 Interface de

1.3 Interface de desenvolvimentodesenvolvimento

1.4 Criando o primeiro relatório

1.4 Criando o primeiro relatório

2 Relatório com ArrayList

2 Relatório com ArrayList

2.1 Aplicativo de demonstração

2.1 Aplicativo de demonstração

2.2 Classes que vamos utilizar

2.2 Classes que vamos utilizar

2.3 Métodos para visualização dos relatórios

2.3 Métodos para visualização dos relatórios

2.4 Criando um relatório de listagem

2.4 Criando um relatório de listagem

2.5 Criando relatório com agrupamento

2.5 Criando relatório com agrupamento

2.6 Conclusão

2.6 Conclusão

3 Relatório com SQL

3 Relatório com SQL

3.1 Criando relatório de listagem com SQL

3.1 Criando relatório de listagem com SQL

3.2 Criando relatório com SQL e com parâmetro

3.2 Criando relatório com SQL e com parâmetro

3.3 Criando relatório com SQL e com agrupamento

3.3 Criando relatório com SQL e com agrupamento

3.4 Conclusão

3.4 Conclusão

4 Relatório com gráfico

4 Relatório com gráfico

4.1 Criando relatório com gráfico de pizza

4.1 Criando relatório com gráfico de pizza

Sumário Sumário Casa do Código

(9)

94 94 95 95 95 95 106 106 108 108 108 108 114 114 116 116 116 116 123 123 125 125 125 125 126 126 126 126 129 129 4.2 Conclusão 4.2 Conclusão

5 Relatório com sub-relatório

5 Relatório com sub-relatório

5.1 Criando relatórios com

5.1 Criando relatórios com sub-relatóriosub-relatório

5.2 Conclusão

5.2 Conclusão

6 Relatório com Map

6 Relatório com Map

6.1 Criando relatórios com Map

6.1 Criando relatórios com Map

6.2 Conclusão

6.2 Conclusão

7 Relatório com Crosstab

7 Relatório com Crosstab

7.1 Criando relatórios com Crosstab

7.1 Criando relatórios com Crosstab

7.2 Conclusão

7.2 Conclusão

8 Apêndice

8 Apêndice

8.1 Introdução Jaspersoft Studio

8.1 Introdução Jaspersoft Studio

8.2 Interface do usuário

8.2 Interface do usuário

8.3 Novos recursos do Jaspersoft

8.3 Novos recursos do Jaspersoft Studio não disponíveis noStudio não disponíveis no

iReport Designer iReport Designer 9 Bibliografia 9 Bibliografia Casa do Código Casa do Código Sumário Sumário

(10)

C

CAPÍTULOAPÍTULO 1 1

Nos próximos tópicos, enfatizaremos as principais Nos próximos tópicos, enfatizaremos as principais características do JasperReports, e também vamos baixar e

características do JasperReports, e também vamos baixar e instalar oinstalar o iReport para podermos exercitar os nossos exemplos de criação e iReport para podermos exercitar os nossos exemplos de criação e geração de relatórios que vamos

geração de relatórios que vamos demonstrar.demonstrar.

O JasperReports é um framework

O JasperReports é um framework open sourceopen source, gratuito e o mais, gratuito e o mais

usado para geração de relatórios, capaz de criar os mais complexos usado para geração de relatórios, capaz de criar os mais complexos relatórios para aplicações Java. Como é escrito em Java, também é relatórios para aplicações Java. Como é escrito em Java, também é multiplataforma.

multiplataforma.

Por meio de uma interface gráfica e intuitiva, o desenvolvedor é Por meio de uma interface gráfica e intuitiva, o desenvolvedor é capaz de criar

capaz de criar diversos tipos de relatórios de forma simples e rápida.diversos tipos de relatórios de forma simples e rápida. Essa biblioteca proporciona uma grande facilidade na organização e Essa biblioteca proporciona uma grande facilidade na organização e apresentação de conteúdo, possibilitando a geração dinâmica de apresentação de conteúdo, possibilitando a geração dinâmica de relatórios. Ela também pode ser usada em qualquer aplicação Java, relatórios. Ela também pode ser usada em qualquer aplicação Java, como: aplicações desktop, web e

como: aplicações desktop, web e distribuídas.distribuídas.

O iReport é um designer/construtor visual de relatórios de uso O iReport é um designer/construtor visual de relatórios de uso fácil e intuitivo para o JasperReports. Por intermédio desta fácil e intuitivo para o JasperReports. Por intermédio desta ferramenta, podemos visualmente construir relatórios complexos ferramenta, podemos visualmente construir relatórios complexos contendo gráficos, imagens e sub-relatórios, uma vez que o iReport contendo gráficos, imagens e sub-relatórios, uma vez que o iReport é integrado à

é integrado à biblioteca do JasperReports.biblioteca do JasperReports. Dentre as

Dentre as funcionalidades do JasperReports, podemos destacar:funcionalidades do JasperReports, podemos destacar:

INTRODUÇÃO

INTRODUÇÃO

1.1 JASPERREPORTS

1.1 JASPERREPORTS

1 INTRODUÇÃO 1 INTRODUÇÃO 11

(11)
(12)

Figura 1.1: Fluxo de geração de relatório

Figura 1.1: Fluxo de geração de relatório

Quando iniciei a escrita deste livro, a versão que estava Quando iniciei a escrita deste livro, a versão que estava disponível para download no site era iReport 5.6.0.

disponível para download no site era iReport 5.6.0.

Primeiramente, deve-se acessar o site Primeiramente, deve-se acessar o site https://commun

https://community.jaspersoft.comity.jaspersoft.com/project/ireport-des/project/ireport-designer/igner/.. Então, dê um clique no link

Então, dê um clique no link Download iReport DesignerDownload iReport Designer .. Você encontrará opção de download para diversos produtos da Você encontrará opção de download para diversos produtos da Jaspersoft, clique no link

Jaspersoft, clique no link iReport DesigneriReport Designer . Lá, haverá a opção. Lá, haverá a opção de download do instalador para diversos sistemas operacionais, de download do instalador para diversos sistemas operacionais, então, selecione a opção equivalente ao seu sistema: Windows ou então, selecione a opção equivalente ao seu sistema: Windows ou Linux, conforme o caso. Faça download e salve o instalador na pasta Linux, conforme o caso. Faça download e salve o instalador na pasta de sua preferência.

de sua preferência.

No nosso contexto, instalamos a versão Windows:

No nosso contexto, instalamos a versão Windows: iReport- iReport-5.6.0-windows-installer.exe

5.6.0-windows-installer.exe e usamos o Java JRE na versãoe usamos o Java JRE na versão

1.2 INSTALAÇÃO DO IREPORT

1.2 INSTALAÇÃO DO IREPORT

Download iReport Designer

Download iReport Designer

1.2 INSTALAÇÃO DO IREPORT

(13)

1.7. 1.7.

Para quem utiliza o Java 1.8 ou superior, recomendamos baixar Para quem utiliza o Java 1.8 ou superior, recomendamos baixar oo Jaspersoft StudioJaspersoft Studio , que tem as mesmas funcionalidades do, que tem as mesmas funcionalidades do iReport. Recentemente, foi divulgado no site iReport. Recentemente, foi divulgado no site https://community.jaspersoft.com

https://community.jaspersoft.com   que que oo iReportiReport   seráserá

descontinuado e será substituído pelo

descontinuado e será substituído pelo Jaspersoft StudioJaspersoft Studio..

A figura a seguir mostra a tela principal do iReport. Ela contém A figura a seguir mostra a tela principal do iReport. Ela contém todos os recursos necessários para criamos o design e configuração todos os recursos necessários para criamos o design e configuração do nosso relatório. Vamos agora entender alguns recursos do nosso relatório. Vamos agora entender alguns recursos disponibilizad

disponibilizada a nela.nela.

Figura 1.2: Interface

Figura 1.2: Interface de Desenvolvimentode Desenvolvimento

Podemos ver na figura a tela que utilizamos para desenhamos o Podemos ver na figura a tela que utilizamos para desenhamos o relatório. Ele está dividido em 7

relatório. Ele está dividido em 7 seções, sendo cada uma responsávelseções, sendo cada uma responsável

1.3 INTERFACE DE DESENVOLVIMENTO

1.3 INTERFACE DE DESENVOLVIMENTO

Ambiente

Ambiente

Estrutura do relatório

Estrutura do relatório

(14)
(15)
(16)
(17)
(18)
(19)

Figura 1.7: Configurando a página

Figura 1.7: Configurando a página

Observe a figura seguinte no lado direito, não temos a opção do Observe a figura seguinte no lado direito, não temos a opção do menu Paleta, mas precisamos dele para adicionar componentes ao menu Paleta, mas precisamos dele para adicionar componentes ao relatório. Neste caso, o que fazer?

relatório. Neste caso, o que fazer?

Adicionando menu na Interface de

(20)

Figura 1.8: Adicionando Menu

Figura 1.8: Adicionando Menu

No menu do iReport, selecione a opção

No menu do iReport, selecione a opção JanelaJanela . Será. Será disponibilizado o submenu com diversas opções. Sempre que disponibilizado o submenu com diversas opções. Sempre que precisarmos adicionar recursos a nossa interface de precisarmos adicionar recursos a nossa interface de desenvolvim

desenvolvimento, utilizamos a ento, utilizamos a opçãoopção JanelaJanela do menu do iReport.do menu do iReport. No nosso contexto, para adicionar o menu

No nosso contexto, para adicionar o menu PaletaPaleta , temos duas, temos duas opções:

opções:

1.3 INTERFACE DE DESENVOLVIMENTO

(21)

1.

1. Clicar Clicar na na opçãoopção PaletaPaleta .. 2.

2. Clicar Clicar na na opçãoopção Redefinir JanelasRedefinir Janelas ..

Para redimensionar as áreas dos

Para redimensionar as áreas dos relatórios, temos duas opções:relatórios, temos duas opções: 1. Visualmente, clicando nas linhas que separa as áreas e 1. Visualmente, clicando nas linhas que separa as áreas e

arrastando para cima ou para

arrastando para cima ou para baixo.baixo. 2.

2. No No menumenu Report InspectorReport Inspector , clique na área desejada e, em, clique na área desejada e, em seguida, no menu

seguida, no menu PropriedadesPropriedades , altere o valor da, altere o valor da propriedade

propriedade Band heightBand height , informando o valor desejado., informando o valor desejado.

Redimension

(22)

Figura 1.9: Redimensionando

Figura 1.9: Redimensionando

Vamos, agora, criar nosso primeiro relatório, que chamaremos Vamos, agora, criar nosso primeiro relatório, que chamaremos de

de Hello WorldHello World ..

Esta é a tela inicial do iReport e, a partir dela, damos início à Esta é a tela inicial do iReport e, a partir dela, damos início à criação de relatórios.

criação de relatórios.

1.4 CRIANDO O PRIMEIRO RELATÓRIO

1.4 CRIANDO O PRIMEIRO RELATÓRIO

Hello World

Hello World

1.4 CRIANDO O PRIMEIRO RELATÓRIO

(23)

Figura 1.10: Tela inicial do iReport

Figura 1.10: Tela inicial do iReport

Após um clique na opção

Após um clique na opção arquivoarquivo , será visualizado um, será visualizado um submenu com as seguintes opções habilitadas:

submenu com as seguintes opções habilitadas: NewNew ,, OpenOpen ,, OpenOpen Recent File

Recent File ,, Configurar páginaConfigurar página ee SairSair . Clique na opção. Clique na opção  New

 New ..

A figura a seguir mostra a tela em que você define o nome, o A figura a seguir mostra a tela em que você define o nome, o relatório e a pasta de

relatório e a pasta de sua preferência onde você salvará o arquivo dosua preferência onde você salvará o arquivo do relatório. Neste caso, o nome do relatório é

relatório. Neste caso, o nome do relatório é helloWorldhelloWorld , e estou, e estou gravando na pasta

(24)

Figura 1.11: Definindo o nome do

Figura 1.11: Definindo o nome do relatóriorelatório

Na tela mostrada pela figura adiante, faremos o design do nosso Na tela mostrada pela figura adiante, faremos o design do nosso relatório, pois ela contém todos os recursos necessários para relatório, pois ela contém todos os recursos necessários para criamos o design e a

criamos o design e a configuração do nosso relatórioconfiguração do nosso relatório Hello World Hello World ..

Figura 1.12: Interface de

Figura 1.12: Interface de desenvolvimentodesenvolvimento

1.4 CRIANDO O PRIMEIRO RELATÓRIO

(25)

Veja a seleção dos componentes na figura a

Veja a seleção dos componentes na figura a seguir.seguir. 1.

1. Clique Clique no no componentecomponente Static TextStatic Text no menuno menu PaletaPaleta , , ee arraste para a seção

arraste para a seção TitleTitle do relatório.do relatório. 2.

2. Dê Dê um um clique no clique no componentecomponente Static TextStatic Text que colocamosque colocamos na seção

na seção TitleTitle , e altere a descrição para, e altere a descrição para Hello World Hello World ..

Figura 1.13:

Figura 1.13: Adicionando componenteAdicionando componente

Com o componente Static Text selecionado, vamos agora Com o componente Static Text selecionado, vamos agora colocar a descrição em negrito, selecionar a fonte e aumentar seu colocar a descrição em negrito, selecionar a fonte e aumentar seu tamanho.

(26)

Figura 1.14: Configurando propriedades

Figura 1.14: Configurando propriedades

1. Na propriedade

1. Na propriedade Fonte nameFonte name , selecione a fonte de sua, selecione a fonte de sua preferência.

preferência.

2. Na propriedade

2. Na propriedade SizeSize , selecione o tamanho de sua, selecione o tamanho de sua preferência.

preferência. 3.

3. Marque Marque a a propriedapropriedadede BoldBold para descrição ser impressa empara descrição ser impressa em negrito.

negrito.

Dê um clique na aba

Dê um clique na aba XMLXML e será mostrado o XML do relatório:e será mostrado o XML do relatório:

Figura 1.15: Hello World XML

Figura 1.15: Hello World XML

Menu Propriedade

Menu Propriedade

1.4 CRIANDO O PRIMEIRO RELATÓRIO

(27)

Dê um clique na aba

Dê um clique na aba PreviewPreview e será mostrado o relatório eme será mostrado o relatório em tempo de execução:

tempo de execução:

Figura 1.16: Hello World

Figura 1.16: Hello World

Agora que instalamos o iReport, aprendemos alguns recursos Agora que instalamos o iReport, aprendemos alguns recursos que a IDE proporciona, criamos e executamos o relatório

que a IDE proporciona, criamos e executamos o relatório HelloHello World 

World , podemos partir para os próximos capítulos em que vamos, podemos partir para os próximos capítulos em que vamos

aprender a criar relatórios um pouco mais

(28)

C

CAPÍTULOAPÍTULO 2 2

Para que possamos testar e rodar os relatórios que vamos criar Para que possamos testar e rodar os relatórios que vamos criar no decorrer dos capítulos deste livro, implementaremos um no decorrer dos capítulos deste livro, implementaremos um aplicativo de demonstração com todas as funcionalidades aplicativo de demonstração com todas as funcionalidades necessárias para poder executá-los.

necessárias para poder executá-los.

O aplicativo será implementado utilizando tecnologia Java web. O aplicativo será implementado utilizando tecnologia Java web. Os relatórios que implementaremos fazem parte do Sistema de Os relatórios que implementaremos fazem parte do Sistema de Gestão de Cliente, um aplicativo de E-mail Marketing da startup Gestão de Cliente, um aplicativo de E-mail Marketing da startup MMO DEVELOPER, especializada em desenvolvimento de software MMO DEVELOPER, especializada em desenvolvimento de software localizada em Fortaleza – CE , para gerenciar o relacionamento de localizada em Fortaleza – CE , para gerenciar o relacionamento de uma empresa com seus clientes.

uma empresa com seus clientes.

O aplicativo será implementado utilizando os seguintes O aplicativo será implementado utilizando os seguintes recursos:

recursos: 1.

1. Tomcat cTomcat como servomo servidor de idor de aplicaçaplicação – ão – Para Para maioresmaiores informações sobre Tomcat acesse o link  informações sobre Tomcat acesse o link  http://tomcat.apache.org/

http://tomcat.apache.org/;; 2.

2. JSF 2.0 JSF 2.0 com com ênfase emênfase em primefaces primefaces – Para maiores informações – Para maiores informações

sobre

sobre  primefaces primefaces   acesse acesse o o link link 

http://www.primefaces.org/showcase/

http://www.primefaces.org/showcase/;;

3. Como banco de dados, será usado o PostgresSQL, para 3. Como banco de dados, será usado o PostgresSQL, para

RELATÓRIO COM

RELATÓRIO COM

ARRAYLIST

ARRAYLIST

2.1 APLICATIVO DE DEMONSTRAÇÃO

2.1 APLICATIVO DE DEMONSTRAÇÃO

2 RELATÓRIO COM ARRAYLIST

(29)
(30)
(31)
(32)
(33)

comuns para todos os relatórios, como, por exemplo,

comuns para todos os relatórios, como, por exemplo, imagemLogoimagemLogo .. Inicialmente, instanciamos a classe

Inicialmente, instanciamos a classe HttpServletResponseHttpServletResponse para que o usuário possa

para que o usuário possa visualizar o relatório.visualizar o relatório.

public void

public void gerarRelatorio(StringerarRelatorio(String nomeRelatoriog nomeRelatorio HashMap paramRel, HashMap paramRel, List listaRel) List listaRel) throws Exception { throws Exception { FacesContext

FacesContext context context ==

FacesContext.getCurrentInstance(); FacesContext.getCurrentInstance(); HttpServletRespons

HttpServletResponse e response response == (HttpServletRespo

(HttpServletResponse) nse) context.getExternalcontext.getExternalContext()Context()   .getResponse();

  .getResponse(); ServletContext

ServletContext sc sc == (ServletContext)

(ServletContext) context.getExternalCcontext.getExternalContext()ontext()   .getContext();

  .getContext(); String relPath =

String relPath = sc.getRealPath("/"sc.getRealPath("/");); String imagemLogo =

String imagemLogo = relPath +

relPath + "resources/imagen"resources/imagens/logo_mmo.jpg";s/logo_mmo.jpg"; paramRel.put("imag

paramRel.put("imagemLogo", emLogo", imagemLogo);imagemLogo); paramRel.put("nmSi

paramRel.put("nmSistema", stema", Constants.NOME_SISTConstants.NOME_SISTEMA);EMA); paramRel.put("REPO

paramRel.put("REPORT_LOCALE", RT_LOCALE", new new Locale("pt", Locale("pt", "BR"));"BR")); JasperPrint

JasperPrint print print = = null;null;

A classe

A classe JRBeanCollectionDataSourceJRBeanCollectionDataSource transforma otransforma o   Arraylist

  Arraylist em umem um datasourcedatasource e, em seguida, a classee, em seguida, a classe JasperFillManager

JasperFillManager gera o relatório.gera o relatório.

JRBeanCollectionDa

JRBeanCollectionDataSource taSource rel rel == new

new JRBeanCollectionDataJRBeanCollectionDataSource(listaRel);Source(listaRel); print

print = = JasperFillManager.JasperFillManager. fillReport(relPat

fillReport(relPath h + + "relatorios/" "relatorios/" + + nomeRelatorio nomeRelatorio ++ ".jasper", paramRel,rel);

".jasper", paramRel,rel);

Com o relatório criado, nesse contexto configuramos o objeto Com o relatório criado, nesse contexto configuramos o objeto  response

 response para mostrar o relatório no formatopara mostrar o relatório no formato .pdf.pdf , e a classe, e a classe JasperExportManag

JasperExportManagerer exporta o objetoexporta o objeto printprint parapara .pdf.pdf ..

  response.setContentType("application/pdf");   response.setContentType("application/pdf");

response.addHeader

response.addHeader("Content-dispositio("Content-disposition", n", "attachment;"attachment; filename=\"" + nomeRelatorio + filename=\"" + nomeRelatorio + ".pdf\"");".pdf\""); JasperExportManager.exportReportToPdfStream(print, JasperExportManager.exportReportToPdfStream(print,   response.getOutputStream());   response.getOutputStream());

(34)

ServletOutputStrea

ServletOutputStream m responseStream responseStream == response.getOutputStream(); response.getOutputStream();   responseStream.flush();   responseStream.flush();   responseStream.close();   responseStream.close();   FacesContext.getCurrentInstance().renderResponse();   FacesContext.getCurrentInstance().renderResponse();   FacesContext.getCurrentInstance().responseComplete();   FacesContext.getCurrentInstance().responseComplete(); } } Na classe

Na classe UFMBUFMB , adicionamos o método, adicionamos o método relatóriorelatório , que será, que será responsável pela chamada da consulta, pela preparação dos responsável pela chamada da consulta, pela preparação dos parâmetros do relatório e pela chamada do método parâmetros do relatório e pela chamada do método  gerarRelatório

 gerarRelatório . Nela passamos os seguintes parâmetros: o nome. Nela passamos os seguintes parâmetros: o nome do relatório que deve ser visualizado, os parâmetros do relatório e o do relatório que deve ser visualizado, os parâmetros do relatório e o arraylist com as

arraylist com as informações que serão disponibilizadas.informações que serão disponibilizadas.

public class UFMB extends AbstractMB { public class UFMB extends AbstractMB {

public

public void void relatorio() relatorio() throws throws Exception Exception {{ try {

try {

List<UF> listagemResultado =

List<UF> listagemResultado = ufDao.consulta(uf)ufDao.consulta(uf);; HashMap paramRel = new HashMap();

HashMap paramRel = new HashMap(); String

String nomeRelatorio nomeRelatorio = = "relUF";"relUF"; gerarRelatorio(nomeR

gerarRelatorio(nomeRelatorio, elatorio, paramRel,paramRel,   listagemResultado);

  listagemResultado); }

} catch catch (NegocioException (NegocioException e) e) {{   addMsgErro(e.getMessage());   addMsgErro(e.getMessage()); } } } } } } Na página

Na página UF.xhtmlUF.xhtml de nossa aplicação, incluímos um botãode nossa aplicação, incluímos um botão da tag

da tag PrimeFacesPrimeFaces para poder iniciar a para poder iniciar a execução do relatório.execução do relatório.

<p:commandButton <p:commandButton value="Relatório" ajax="false" value="Relatório" ajax="false" actionListener="#{ufMB.relatorio}"> actionListener="#{ufMB.relatorio}"> </p:commandButton> </p:commandButton>

Classe UFMB

Classe UFMB

UF.xhtml

UF.xhtml

2.3 MÉTODOS PARA VISUALIZAÇÃO DOS RELATÓRIOS

(35)

Nosso desafio inicial é implementar o relatório de unidade Nosso desafio inicial é implementar o relatório de unidade federativa, conforme layout da figura a seguir.

federativa, conforme layout da figura a seguir.

Figura 2.1: Layout do relatório

Figura 2.1: Layout do relatório

O relatório é composto de um

O relatório é composto de um cabeçalho, que contém:cabeçalho, que contém: 1.

1. Uma imagem Uma imagem com o com o logo da logo da empresa;empresa; 2.

2. O O nome nome do do sistema;sistema; 3.

3. A A data data de de impressão;impressão; 4.

4. Contador Contador de de páginas;páginas; 5.

5. O O nome nome de de relatórirelatório.o.

Em seguida, uma área é reservada para colocar o nome das Em seguida, uma área é reservada para colocar o nome das colunas do relatório. Normalmente, é o nome que identifica o colunas do relatório. Normalmente, é o nome que identifica o atributo que será mostrado na mesma coluna na área

atributo que será mostrado na mesma coluna na área DetailDetail .. Finalmente, temos a área

Finalmente, temos a área DetailDetail que é onde colocamos asque é onde colocamos as informações da UF que serão mostradas no relatório, que é o seu informações da UF que serão mostradas no relatório, que é o seu objetivo principal.

objetivo principal.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

Layout do relatório

Layout do relatório

(36)

Para a implementação do nosso relatório, vamos usar a interface Para a implementação do nosso relatório, vamos usar a interface de desenvolvimento do iReport. Como já foi dito anteriormente, de desenvolvimento do iReport. Como já foi dito anteriormente, fazer o relatório diretamente em um arquivo

fazer o relatório diretamente em um arquivo xmlxml é uma tarefaé uma tarefa muito custosa e improdutiva. Para isso, utilizaremos a interface do muito custosa e improdutiva. Para isso, utilizaremos a interface do iReport por ser bastante intuitiva e

iReport por ser bastante intuitiva e de fácil manuseio.de fácil manuseio. Após criar o relatório

Após criar o relatório relUFrelUF , estando na interface de, estando na interface de desenvolvimento no menu

desenvolvimento no menu Report InspectorReport Inspector :: Primeirame

Primeiramente, vamos adicionar nte, vamos adicionar o parâmetroo parâmetro imagemLogoimagemLogo queque será usada para mostrar a

será usada para mostrar a imagem do logo da empresa.imagem do logo da empresa. 1.

1. Clique Clique na na opçãoopção ParameterParameter .. 2.

2. Dê o Dê o clique no botão clique no botão direito do direito do mouse.mouse. 3.

3. Será visualizado Será visualizado um um submenu, conforme submenu, conforme figura adiante.figura adiante. 4.

4. Clique Clique na na opçãoopção Adicionar ParameterAdicionar Parameter .. 5.

5. Em segEm seguida, será vuida, será visualizada a isualizada a figura seguintefigura seguinte::

Adicionando parâmetros no relatório

Adicionando parâmetros no relatório

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(37)

Figura 2.2: Adicionando Parameter

Figura 2.2: Adicionando Parameter

No menu de propriedades, vamos configurar o parâmetro, No menu de propriedades, vamos configurar o parâmetro, conforme pode ser visto a seguir.

conforme pode ser visto a seguir.

Figura 2.3: Configurando o Parameter imagemLogo

(38)

1. Na propriedade

1. Na propriedade namename , colocaremos o nome do parâmetro,, colocaremos o nome do parâmetro, neste caso,

neste caso, imagemLogoimagemLogo .. 2.

2. Na Na propriedapropriedadede parameter Classparameter Class , visualizaremos uma lista, visualizaremos uma lista de classes. Selecione a classe

de classes. Selecione a classe StringString .. Adicione parâmetro

Adicione parâmetro nmSistemanmSistema que será utilizada paraque será utilizada para mostrar o nome do sistema.

mostrar o nome do sistema. 1.

1. Na Na propriedadpropriedadee namename , vamos colocar o nome do parâmetro,, vamos colocar o nome do parâmetro, neste caso,

neste caso, nmSistemanmSistema .. 2.

2. Na Na propriedapropriedadede parameter Classparameter Class , visualizaremos uma lista, visualizaremos uma lista de classes. Selecione a classe

de classes. Selecione a classe StringString novamente.novamente.

Figura 2.4: Configurando o Parameter nmSistema

Figura 2.4: Configurando o Parameter nmSistema

Adicionamos e configuramos os parâmetros do relatório. Agora, Adicionamos e configuramos os parâmetros do relatório. Agora,

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(39)

ele está apto para receber parâmetros. O importante é que haja uma ele está apto para receber parâmetros. O importante é que haja uma correspondência entre o nome dos parâmetros no iReport e o nome correspondência entre o nome dos parâmetros no iReport e o nome do parâmetros no HashMap passado com parâmetro para o iReport. do parâmetros no HashMap passado com parâmetro para o iReport.

Estando na interface de desenvolvimento, no menu

Estando na interface de desenvolvimento, no menu ReportReport Inspector

Inspector :: 1.

1. Clique Clique na na opçãoopção FieldField .. 2.

2. Dê o Dê o clique no botão clique no botão direito do direito do mouse.mouse. 3.

3. Será visualizado um Será visualizado um submenu, conforme submenu, conforme a a figura adiante.figura adiante. 4.

4. Clique Clique na na opçãoopção Adicionar FieldAdicionar Field .. 5.

5. Em Em seguida, será vista seguida, será vista a figura a figura a a seguir.seguir.

Figura 2.5: Adicionando fields

Figura 2.5: Adicionando fields

Adicionando fields no relatório

Adicionando fields no relatório

(40)

No menu de

No menu de propriedadespropriedades, vamos configurar , vamos configurar oo fieldfield ..

É oportuno lembrar de que, no nosso contexto, a fonte de dados É oportuno lembrar de que, no nosso contexto, a fonte de dados será um ArrayList. Assim, o nome do atributo (

será um ArrayList. Assim, o nome do atributo ( field field ) deve ser o) deve ser o mesmo nome do atributo do objeto armazenado no ArrayList. Ou mesmo nome do atributo do objeto armazenado no ArrayList. Ou seja, deve haver uma correspondência entre o nome dos atributos da seja, deve haver uma correspondência entre o nome dos atributos da classe

classe UF.javaUF.java e o dose o dos fields relUF.jrxmlfields relUF.jrxml .. 1. Na propriedade

1. Na propriedade namename , colocaremos o nome do, colocaremos o nome do fieldfield dede id

id ..

2. Na propriedade

2. Na propriedade Parameter ClassParameter Class , visualizamos uma lista, visualizamos uma lista de classes. Selecione a classe

de classes. Selecione a classe IntegerInteger ..

Figura 2.6: Configurando o field id

Figura 2.6: Configurando o field id

Agora, vamos adicionar outro

Agora, vamos adicionar outro FieldField . Assim, na propriedade. Assim, na propriedade  name

 name , colocaremos o nome do, colocaremos o nome do fieldfield de nome e o dode nome e o do fieldfield dede sigla. Já na propriedade

sigla. Já na propriedade Parameter ClassParameter Class , visualizamos uma lista, visualizamos uma lista de classes. Selecione a classe

de classes. Selecione a classe StringString para ambos.para ambos.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(41)

Figura 2.7: Configurando field nome

(42)

Figura 2.8: Adicionando o field sigla

Figura 2.8: Adicionando o field sigla

Agora que adicionamos os parâmetros e atributos, o nosso Agora que adicionamos os parâmetros e atributos, o nosso relatório está apto para receber os parâmetros e

relatório está apto para receber os parâmetros e atributos.atributos.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(43)

Figura 2.9: Parâmetros e atributos adicionados

Figura 2.9: Parâmetros e atributos adicionados

Vamos agora iniciar a implementação do cabeçalho. Na Vamos agora iniciar a implementação do cabeçalho. Na interface de desenvolvimento, no menu

interface de desenvolvimento, no menu Report InspectorReport Inspector :: 1.

1. Clique Clique no no parâmetroparâmetro nmSistemanmSistema .. 2.

2. Arraste Arraste o o parâmetroparâmetro nmSistemanmSistema para a áreapara a área Page HeaderPage Header .. 3.

3. Redimensione e Redimensione e posicione o posicione o parâmetroparâmetro nmSistemanmSistema ..

Cabeçalh

(44)

Figura 2.10: Adicionando o

Figura 2.10: Adicionando o parâmetro nmSistema no cabeçalhoparâmetro nmSistema no cabeçalho

Agora, no menu

Agora, no menu PaletaPaleta .. 1.

1. Clique Clique no no componentecomponente ImageImage .. 2.

2. Arraste Arraste o o componentecomponente ImageImage para a áreapara a área Page HeaderPage Header .. 3. Quando soltá-lo na área, será disponibilizada uma tela 3. Quando soltá-lo na área, será disponibilizada uma tela

conforme a figura a seguir. conforme a figura a seguir.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(45)

Figura 2.11: Adicionando o

Figura 2.11: Adicionando o componente Image no cabeçalhocomponente Image no cabeçalho

Nesta tela, são dispostas opções de seleção para associarmos ao Nesta tela, são dispostas opções de seleção para associarmos ao componente

componente ImageImage ..

Então, clique na opção

Então, clique na opção ParametersParameters . Na parte inferior no. Na parte inferior no centro, será visualizada uma lista de parâmetros. Dê um duplo centro, será visualizada uma lista de parâmetros. Dê um duplo clique na opção

clique na opção imagemLogoimagemLogo , certifique-se de que o nome do, certifique-se de que o nome do parâmetro

parâmetro imagemLogoimagemLogo está sendo visualizado na parte superior daestá sendo visualizado na parte superior da tela, e clique no botão

(46)

Figura 2.12: Configuração do componente Image

Figura 2.12: Configuração do componente Image

Agora vamos redimensionar e posicionar o componente Agora vamos redimensionar e posicionar o componente  Image

 Image ..

Opcionalmente, na propriedade

Opcionalmente, na propriedade Image ExpressionImage Expression do menudo menu  Propriedades

 Propriedades , podemos alterar a configuração do componente, podemos alterar a configuração do componente  Image

 Image ..

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(47)

Figura 2.13: Alterando o componente Image

Figura 2.13: Alterando o componente Image

No menu

No menu PaletaPaleta , no submenu, no submenu ToolsTools :: 1.

1. Clique Clique no no componentecomponente Current dateCurrent date .. 2.

2. Arraste-o Arraste-o para para a a áreaárea Page HeaderPage Header .. 3.

3. Quando soltarmos Quando soltarmos o o componente na componente na área, será área, será disponibildisponibilizadaizada uma tela conforme vemos na figura seguinte.

(48)

Figura 2.14: Selecionando o componente Current date

Figura 2.14: Selecionando o componente Current date

Selecione a formatação

Selecione a formatação dd/mm/yyyydd/mm/yyyy , e clique no botão, e clique no botão ApplyApply ..

Figura 2.15: Definição de formatação de data

Figura 2.15: Definição de formatação de data

Ainda no menu

Ainda no menu PaletaPaleta no submenuno submenu ToolsTools , faça o mesmo, faça o mesmo procedimento com o

procedimento com o Static TextStatic Text , clicando e arrastando-o para a, clicando e arrastando-o para a

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(49)

Page

Page HeaderHeader ..

Figura 2.16: Selecionando o componente Static Text

Figura 2.16: Selecionando o componente Static Text

1. Altere a propriedade

1. Altere a propriedade TextText do menudo menu PropriedadesPropriedades parapara Relatório

Relatório de de UFUF .. 2.

(50)

Novamente no menu

Novamente no menu PaletaPaleta no submenuno submenu ToolsTools :: 1.

1. Clique Clique no no componentecomponente Page X of YPage X of Y .. 2.

2. Arraste-o Arraste-o para para a a áreaárea Page HeaderPage Header .. 3.

3. Redimensione Redimensione e e posicione-posicione-o.o.

Figura 2.18: Adicionando o componente Page X of Y

Figura 2.18: Adicionando o componente Page X of Y

Agora, apenas no menu

Agora, apenas no menu PaletaPaleta , faça o mesmo para o, faça o mesmo para o componente

componente LineLine : clique, arraste para: clique, arraste para Page HeaderPage Header e posicione-e posicione-o.

o.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(51)

Figura 2.19: Adicionando o

Figura 2.19: Adicionando o componente Linecomponente Line

Assim, concluímos a implementação do cabeçalho. Assim, concluímos a implementação do cabeçalho.

Na área

Na área DetailDetail , colocamos os, colocamos os fieldsfields que serão mostradosque serão mostrados no relatório. Vá para o menu

no relatório. Vá para o menu Report InspectorReport Inspector :: 1.

1. Clique Clique na na opçãoopção fieldsfields .. 2.

2. Clique Clique emem field idfield id .. 3.

3. Arraste-o Arraste-o para para áreaárea DetailDetail , redimensionando e, redimensionando e posicionando-o.

posicionando-o. 4.

4. Será Será disponibilidisponibilizado zado um um componentecomponente Static TextStatic Text na áreana área   Column Head

  Column Head com o nome da coluna já definido.com o nome da coluna já definido. Opcionalmente

Opcionalmente, , podemos alterá-lo.podemos alterá-lo. 5. Clique no

5. Clique no Label idLabel id na áreana área Column HeadColumn Head e, em seguida,e, em seguida, altere a propriedade

altere a propriedade TextText do menudo menu PropriedadesPropriedades parapara  Código

 Código ..

Detalhe do relatório

Detalhe do relatório

(52)

Figura 2.20: Adicionando o field id

Figura 2.20: Adicionando o field id no detalhe do relatóriono detalhe do relatório

Agora que você já aprendeu a adicionar um

Agora que você já aprendeu a adicionar um fieldfield nono relatório, adicione os demais

relatório, adicione os demais fieldfield , o do nome e da sigla., o do nome e da sigla.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(53)

Figura 2.21: Adicionando o field nome no detalhe do

Figura 2.21: Adicionando o field nome no detalhe do relatóriorelatório

Novamente no menu

Novamente no menu PaletaPaleta :: 1.

1. Clique Clique no no componentecomponente LineLine .. 2.

2. Arraste-o Arraste-o para para áreaárea Column HeadColumn Head .. 3.

(54)

Figura 2.22: Adicionando o

Figura 2.22: Adicionando o componente Linecomponente Line

Na área

Na área Column HeadColumn Head , clique no label, clique no label CódigoCódigo . Serão. Serão disponibilizadas para configuração as suas propriedades. Para disponibilizadas para configuração as suas propriedades. Para imprimir em negrito, marque a opção

imprimir em negrito, marque a opção BoldBold ..

Figura 2.23: Configurando o label Código

Figura 2.23: Configurando o label Código

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(55)

Para que todos os label tenham a mesma altura, temos as Para que todos os label tenham a mesma altura, temos as seguintes opções:

seguintes opções:

1. Configurar visualmente arrastando os labels e colocando 1. Configurar visualmente arrastando os labels e colocando

todos na mesma altura. todos na mesma altura.

2. Clique em cada label e, na propriedade

2. Clique em cada label e, na propriedade TopTop do menudo menu  Propriedades

 Propriedades , atribua o mesmo valor a todos., atribua o mesmo valor a todos.

Figura 2.24: Configurando a propriedade Top do

Figura 2.24: Configurando a propriedade Top do labellabel

Fazemos o mesmo processo para colocar todos os fields na Fazemos o mesmo processo para colocar todos os fields na mesma altura, assim como fizemos com os labels: ou configuramos mesma altura, assim como fizemos com os labels: ou configuramos  visualmente,

 visualmente, ou ou também também clicamos clicamos em em cada cada field field e, e, na na propriedadepropriedade  Top

 Top do menudo menu PropriedadesPropriedades , atribuímos o mesmo valor para, atribuímos o mesmo valor para todos.

(56)

Figura 2.25: Configurando a propriedade top

Figura 2.25: Configurando a propriedade top dos fieldsdos fields

Dessa forma, concluímos a implementação. Agora, é preciso Dessa forma, concluímos a implementação. Agora, é preciso compilar. Para isso, clique na figura do martelo do lado do nome da compilar. Para isso, clique na figura do martelo do lado do nome da fonte. Na parte inferior na aba

fonte. Na parte inferior na aba Report outputReport output , podemos, podemos  visualizar

 visualizar o o caminho caminho completo completo onde onde foi foi gerado gerado o o arquivoarquivo  relUF.jasper

 relUF.jasper . Agora é só testar a execução do relatório de UF.. Agora é só testar a execução do relatório de UF.

2.4 CRIANDO UM RELATÓRIO DE LISTAGEM

(57)

Figura 2.26: Compilando o relatório

Figura 2.26: Compilando o relatório

Nosso desafio agora é implementar o relatório com Nosso desafio agora é implementar o relatório com agrupamento por unidades federativas, conforme o layout

agrupamento por unidades federativas, conforme o layout mostradomostrado na figura a seguir.

na figura a seguir.

2.5

CRIANDO

RELATÓRIO

COM

2.5

CRIANDO

RELATÓRIO

COM

AGRUPAMENTO

AGRUPAMENTO

Layout do Relatório

Layout do Relatório

(58)

Figura 2.27: Layout do relatório

Figura 2.27: Layout do relatório

O relatório é composto de um

O relatório é composto de um cabeçalho, que contém:cabeçalho, que contém: 1.

1. Uma imagem Uma imagem com o com o logo da logo da empresa;empresa; 2.

2. O O nome nome do do sistema;sistema; 3.

3. A A data data de de impressão;impressão; 4.

4. Contador Contador de de páginas;páginas; 5.

5. O O nome nome de de relatórirelatório.o.

2.5 CRIANDO RELATÓRIO COM AGRUPAMENTO

(59)

Em seguida, temos um agrupado por unidades federativas e uma Em seguida, temos um agrupado por unidades federativas e uma área reservada para colocar o nome das colunas do relatório. Temos área reservada para colocar o nome das colunas do relatório. Temos também uma área detalhada com as informações do Município também uma área detalhada com as informações do Município pertencente à unidade federativa, e, finalmente, uma área reservada pertencente à unidade federativa, e, finalmente, uma área reservada para as variáveis que vão calcular a média populacional e o total da para as variáveis que vão calcular a média populacional e o total da população da unidade federativa. É oportuno lembrar de que os população da unidade federativa. É oportuno lembrar de que os  valores

 valores da da população população não não reflete reflete a a realidade, realidade, são são meramentemeramente didáticos.

didáticos.

Já sabemos como adicionar parâmetros, fields e implementar o Já sabemos como adicionar parâmetros, fields e implementar o cabeçalho do relatório. Se ainda persistir alguma dúvida sobre esses cabeçalho do relatório. Se ainda persistir alguma dúvida sobre esses temas, retorne à seção

temas, retorne à seção Criando um relatório de listagemCriando um relatório de listagem. O que. O que

 veremos d

 veremos de diferente aqui e diferente aqui será como adserá como adicionar grupo e varicionar grupo e variáveis.iáveis. Gostaríamos apenas de enfatizar que a classe

Gostaríamos apenas de enfatizar que a classe Municipio.javaMunicipio.java possui um atributo do tipo

possui um atributo do tipo UF.javaUF.java . Observe que adicionamos os. Observe que adicionamos os fields:

fields: uf.iduf.id ee uf.nomeuf.nome ..

Adicionando Parameters, Fields e Cabeçalho no

Adicionando Parameters, Fields e Cabeçalho no

relatório

(60)

Figura 2.28: Ênfase no field UF

Figura 2.28: Ênfase no field UF

Neste relatório, vamos criar um grupo para que possamos Neste relatório, vamos criar um grupo para que possamos totalizar a população por unidade federativa e também obter uma totalizar a população por unidade federativa e também obter uma média da população por unidade federativa.

média da população por unidade federativa. No menu

No menu Report InspectorReport Inspector ::

Adicionando Grupo

Adicionando Grupo

2.5 CRIANDO RELATÓRIO COM AGRUPAMENTO

(61)

1.

1. Clique na opção Clique na opção do nome ddo nome do relatório; no o relatório; no nosso contextonosso contexto, em, em  relMunicipio

 relMunicipio .. 2.

2. Clique no Clique no botão direito do botão direito do mouse para mouse para visualizvisualizar o ar o submenu.submenu. 3.

3. Clique Clique na na opçãoopção Add Report GroupAdd Report Group .. 4.

4. Será disponiSerá disponibilizada uma bilizada uma tela conforme tela conforme a figura a a figura a seguir.seguir.

Figura 2.29: Adicionando Grupo

Figura 2.29: Adicionando Grupo

Nesta tela, configuramos o grupo colocando o nome de

Nesta tela, configuramos o grupo colocando o nome de UFUF ,, agrupado por

(62)

Figura 2.30: Configurando Grupo

Figura 2.30: Configurando Grupo

Como as opções

Como as opções group headergroup header ee group footergroup footer estãoestão marcadas, elas serão adicionadas ao relatório. Depois, clique no marcadas, elas serão adicionadas ao relatório. Depois, clique no botão de finalizar.

botão de finalizar.

2.5 CRIANDO RELATÓRIO COM AGRUPAMENTO

(63)
(64)
(65)
(66)

3. Na propriedade

3. Na propriedade CalculationCalculation , é fornecida uma lista de, é fornecida uma lista de cálculo. Selecione a opção

cálculo. Selecione a opção averageaverage . É válido lembrar de que. É válido lembrar de que essa propriedade calculará a média da população da unidade essa propriedade calculará a média da população da unidade federativa.

federativa.

4. Na propriedade

4. Na propriedade Reset TypeReset Type , é apresentada uma lista de, é apresentada uma lista de  Reset

 Reset . Selecione a opção. Selecione a opção GroupGroup .. 5.

5. Na Na propriedapropriedadede Reset GroupReset Group , selecione a opção, selecione a opção UFUF .. Como já visto, as propriedades

Como já visto, as propriedades Resset TypeResset Type ee Reset GroupReset Group determinam que, sempre que uma variável mudar de unidade determinam que, sempre que uma variável mudar de unidade federativa, ela será inicializada.

federativa, ela será inicializada.

Figura 2.34: Configurando variável

Figura 2.34: Configurando variável mediaPopulacaomediaPopulacao

2.5 CRIANDO RELATÓRIO COM AGRUPAMENTO

(67)

Como já aprendemos anteriormente, não vamos repetir o Como já aprendemos anteriormente, não vamos repetir o processo de adicionar e configurar fields e labels. Se ainda persistir processo de adicionar e configurar fields e labels. Se ainda persistir alguma dúvida, retorne à seção

alguma dúvida, retorne à seção Criando um relatório de listagemCriando um relatório de listagem..

Gostaria apenas de enfatizar que as informações da unidade Gostaria apenas de enfatizar que as informações da unidade federativa e os labels das colunas do relatório ficam na área

federativa e os labels das colunas do relatório ficam na área UFUF Group Header

Group Header . Assim, arraste as variáveis que adicionamos para a. Assim, arraste as variáveis que adicionamos para a área

área UF Group FooterUF Group Footer ..

Figura 2.35: Finalizando design do relatório

Figura 2.35: Finalizando design do relatório

Concluímos a implementação, mas precisamos compilar. Para Concluímos a implementação, mas precisamos compilar. Para isso, clique no martelo do lado do nome da fonte. Então, na parte isso, clique no martelo do lado do nome da fonte. Então, na parte inferior na aba

inferior na aba Report outputReport output , podemos visualizar o caminho, podemos visualizar o caminho completo em que o arquivo

completo em que o arquivo relMunicipio.jasperrelMunicipio.jasper foi gerado.foi gerado. Agora é só testar a

(68)
(69)

C

CAPÍTULOAPÍTULO 3 3

Nosso desafio será implementar o relatório de unidade Nosso desafio será implementar o relatório de unidade federativa conforme mostra a figura a seguir, que criamos federativa conforme mostra a figura a seguir, que criamos anteriormente utilizando como fonte de dados ArrayList. Porém, anteriormente utilizando como fonte de dados ArrayList. Porém, desta vez, em vez de

desta vez, em vez de usar ArrayList, usaremos instrução SQL.usar ArrayList, usaremos instrução SQL.

Figura 3.1: Layout do relatório

Figura 3.1: Layout do relatório

RELATÓRIO COM SQL

RELATÓRIO COM SQL

3.1 CRIANDO RELATÓRIO DE LISTAGEM COM

3.1 CRIANDO RELATÓRIO DE LISTAGEM COM

SQL

SQL

Layout do relatório

Layout do relatório

Método gerarRelatorio

Método gerarRelatorio

(70)

Na classe

Na classe AbstractMBAbstractMB , adicionamos o método, adicionamos o método  gerarRelatorio

 gerarRelatorio . Este método é similar ao que vimos no capítulo. Este método é similar ao que vimos no capítulo anterior. A diferença é que ele não utiliza ArrayList, mas sim uma anterior. A diferença é que ele não utiliza ArrayList, mas sim uma conexão JDBC (

conexão JDBC ( Java Database Connectivity  Java Database Connectivity ).).

O método

O método gerarRelatoriogerarRelatorio é responsável pela execução eé responsável pela execução e  visualização

 visualização do do relatório, relatório, e e também também por por acrescentar acrescentar parâmetrosparâmetros comum a todos os relatórios, como por exemplo

comum a todos os relatórios, como por exemplo imagemLogoimagemLogo .. Instanciamos a classe

Instanciamos a classe HttpServletResponseHttpServletResponse para que opara que o usuário possa visualizar o

usuário possa visualizar o relatório.relatório.

public void

public void gerarRelatorio(StringerarRelatorio(String nomeRelatorio,g nomeRelatorio, HashMap

HashMap paramRel){paramRel){ FacesContext

FacesContext context context = = FacesContext.getCurFacesContext.getCurrentInstance();rentInstance(); HttpServletResponse

HttpServletResponse response response == (HttpServletRespon

(HttpServletResponse) se) context.getExternalCcontext.getExternalContext()ontext()   .getResponse();

  .getResponse(); ServletContext sc =

ServletContext sc = (ServletContext)

(ServletContext) context.getExternacontext.getExternalContext().getContexlContext().getContext();t(); String relPath =

String relPath = sc.getRealPath("/")sc.getRealPath("/");; String imagemLogo =

String imagemLogo = relPath +

relPath + "resources/imagens"resources/imagens/logo_mmo.jpg";/logo_mmo.jpg"; paramRel.put("image

paramRel.put("imagemLogo", mLogo", imagemLogo);imagemLogo); paramRel.put("nmSis

paramRel.put("nmSistema", tema", Constants.NOME_SISTEConstants.NOME_SISTEMA);MA); paramRel.put("REPOR

paramRel.put("REPORT_LOCALE", T_LOCALE", new new Locale("pt", Locale("pt", "BR"));"BR"));

Instanciamos a classe

Instanciamos a classe ConnectionConnection , que é utilizada para fazer a, que é utilizada para fazer a conexão com o banco de dados, e a classe

conexão com o banco de dados, e a classe JasperFillManagerJasperFillManager gera o relatório.

gera o relatório.

try try {{

JasperPrint

JasperPrint print print = = null;null; String

String url url = = "jdbc:postgresql:/"jdbc:postgresql://localhost:5432/sgc"/localhost:5432/sgc";; String

String user user = = "postgres";"postgres"; String

String pass pass = = "123456";"123456"; Connection

Connection connection connection == DriverManager.getCon

DriverManager.getConnection(url, nection(url, user,pass);user,pass); print

print = = JasperFillManager.fJasperFillManager.fillReport(relPath illReport(relPath ++ "relatorios/"+nomeRelatorio+".jasper", "relatorios/"+nomeRelatorio+".jasper", paramRel,connection);

paramRel,connection);

3.1 CRIANDO RELATÓRIO DE LISTAGEM COM SQL

(71)

Com o relatório criado, configuramos o objeto

Com o relatório criado, configuramos o objeto responseresponse parapara mostrar o relatório no formato

mostrar o relatório no formato .pdf.pdf . A classe. A classe JasperExportManag

JasperExportManagerer exporta o objetoexporta o objeto printprint parapara pdfpdf ..

  response.setContentType("application/pdf");   response.setContentType("application/pdf");

response.addHeade

response.addHeader("Content-dispositir("Content-disposition", on", "attachment;"attachment; filename=\"" + nomeRelatorio + ".pdf\""); filename=\"" + nomeRelatorio + ".pdf\"");   JasperExportManager.exportReportToPdfStream(print,   JasperExportManager.exportReportToPdfStream(print,   response.getOutputStream());   response.getOutputStream()); ServletOutputStre

ServletOutputStream am responseStream responseStream == response.getOutputStream(); response.getOutputStream();   responseStream.flush();   responseStream.flush();   responseStream.close();   responseStream.close();   FacesContext.getCurrentInstance().renderResponse();   FacesContext.getCurrentInstance().renderResponse();   FacesContext.getCurrentInstance().responseComplete();   FacesContext.getCurrentInstance().responseComplete(); } catch (Exception e) { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(); } } } } Na classe

Na classe UFMBUFMB , adicionamos o método, adicionamos o método relatoriorelatorio , que será, que será responsável pela preparação dos parâmetros do relatório e pela responsável pela preparação dos parâmetros do relatório e pela chamada do método

chamada do método gerarRelatóriogerarRelatório . Um dos parâmetros. Um dos parâmetros passados é o nome do relatório que deve ser visualizado. Como o passados é o nome do relatório que deve ser visualizado. Como o objetivo é um relatório com SQL, neste método não

objetivo é um relatório com SQL, neste método não é feita nenhumaé feita nenhuma consulta e também não é passado nenhum ArrayList.

consulta e também não é passado nenhum ArrayList.

public class UFMB extends AbstractMB { public class UFMB extends AbstractMB {

public

public void void relatorio() relatorio() throws throws Exception Exception {{ try {

try {

HashMa p paramRel = new HashMap(); HashMa p paramRel = new HashMap(); String

String nomeRelatorio nomeRelatorio = = "relUF";"relUF"; gerarRelatorio(nome

gerarRelatorio(nomeRelatorio, Relatorio, paramRel);paramRel); }

} catch catch (NegocioException (NegocioException e) e) {{   addMsgErro(e.getMessage());   addMsgErro(e.getMessage()); } } } } } }

Para iniciar a configuração da conexão, na tela principal da Para iniciar a configuração da conexão, na tela principal da  IDE

 IDE , clique na figura do lado da palavra, clique na figura do lado da palavra Empty datasourceEmpty datasource parapara

Classe UFMB

Classe UFMB

(72)

ser disponibilizada uma tela de configuração, conforme mostra a ser disponibilizada uma tela de configuração, conforme mostra a figura seguinte.

figura seguinte.

Figura 3.2: Interface

Figura 3.2: Interface de desenvolvimentode desenvolvimento

Na tela

Na tela Connections / DataSourcesConnections / DataSources , clique no botão, clique no botão NewNew e,e, depois, avance para a tela seguinte. Veja a figura a seguir:

depois, avance para a tela seguinte. Veja a figura a seguir:

Figura 3.3:

Figura 3.3: Connections/DatConnections/DataSourcesaSources

Na tela

Na tela DataSourceDataSource , será apresentada uma lista de, será apresentada uma lista de  DataSource

 DataSource . Selecione a opção. Selecione a opção Database JDBC connectionDatabase JDBC connection ee 3.1 CRIANDO RELATÓRIO DE LISTAGEM COM SQL

Referências

Documentos relacionados

Dificultando a inserção no mercado de trabalho, as pessoas que tenham problemas de saúde, ainda que não graves, e atentando contra o sigilo das informações médicas (Art. 5°,

Adotam-se como compreensão da experiência estética as emoções e sentimentos nos processos de ensinar e aprender Matemática como um saber epistêmico. Nesse viés, Freire assinala

Focamos nosso estudo no primeiro termo do ensino médio porque suas turmas recebem tanto os alunos egressos do nono ano do ensino fundamental regular, quanto alunos

Para além deste componente mais prático, a formação académica do 6º ano do MIM incluiu ainda disciplinas de cariz teórico, nomeadamente, a Unidade Curricular de

A cirurgia, como etapa mais drástica do tratamento, é indicada quando medidas não invasivas como dietas restritivas e a prática regular de exercícios físicos

Neste estágio, assisti a diversas consultas de cariz mais subespecializado, como as que elenquei anteriormente, bem como Imunoalergologia e Pneumologia; frequentei o berçário

O relatório encontra-se dividido em 4 secções: a introdução, onde são explicitados os objetivos gerais; o corpo de trabalho, que consiste numa descrição sumária das

Este estudo possibilitou caracterizar o perfil pré e pós intervenção de mulheres de 50 a 65 anos, em período pós-menopausa, residentes na área urbana do município de