sábado, 17 de março de 2012

ZK Framework + Java + iReport

O post que segue é uma forma padrão de se fazer uma chamada para relatórios do tipo Jasper Reports dentro do framework ZK utilizando o Java. A sacada para uma chamada de Jasper é seguir todos os passos e sempre enviar um objeto para ser aberto dentro do relatório. Objeto vazio não permite a abertura do relatório. O objeto com o conteúdo do relatório pode ser enviado dentro de uma lista. Dentro dessa lista é possível enviar outras listas com o conteúdo de subrelatorios. Ao invés de mandar um objeto também é possível enviar uma conexão e criar o SQL dentro do Jasper. Outra sacada é na configuração, as libs do projeto em Java devem conter a mesma versão do jar utilizado no iReport. Outros exemplos podem ser retirados de dentro do fórum do ZK.

RelatorialComposer.java 


  
  1. import java.io.File;
  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.Map;
  9. import model.Chaves;
  10. import net.sf.jasperreports.engine.JRDataSource;
  11. import net.sf.jasperreports.engine.JRException;
  12. import net.sf.jasperreports.engine.JasperExportManager;
  13. import net.sf.jasperreports.engine.JasperFillManager;
  14. import net.sf.jasperreports.engine.JasperPrint;
  15. import net.sf.jasperreports.engine.JasperReport;
  16. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
  17. import net.sf.jasperreports.engine.util.JRLoader;
  18. import net.sf.jasperreports.view.JasperViewer;
  19. import org.zkoss.util.media.AMedia;
  20. import org.zkoss.zk.ui.Component;
  21. import org.zkoss.zk.ui.Executions;
  22. import org.zkoss.zk.ui.WrongValueException;
  23. import org.zkoss.zk.ui.util.GenericForwardComposer;
  24. import org.zkoss.zul.Filedownload;
  25. import org.zkoss.zul.Iframe;
  26. import org.zkoss.zul.Label;
  27. import org.zkoss.zul.Timebox;
  28. import org.zkoss.zul.Window;
  29. public class RelatorialComposer extends GenericForwardComposer {
  30.     Window calendarWin;
  31.     Calendar calendarioInicio;
  32.     Calendar calendarioFim;
  33.     Label msgInicio;
  34.     Label msgFim;
  35.     Label lblDtInicio;
  36.     Label lblDtFim;
  37.     List<String> reportObject;
  38.     public static final SimpleDateFormat dateHourFormat = new SimpleDateFormat(
  39.             "HH:mm");
  40.     public static final SimpleDateFormat dateAndHourFormat = new SimpleDateFormat(
  41.             "dd/MM/yyyy HH:mm");
  42.     private Timebox hrSunInitS1;
  43.     private Timebox hrSunFinalS1;
  44.     private Iframe report;
  45.     List<Chaves>listChaves;
  46.     Chaves chaves = new Chaves();
  47.     Chaves chavesDois = new Chaves();
  48.     /**
  49.      *
  50.      */
  51.     private static final long serialVersionUID = 1L;
  52.     @Override
  53.     public void doAfterCompose(Component comp) throws Exception {
  54.         // TODO Auto-generated method stub
  55.         super.doAfterCompose(comp);
  56.        
  57.        
  58.     }
  59.     public void onClick$createReport() throws JRException {
  60.         // validaData();
  61.         listChaves=new ArrayList<Chaves>();
  62.         // Objeto do dataset
  63.         for (int i = 1; i < 10; i++) {
  64.             chaves.setChave0(i);
  65.             chaves.setChave1(i);
  66.             chaves.setChave2(i);
  67.             chaves.setChave3(i);
  68.             chaves.setChave4(i);
  69.             chaves.setChave5(i);
  70.             chavesDois.setChave0(i);
  71.             chavesDois.setChave1(i);
  72.             chavesDois.setChave2(i);
  73.             chavesDois.setChave3(i);
  74.             chavesDois.setChave4(i);
  75.             chavesDois.setChave5(i);
  76.            
  77.             listChaves.add(chaves);
  78.             listChaves.add(chavesDois);
  79.         }
  80.        
  81.        
  82.        
  83.        
  84.        
  85.         String sourceFileName = "reports/reportTra.jasper";
  86.         String reportSrc = Executions.getCurrent().getDesktop().getWebApp().getRealPath(sourceFileName);
  87.         // Cria o DataSource
  88.         JRBeanCollectionDataSource jrb = new JRBeanCollectionDataSource(listChaves);
  89.         File reportFile = new File(reportSrc);
  90.         JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(reportFile);
  91.         // Parametros fixo de relatorio
  92.         Map<String, Object> parameters = new HashMap<String, Object>();
  93.         parameters.put("tituloRelat""Relatório por Intervalo Diário");
  94.         JasperPrint print = JasperFillManager.fillReport(relatorioJasper, parameters, jrb);
  95.         final AMedia amedia = new AMedia("reportManagementKey.pdf""pdf","application/pdf", JasperExportManager.exportReportToPdf(print));
  96.         //report.setContent(amedia);
  97.         if(amedia != null){
  98.             Filedownload.save(amedia);
  99.         }
  100.        
  101.        
  102.     }
  103.    
  104. }




relatorial.zul


  
  1. <?page title="" contentType="text/html;charset=UTF-8"?>
  2. <zk>
  3. <window id="calendarWin" title="Relatório Mensal" border="normal" position="middle" width="100%" apply="composition.RelatorialComposer" closable="true">
  4.         <grid id="gridHoliday" style="border:none">
  5.                 <columns>
  6.                     <column align="right"/>
  7.                     <column align="left"/>
  8.                 </columns>
  9.                 <rows>
  10.                     <row>
  11.                         <label value="Relatório:" />
  12.                         <button label="Gerar Relatório" id="createReport" />
  13.                     </row>
  14.                 </rows>
  15.         </grid>
  16.         <hlayout>
  17.             <iframe id="report" />
  18.         </hlayout>    
  19. </window>
  20. </zk>




Outra fonte boa para relatório usando envio de conexão em Java.
http://www.dsc.ufcg.edu.br/~jacques/cursos/daca/html/documentviews/relatorios.htm

Utilizando PHP
http://cachina.wordpress.com/2010/01/29/usando-o-ireport-como-gerador-de-relatorios-para-php/

Libs Jasper Reports
http://sourceforge.net/projects/jasperreports/files/jasperreports/ 

Nenhum comentário:

Postar um comentário