• Nenhum resultado encontrado

Relatórios

No documento Programação. 3 Período (páginas 71-83)

relatórios

Objetivo

Esperamos que, ao final desta aula, você seja capaz de:

criar relatórios de aplicações Java utilizando ferramentas livres. •

Pré-requisitos

Para começarmos os estudos sobre a geração de relatórios, é importante conhecer os conceitos de programação Java, vistos nas aulas anteriores, bem como conceitos relacionados à XML (eXtensible Markup Language). Esse conhe- cimento é importante para uma melhor compreensão das aulas desta aula.

introdução

Todo sistema é criado com a finalidade de organizar, guardar e recuperar dados. Um de seus objetivos é a geração de relatórios, contendo parte desses dados armazenados no sistema para um determinado fim específico, seja ele de gerência, auditoria ou apenas de conferência.

Apesar de sua importância e sua presença em, basicamente, todos os sistemas computacionais, muitas vezes este módulo do sistema não tem seu devido reconhecimento.

Em resumo, podemos dizer que o processo de geração de relatórios con- siste na criação de um layout e na seleção dos dados que irão compor o corpo do relatório. Essa necessidade de criação de relatórios fez com que surgissem diversas ferramentas especializadas neste assunto, como a ferramenta pro- prietária Crystal Reports e as ferramentas de código aberto JasperReports e iReport que serão tratadas nesta aula.

Figura 1 - JasperReports - Processo para gerar um relatório

Agora que já tivemos a idéia da finalidade dos relatórios, vamos ao que interessa! Começaremos a nossa aula falando sobre o JasperReports.

6.1 jasperreports

Como dissemos anteriormente, JasperReports é uma das ferramentas (fra-

mework) de código aberto (open-source) que nos auxilia na criação de relatórios.

Como não podia deixar de ser, essa ferramenta é escrita em Java e alguns de seus pontos fortes são a organização e apresentação de conteúdo, gerando de forma dinâmica seus relatórios em vários formatos: XML, PDF, XLS, HTML e CSV (HEFFELFINGER, 2006). E como todos nós já sabemos, podemos utilizá-la em qualquer aplicativo feito em Java, indo de desktop, WEB ou mesmo distribuído.

6.1.1 Xml a chave do funcionamento

Aqui, pessoal, é onde começamos o processo de criação dos nossos rela- tórios. Logo, temos que compreender como o processo funciona, e a Figura 1 tem como objetivo nos mostrar como se dá este processo.

Saiba mais

Um framework consiste em uma estrutura de software muito utilizada na linguagem Java. Ele consiste em um arcabouço de soluções,

disponibilizando bibliotecas ou mesmo softwares que acelerem o processo de desenvolvimento de aplicações. Estes se diferenciam das bibliotecas de classes convencionais fornecidas, pois, diferentemente destas, os frameworks fornecem uma solução para uma família de problemas em comum, com pouco esforço, aumentando o poder de reutilização de código.

objeto Descrição

JasperDesign Objeto de definição do relatório é criado a partir do template XML. JasperReport Objeto de compilação do JasperDesign, é criado após o processo de compilação e verificação do layout do relatório.

JasperPrint Objeto final, é criado a partir de um JasperReport e contém o relatório preenchido.

Tabela 5.1 – Objetos do JasperReports para criação de relatórios

Você deve estar se perguntando: “Qual o objetivo do arquivo XML?”. Cal- ma, iremos falar sobre isso agora.

Na introdução da aula falamos que o processo de criação de relatórios consis- tia basicamente em definir um layout e filtrar (selecionar) os dados que irão fazer parte de seu conteúdo. Pois bem! O arquivo XML é quem vai definir tanto o layout quanto a localização e os nomes dos campos dos dados a serem preenchidos.

Este processo se dá por meio das tags, não as tags de Java, mas as tags do XML, que, por sua vez, obedecem a um padrão de estrutura e vocabulário com suas restrições, cujos valores são declarados em um arquivo chamado jasperreports.dtd (HEFFELFINGER, 2006).

Pensando sobre o assunto

A XML é uma metalinguagem utilizada para intercâmbio de informações e criação de estruturas de arquivos. Dessa forma, sugerimos a leitura de obras relacionadas ao assunto e que colaborem com o seu aprendizado. Segue uma boa referência: http://www.w3.org/XML/.

Com o uso do XML, o layout poderá ser definido com formas geométricas, ima- gens e textos padronizados estaticamente e/ou principalmente dinamicamente, atra- vés dos campos definidos para tal fim, tendo o seu conteúdo buscado em uma base de dados. Todos esses elementos contêm uma localização específica dentro do relatório.

Após a fase de definição dos elementos que compõem o layout do arquivo XML, ele precisa passar por uma compilação que gerará um arquivo de formato .jasper, ou seja, o código Java ali contido será verificado e compilado neste processo.

