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
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
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.
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
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
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 de1.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
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
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 11Figura 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
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
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
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
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
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
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
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
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.
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
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
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
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());
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
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
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
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
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
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
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
Figura 2.7: Configurando field nome
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
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
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
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
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
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.
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
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.
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
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
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
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.
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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