apostila ireport

Embed Size (px)

Citation preview

  • 7/31/2019 apostila ireport

    1/15

    Java Reporting com JasperReports eiReport Open Source

    JasperReports uma soluo open source poderosa e flexvel para gerao derelatrios. O visual designer iReport permite tirar total vantagem do poder do

    JasperReports sem necessidade de conhecimento profundo do formato XML nativoJasperReports.

    John Ferguson SmartO JasperReports um poderoso e flexvel gerador de relatrios open source. fcilde ser integrado a aplicaes Java empresariais, mas carece de um editor derelatrios visual integrado. Portanto, se quiser usar diretamente o JasperReports,precisar manipular sua estrutura de relatrios XML uma atividade relativamentetcnica, com uma curva de aprendizagem alta, para dizer o mnimo.

    Na realidade, escrever do comeo um JasperReport completo usando s o formatoXML representa uma tarefa longa, dolorosa e pouco compensadora.

    Afortunadamente, existem algumas alternativas disponveis que so muito maisfceis de usar. A melhor de todas, o uso de um editor visual para projetar,compilar e testar os relatrios.Um dos editores visuais mais teis que podemos usar o iReport. Este artigodemonstra como usar o iReport para aproveitar todo o poder do JasperReports,sem se emaranhar em complexidades do formato XML nativo do JasperReports.

    ComeandoA primeira coisa a fazer, carregar e instalar o iReport. Esta uma aplicao Java,portanto, precisaremos de um JDK na mquina (JDK 1.4 ou maior - este tutorialusa o JDK 1.5.0):

    Fazer o download do iReport no ireport.sourceforge.net.

    Descomprimir o arquivo iReport.Rodar o startup script (bin\startup.bat ou. / bin/startup.sh).O download do iReport vem com o seu prprio pacote JasperReports (a verso maisatual - a 0.5.1 - suporta o JasperReports 1.0.1 recentemente liberado).Uma vez que o iReport esteja rodando, podemos comear a projetar os relatrios!

    O Banco de dadosEste tutorial usa um banco de dados muito simples para efeitos de demonstrao(ver Figura 1). Para segui-lo passo a passo, poderemos tanto carregar os scriptspara preparar este banco de dados com o MySQL e mont-lo na sua mquina, ouento, usar um banco de dados similar e traduzir as tcnicas para a sua situaoparticular.

  • 7/31/2019 apostila ireport

    2/15

    Figura 1. O Schema do Tutorial Employee Database

    Adicionando uma Nova Conexo de Banco de dadosPrimeiramente, adicione uma nova conexo ao seu banco de dados. Use o menu"Datasource -> Connections/Datasources" para montar uma nova conexo debanco de dados (ver Figura 2). Se selecionar o driver JDBC da lista (no exemploescolhemos o MySQL), entre com o endereo do servidor e o nome do banco dedados, e clique no boto 'Wizard'. O iReport dever fornecer uma URL JDBC corretapara o seu banco de dados particular.

    Agora que temos um datasource, est na hora de fazer alguma coisa com ele.

    Figura 2. Adicionando uma Nova Conexo de Banco de Dados

  • 7/31/2019 apostila ireport

    3/15

    Criando um Relatrio Simples

    Figura 3. Um Novo Relatrio JasperReports

    Crie um novo documento JasperReports usando o item de menu "File/NewDocument". Podemos ignorar todas as demais opes por enquanto. Apenasdaremos um nome ao relatrio. Teremos assim um relatrio vazio, como mostradona Figura 3.Um relatrio JasperReport dividido nas sees de exibio mostradas na telaiReport,:

    1. Title: como o nome o indica, esta seo contm o ttulo do relatrio;2. Page Header: esta seo aparece no topo de cada pgina (como esperado). um bom lugar para colocar datas, numerao de pginas, etc.;3. Column Header: esta seo aparece no topo de cada coluna;4. Detail: nesta rea sero colocadas as informaes para cada item de registro. OJasperReports gera uma seo de detalhe para todo e cada registro processado;5. Column Footer: esta seo aparece ao final de cada coluna;

    6. Page Footer: esta seo aparece ao final de cada pgina;7. Last Page Footer: esta seo aparece ao final da ltima pgina;8. Summary: esta seo aparece ao trmino do relatrio, logo aps o ltimoregistro.

  • 7/31/2019 apostila ireport

    4/15

    Para comear, especificamos uma consulta SQL apropriada para o relatrio,utilizando o menu Datasource/Report Query (ver Figura 4). A consulta recuperaruma lista de todos os empregados no banco de dados:

    select * from employee e, service swhere e.serv_id = s.serv_idorder by s.serv_name, e.emp_surname, e.emp_firstname

    Figura 4. O Report Query

  • 7/31/2019 apostila ireport

    5/15

    Report FieldsCada relatrio JasperReports tem uma lista de campos que so usados para colocarno layout do relatrio, os dados dos registros recuperados pela consulta ao bancode dadosPodemos visualizar a lista de campos utilizando o menu "View/Report Fields" (verFigura 5).

    Figura 5 Report Fields

    Figura 6. Inserindo os Report Fields

  • 7/31/2019 apostila ireport

    6/15

    Quando criamos uma consulta SQL, esta lista automaticamente atualizada com oscampos que a consulta retorna. Para os casos nos quais usamos outros tipos dedatasources, podemos ter que definir os campos manualmente.A partir da janela campos de relatrio (report fields window), podemos arrastar esoltar campos no relatrio. Os campos geralmente entram na seo Detail, como

    mostrado na Figura 6. Colocamos trs campos na seo Detail, junto com os ttulosde coluna apropriados na seo Column Header (Cabealho de Colunas). Os ttulosde coluna so itens de texto estticos que podemos inserir usando o cone "T" ou oitem de menu "Insert Element/Static Text". Experimente as opes de formatao ede layout para familiarizar-se com que iReport tm a oferecer nesta rea.

    Para visualizarmos a sada do relatrio, rodamos o mesmo utilizando o item demenu "Build/Execute Report (usando active conn). Deveremos obter um relatriocomo o da Figura 7.

    Figura 7. Pr-visualizao dos Resultados do Relatrio

  • 7/31/2019 apostila ireport

    7/15

    Adicionando Ttulo de Relatrio e Data

    Ento agora podemos gerar um relatrio com dados reais. Adicionemos agora umttulo na barra de ttulo. Este ttulo s ser exibido no comeo do relatrio.Suponhamos que o ttulo seja "Employees/service" seguido pela data do dia. Parainserir o texto "Employees/Service", apenas colocamos uma zona de texto estticana seo title (usar "Edit/Insert Element/Static Text" ou o cone "T").

    Agora, suponhamos que desejamos tambm exibir a data atual. Inserimos um novocampo texto ("Edit/Insert Element/Text Field"). Fazemos duplo clique no objetocampo texto (text field object) e a seguir, na aba "TextField" da janela (ver Figura8).

    Figura 8. Adicionar um Campo DataNeste momento temos uma idia do poder de JasperReports: sendo o JasperReportcompilado uma classe Java, podemos usar qualquer expresso Java para auxiliar naconstruo do relatrio, assim como tambm campos JasperReports, variveis eparmetros. Por exemplo, a expresso "TextField" uma expresso Java e ser

    interpretada como tal.Para exibir a data atual, criamos apenas uma novo objeto Date() que serautomaticamente instanciado como a data e hora atuais. A seguir, informamos aoJasperReports o tipo de expresso a ser usado (na classe Textfield Expression:java.util.Date), quando dever[a ser avaliada a expresso (Evaluation time momento da Avaliao) e qual formato usar (Pattern field - "campo Formato").

    Finalizando, adicionamos uma borda transparente ao redor do ttulo ("Edit/InsertElement/Rounded Rectangle") e uma imagem ("Edit/Insert Element/Image") eento personalizamos as cores e fontes (ver exemplo na Figura 9).

  • 7/31/2019 apostila ireport

    8/15

    Figura 9. O Relatrio com uma Barra de Ttulo

    Calculando TotaisVamos supor agora, que desejamos exibir o custo total de todos os salrios dosempregados. Para calcular estes tipos de valores com o JasperReports, precisamosusar variveis de relatrio. Usamos variveis de relatrio para armazenar e calcular

    qualquer valor temporrio necessrio para o relatrio, tais como totais, subtotais,mdias, etc. Vejamos alguns detalhes importantes a respeito de variveis derelatrio:

    O tipo de classe varivel (variable class type) tem que sercompatvel com o tipo de campo (field type), para que osclculos funcionem corretamente. Portanto, devemos configur-lo como Doubl;

    O tipo de clculo informa ao JasperReports como calcular avarivel. Neste caso, configuramos como 'Sum', para achar asoma total de todos os valores do campo emp_salary;

    A expresso varivel representa o valor a ser avaliado noclculo. Esta expresso pode ter vrios formatos:

    o Uma expresso Java (por exemplo, New Date());o $F para campos (por exemplo, "$F{emp_salary}");o $V para variveis (por exemplo,

    "$V{service_employee_count}"); o $P para parmetros de relatrio;o $R para recursos localizados (localized resources).

  • 7/31/2019 apostila ireport

    9/15

    Para exibir as variveis de relatrio, abrimos o menu "View/Report Variables".Precisamos adicionar uma nova varivel para localizar o salrio do empregado ecalcular o valor total. Chamemos esta varivel de total_salaries (ver Figura 10).Configuramos o tipo de classe da varivel (variable class type) como Double e otipo de clculo (calculation type) como Sum.

    Figura 10. Adicionando uma Varivel NovaAgora, precisamos avaliar o campo 'emp_salary', portanto informamos"$F{emp_salary}" como a expresso varivelv (variable expression).A seguir, arrastamos esta varivel para a seo Column Footer e adicionamos umtexto de ttulo apropriado (ver o relatrio gerado na Figura 11). Seguindo osmesmos passos, podemos adicionar facilmente outros tipos de variveis: mdias,contas, valores mnimos e mximos, etc.

  • 7/31/2019 apostila ireport

    10/15

    Figura 11. Calculando os Salrios TotaisAdicionando GruposSuponhamos agora, que desejamos agrupar os empregados pelo tipo de servio, ecalcular um subtotal de salrios para cada tipo de servio. A primeira coisa a fazer definir um grupo de relatrio pelo menu "View/Report Groups" (ver Figura 12).

    Figura 12. Adicionando um Novo Grupo

    O campo mais importante aqui 'Group Expression'. Cada vez que esta expressomuda, ser gerado um novo grupo. Portanto, se agruparmos os registros pelo tipode servio, usaremos o campo nome do servio ("$F{serv_name}"). Comoimaginado, para que isto funcione corretamente, temos que ordenarapropriadamente a consulta SQL ("order by serv_name,... ").

  • 7/31/2019 apostila ireport

    11/15

    Quando adicionamos um novo grupo, obtemos duas novas sees: "serviceHeader"e "serviceFooter". Estas sees so geradas, respectivamente, no comeo e no fimde cada grupo de servio. Reposicionamos os cabealhos de coluna estticos naseo "serviceHeader" e colocamos o campo $F{serv_name} acima de estascolunas, para que ajam como um ttulo de grupo.

    Figura 13. Adicionando um Novo GrupoAgora criamos uma nova varivel chamada service_salary_subtotal, como ilustradona Figura 13. Esta ltima varivel, semelhante anterior, porm com duasdiferenas importantes: Reset Type 'Group', e Reset Group 'service,significando que a varivel ser zerada ao comeo de cada novo grupo de servio.

    Figura 14. O Layoute do Relatrio Agrupado

  • 7/31/2019 apostila ireport

    12/15

    Arrastamos esta varivel para a seo "serviceFooter", para exibir o subtotal detodos os salrios para cada grupo. O layoute dever ter o aspecto da Figura 14 e orelatrio gerado dever ter o aspecto da Figura 15.

    Figura 15. O Relatrio Agrupado

    Relatrios com GrficosNo JasperReports 1.0.1 e no iReport 0.5.1, podemos projetar relatrios comgrficos. Suponhamos que desejamos adicionar um grfico de torta, que mostra ao

    final do relatrio, o custo relativo do salrio para cada servio. Teramos quecoloc-lo na seo Summary. Podemos precisar aument-la um pouco, de forma acaber um grfico de bom tamanho. Portanto, adicionamos um novo grfico nestaseo usando o item de menu "Edit/Insert Element/Chart" ou o cone "Chart tool".Escolhemos o grfico de torta.

    Clicamos em new chart e a seguir na aba 'Chart'. A seguir, clicamos no boto 'EditChart Properties' e ento na aba 'Chart data'(ver Figura 16).

    Os parmetros de grfico so diferentes para cada tipo de grfico. A aba 'Chartdata'do grfico de torta tem trs zonas:

    Key Expression: identifica cada fatia. Informar "$F{serv_name}" para quecada fatia represente um servio;

    Value Expression: informe "$V{service_salary_subtotal}" para associar aocusto de salrio total de cada servio;

    Label Expression: o rtulo que ser exibido para cada fatia. Informar"$F{serv_name}" para exibir o nome do servio.

    Agora rodamos o relatrio. Deveremos obter um grfico de torta ao trmino domesmo (ver Figura 17).

  • 7/31/2019 apostila ireport

    13/15

    Figura 16. Chart Design

    Figura 17. Chart Report

  • 7/31/2019 apostila ireport

    14/15

  • 7/31/2019 apostila ireport

    15/15

    O Eclipse BIRT uma nova e promissora ferramenta para projeto e gerao derelatrios, com um plugin Eclipse agradvel. Embora relativamente nova, temalgumas funcionalidades poderosas de projeto e gerao de relatrios. Por outrolado, menos madura do que o JasperReports e parece tambm menos bemintegrada com o Java, pois depende de scripting JavaScript interno para otimizaodos relatrios. A integrao de conexes com datasources que no sejam JDBCpuros, parece ser tambm complicada. No obstante, vale a pena dar uma olhada.

    O Business Objects/Crystal Reports uma soluo BI/reporting comercial poderosa,com um desenhista grfico experto. Uma licena Crystal Reports Server XI Edition(20 usurios) custa aproximadamente $7,500. O Crystal Reports IX DeveloperEdition, uma verso mais leve e mais orientada para desenvolvimento de aplicaesWeb, est disponvel por aproximadamente $595 por desenvolvedor. A integraocom o Java, parece porm, ser tambm limitada, mesmo na sua mais recenteverso.

    Um Duo Dinmico

    O JasperReports uma ferramenta para gerao de relatrios poderosa e flexvel,fcil de integrar em um ambiente Java. O iReport elimina muito do trabalho difcilde projetar relatrios com o JasperReports sem comprometer o seu poder.Juntos, formam um par impressionante. Experimente!

    Sandro Miguel

    Coordenador de Laboratrio

    UNAMA Educao para o Desenvolvimento da Amaznia