As etapas de geração de relatório são representadas utilizando diferentes objetos do JasperReports, que serão apresentadas na Tabela 5.1.

6.1.2 dados, a alma do conteúdo

Nesta parte, pessoal, trataremos do preenchimento com os dados neces- sários para a criação do conteúdo do relatório. Na maioria esmagadora das vezes, esses dados são recuperados de algum SGBD (Sistema Gerenciador de Banco de Dados), mas, também, podem ser recuperados de arquivos XML.

Quando queremos recuperar os dados de um SGBD relacional, utilizamos como padrão a linguagem SQL, conforme apresentado na 3ª aula, para rea- lizar e retornar os dados da consulta, conforme foi visto na aula 4. Podemos inserir o código de consulta SQL ao código do XML ou utilizar uma classe Java já definida para esse fim, cujo resultado irá gerar um objeto ResultSet, que será lido pelas classes do Jasper, fazendo com que o relatório seja preenchido.

Outro ponto forte do JasperReports é o suporte a muitos tipos de fonte de dados (datasources). O responsável por isso é a interface JRDataSource. JRRe- sultSetDataSource é uma implementação padrão para objetos ResultSet para a interface JRDataSource (HEFFELFINGER, 2006). O ResultSet deve conter todas as colunas que serão mapeadas para seus campos correspondentes no relató- rio, quando este for à fonte de dados.

6.1.3 Campos, Variáveis, Parâmetros e Expressões

Dando seqüência ao conteúdo, falaremos sobre o que são os campos, variáveis, parâmetros e expressões, para a geração de relatórios.

Os campos (field) servem para entrada direta de dados no relatório, a colu- na referenciada deve conter o mesmo nome do campo do relatório (HEFFELFIN- GER, 2006). Como exemplo, pegaremos os dados da coluna ‘Matricula’ com o tipo ‘Integer’ de uma tabela ‘aluno’. Para mapearmos esse dado, devemos defi- nir, no arquivo XML, um campo com o nome ‘matricula’, como segue abaixo:

Para a simplificação do projeto do relatório, utilizamos as variáveis (varia- ble) e através delas podemos definir apenas uma expressão que será repetida freqüentemente e, quando se fizer necessário, no decorrer do design do re- latório. As variáveis podem referenciar, internamente, tipos de cálculos como

...

<field name=“Matricula” class=“java.lang.Integer”/> ...

níveis Descrição

None Este nível indica que a variável nunca é inicializada com o valor inicial da expressão, ela apenas guarda o valor obtido pela expressão principal;

Report Este nível indica que a variável somente será inicializada no inicio do relatório e terá seu valor acumulado até o término do mesmo; Page Este nível indica que a variável será inicializada no início de cada página do relatório; Column Este nível indica que a variável será inicializada no início de cada coluna; Group Este nível indica que a variável será inicializada quando o grupo especificado pelo atributo de resetGroup for modificado; Default O valor padrão do nível é Report;

Tabela 5.2 – Níveis de reinicialização de variáveis (FURUTANI, 2007)

count (realiza uma contagem de itens), sum (realiza a soma de itens), average (realiza a média aritmética de itens) entre outros. Seguindo o exemplo ante- rior, poderíamos utilizar as variáveis para realizar o cálculo da média das notas dos alunos como é demonstrado abaixo.

A ordem de declaração de variáveis no relatório tem muita importância, pois, em uma expressão, uma variável pode referenciar outras variáveis, des- de que elas tenham sido pré-definidas.

Quando usamos variáveis para a realização de cálculos, podemos defi- nir quando elas devem ser reinicializadas. Para isso, existem vários níveis de reinicialização, que são apresentadas na Tabela 5.2.

A ferramenta também oferece variáveis pré-definidas para uso nas expres- sões regulares, sendo elas: PAGE_NUMBER, COLUMN_NUMBER, REPORT_ COUNT, PAGE_COUNT, COLUMN_COUNT, GroupName_COUNT.

Quando não podemos encontrar os dados na fonte de dados que estamos usando para o preenchimento do relatório, usamos os parâmetros (parameter) para nos auxiliar nesse objetivo, assim temos.

...

<variable name=“ValorMedia” class=“java.lang.Double” calculation= “Average”> <variable expression> ${Nota} </variable expression>

</variable> ...

...

<parameter name=“Titulo” class= “java.lang.String”/> ...

...

Map param = new HashMap( );

param.put( “Aluno”, “Vinny Coelho Frota” ); ...

...

SELECT * FROM aluno WHERE matricula=$P{Matricula} ...

...

<textFieldExpression>

“Sr.(a) ” + $F{Aluno} + “ seu pagamento está em atraso no valor de: R$ “ + $V{ValorTotalDevedor} + “ referente à data de vencimento: “

+ (new SimpleDateFormat(“dd/MM/yyyy”)).format($F{DataVencimento}) + “. Favor passar na secretaria.”

</textFieldExpression> ...

Então passados, através da classe HashMap, via código Java, conforme é demonstrado a seguir.

Outra forma muito importante de utilização de parâmetros é no uso do SQL do relatório, para obtermos dados em bases de dados, tendo como exemplo.

Assim, como resultado desta consulta, os dados contidos no relatório se- rão apenas aluno cuja matrícula foi passada por parâmetro.

Para podermos especificar o conteúdo de campos de texto, que freqüen- temente são usados, utilizamos as expressões (expression) e essas expressões são feitas em código Java e, normalmente, contêm em sua sintaxe campos, variáveis e parâmetros de relatório, veja este exemplo.

6.1.4 layout

O layout do JasperReports, por motivos de melhor organização e definição de seu design, está dividido em algumas áreas pré-definidas que chamamos de seções, são elas: title, pageHeader, columnHeader, groupHeader, detail, groupFooter, columnFoter, pageFooter, summary (FURUTANI, 2007).

A definição da posição do conteúdo do relatório é essencial para a criação do mesmo, pois é ela quem representa a estrutura visual do documento gerado. Porém, a criação de relatórios diretamente em XML não é uma tarefa simples e fácil, daí a necessidade de ferramentas que auxiliem na criação de layout dos relatórios.

Figura 2 - Tela inicial do iReport

6.2 ireport

O iReport, uma ferramenta que automatiza e torna mais intuitiva a criação dos layouts dos relatórios. Constituído de ambiemte gráfico, reune todos os re- cursos da biblioteca Jasper para a criação de relatórios apresentados até aqui, auxiliando na construção de layouts mais elaborados e de maneira rápida, pois evita que o usuário perca tempo escrevendo linhas de código em XML.

O iReport está disponível para download gratuitamente na internet. Este é disponibilizado de duas formas: a primeira consiste em um arquivo para des- compactação, e a segunda um executável. Para tanto, baixe o arquivo que mais lhe convier no endereço: http://www.jasperforge.org/sf/projects/ireport.

Pensando sobre o assunto

Existem diversas publicações que auxiliam o processo de instalação do iReport disponíveis na WEB, mas não nos apegaremos aos detalhes de instalação dessa ferramenta. Um detalhe que dever ser citado é que, assim como para o funcionamento de nossos exemplos em Java, é necessário que estejam definas as variáveis de ambiente, uma vez que o iReport consiste em um programa Java.

Uma vez que todo o processo de instalação tenha acontecido da ma- neira desejada, teremos como resultado da execução do iReport a tela apresentada na Figura 2.

Saiba mais

Existem outras ferramentas com o mesmo objetivo do iReport, mas estas não fazem parte do escopo desta aula. Fica aqui a sugestão para que sejam realizados estudos correlatos, a fim de se ter uma visão geral destas e, com isto, definir qual mais satisfaz as necessidades de seu projeto. Segue uma lista delas: iText, JFreeReports, OracleReports, JFreeStudio e FOP.

Familiarize-se com todos os componentes desta ferramenta e, assim, construa seu layout conforme a necessidade. Todo código XML é gerado automaticamente pela ferramenta, ela ainda traz diversos atalhos para testes, como compilação e visualização de como está ficando o relatório a ser gerado.

Com isso, a ferramenta acelera, significativamente, o processo de desen- volvimento do relatório.

6.2.1 fonte de dados Suportadas

O iReport suporta diversos tipos de conexões para a recuperação de dados para a construção de relatórios: conexões ODBC, JDBC, XML Data- Source, JavaBeans Set DataSource, Custom DataSource e Empty DataSour- ce. Sugerimos leituras complementares para conhecer essas fontes de dados (HEFFELFINGER, 2006).

6.3 Um estudo de caso

Agora, iremos colocar a mão na massa, pessoal: vamos criar um relatório que nossa aplicação irá executar. Para tanto, execute ou crie uma tabela com a estrutura: ‘nome’ e ‘descricao’, e preencha sua tabela com dados, se neces- sário, adapte ao banco de dados que melhor lhe convier, porém note que, no exemplo, essas mudanças devem ser refletidas. Apenas certifique-se de que não ocorreram erros na criação.

Certo. Agora, crie, com a utilização do iReport, seu relatório com o layout, conforme é demonstrado na Figura 3. Para tanto, familiarize-se com a ferra- menta, acrescente novos elementos como Fields e Texts, para obter mais co- nhecimento dos elementos que a compõe.

Figura 3 - Criação do layout do relatório //Report.java import java.awt.*; import java.awt.event.*; import java.sql.*; import java.util.*; import com.mysql.jdbc.*; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.view.*;

public class Report extends Frame implements ActionListener{ public Report(){

super(“Relatórios”);

Button botao = new Button(“Relatório”); botao.addActionListener(this); add(botao); setLayout(new FlowLayout()); setSize(200, 60); setLocation(300, 300); addWindowListener(new Eventos());

Conforme já mencionado, um arquivo do iReport, quando salvo, consiste em uma arquivo XML, com a extensão .jrxml. Este deve ser nomeado como cur- so.jrxml. Porém, nosso programa Java utiliza o arquivo .jasper. Certo. Então, para isso, no próprio iReport compile o programa .jrxml e verifique que na pasta onde foi salvo o arquivo jrxml foi criado também um arquivo jasper.

Agora, iremos criar nosso programa Java que irá realizar a chamada a nosso relatório. Porém, como o iReport consiste em um framework externo devemos ter acrescentado as bilbiotecas ao repositório java. Isto já deve ter sido realizado no processo de instalação do iReport. Então transcreva o código abaixo e execute-o.

// Cria método de conexão com o banco de dados // da mesma forma como apresentado na aula 4 private static Connection getConnection() throws

ClassNotFoundException, SQLException {

...

return con; }

// método que cria o relatório

public void geraRelatorio() throws JRException, Exception {

Connection con = getConnection();

Statement stm = (Statement) con.createStatement(); String query = “select * from Curso”;

ResultSet rs = (ResultSet) stm.executeQuery(query);

// implementação da interface JRDataSource para DataSource ResultSet

JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

// HashMap de parametros utilizados no relatório. Sempre instanciados

Map parameters = new HashMap();

// Preenche o relatório com os dados. Gera o arquivo curso.jrprint

JasperFillManager.fillReportToFile( “curso.jasper”, parameters, jrRS );

// Preenche o relatorio e o salva diretamente em arquivo PDF.

JasperRunManager.runReportToPdfFile(“curso.jasper”, parameters, jrRS); /* Visualiza o relatório em formato PDF */

JasperViewer.viewReport( “curso.pdf”, false);

}

// método de execução

public static void main(String[] args) { Report programa = new Report(); programa.setVisible(true); }

// listener que reage ao evento

public void actionPerformed(ActionEvent e) { try {

geraRelatorio(); } catch (JRException e1) {

e1.printStackTrace(); } catch (Exception e1) {

e1.printStackTrace(); }

} }

// Eventos da Janela

class Eventos extends WindowAdapter{ ...

}

Se tudo correu como esperado, através do botão “Relatório”, realizamos a exe- cução de nosso relatório. Adapte o exemplo para novos exemplos, utilize o iReport e crie seus novos relatórios para seus programas. Assim, finalizamos nossa aula 6, e esperamos que você já saiba criar suas aplicações gráficas com relatórios.

Síntese da aula

Nesta aula, foram apresentados os conceitos fundamentais do JasperRe- ports para a elaboração e criação de relatórios práticos de aplicações Java e a interação do JasperReports com o iReport. Foram expostôs as principais características de como criar relatórios usando XML e recuperar dados de SGBDs. Além disso, outro aspecto fundamental do Reports foi a ênfase na criação do layout dos relatórios e seus tipos. Finalizando com os conceitos da ferramenta gráfica open-source iReport e suas fontes de dados suportadas, para geração dos relatórios.

Atividades

1. Porque o arquivo XML é tão importante para a criação de relatórios? 2. Quais as principais características do iReport? Explique.

Comentário das atividades

Na atividade 1, sabemos que o arquivo XML é o responsável por geren- ciar os dados que serão exibidos no relatório a ser gerado. Com o uso do XML, o layout poderá ser definido com formas geométricas, imagens e textos, através dos campos mapeados a uma base de dados ou datasource. Todos esses elementos terão uma localização específica dentro do relatório.

Na atividade 2, as características do iReport é ser uma ferramenta open-source que automatiza a criação dos arquivos XML e torna mais intuitivo a criação dos layouts dos relatórios. Constituido de ambiemte gráfico, reune todos os recursos da bi- blioteca Jasper, para a criação de relatórios mais elaborados e de forma rápida, pois evita que o usuário perca tempo escrevendo inúmeras linhas de código em XML.

referências

FURUTANI, Roberto J. Como criar relatórios Java para Web com Jas-

perReports e iReport. <http://www.furutani.eti.br/tutoriais/Mini-Tutorial_

Relatorios_Java_JasperReports_e_iReport.pdf> Acessado em 12 out. 2007. HEFFELFINGER, David. JasperReports for Java Developers. Agosto, 2006.

Anotações

na próxima aula

Continuaremos com a apresentação dos fundamentos do paradigma de Programação Orientada a Objetos, mencionando os conceitos de métodos construtores e encapsulamento.

No documento Programação. 3 Período (páginas 71-83)

Documentos relacionados