RePHPort

From COREPHP

Jump to: navigation, search

Contents

Download

Faça aqui o download da RePHPort

Introdução

A engine RePHPort foi desenvolvida para interpretar e renderizar os relatórios com tags customizadas de marcação.

A alimentação dela, ao contrário de outras libs que trabalham com templates, pode ser feita diretamente a partir de um XML, reduzindo a tarefa de codificação e tratamento dos dados obtidos através de WebServices desenvolvidos em outras linguagens.

Estrutura

A RePHPort foi desenvolvida na seguinte estrutura fisica :

  rephport
       + document
       ¦    + format (formatos de documentos)
       + engine (chamada para a renderizaçao dos documentos)
       + lib (libs utilizadas pela engine)
       + util (classes utilitárias)


  • Os seguintes formatos possiveis de exportação são suportados PDF, Excel e HTML.
  • Foi utilizada a lib dompdf para exportar PDF.

Formato de dados

As tags customizadas para marcação são as seguintes:

  • header - tag para criação de cabeçalho do documento
   <!-- #header -->
     
      {Conteúdo}
     
   <!-- #header -->

Ex :

   <!-- #header -->
     
      COREPHP - Centro de Desenvolvimento de Tecnologias em PHP
      Coordenação Geral
     
      Documento gerado as ${datetime} por ${usuario}
      
   <!-- #header -->


  • foreach - tag para realizar loops.
   <!-- #foreach -->
     
      {Conteúdo}
     
   <!-- #endforeach -->

Ex:

   <!-- #foreach node="PEvento" -->
   
   <tr>
     <td align="center">${sala}</td>
     <td align="center">${nome_evento}</td>
     <td align="center">${ordemservico}</td>
     <td align="center">${wc_arrumacao}</td>
     <td align="center">${wc_equipamento}</td>
     <td align="center">${wc_material}</td>
     <td align="center">${copa}</td>
   <tr>
   
   <!-- #endforeach node="PEvento" -->


  • count - tag para contar o numero de registros de um node.
   <!-- #count -->

Ex:

   <!-- #count node="PEvento"--> - Registros

Criando um relatorio

Para criação de um relatorio é necessario se criar um template em html fazendo o uso quando necessario das tags de marcação da engine, os dados que serão passados para o template devem esta no formato de xml como a seguir:

   <report>
       <header>
           <datetime>18/07/2008</datetime>
           <usuario>fellipe.santos</usuario>
           <horario>14:38:54</horario>
       </header>
       <footer />
       <data>
           <PEvento id="1">
               <sala>5</sala>
                   <nome_evento>text_nome_evento1</nome_evento>
                   <ordemservico>text_ordemservico1</ordemservico>
                   <wc_arrumacao>text_wc_arrumacao1</wc_arrumacao>
                   <wc_equipamento>text_wc_equipamento1</wc_equipamento>
                   <wc_material>text_wc_material1</wc_material>
                   <copa>text_copa1</copa>
           </PEvento>
           <PEvento id="2">
               <sala>6</sala>
               <nome_evento>text_nome_evento1</nome_evento>
               <ordemservico>text_ordemservico1</ordemservico>
               <wc_arrumacao>text_wc_arrumacao1</wc_arrumacao>
               <wc_equipamento>text_wc_equipamento1</wc_equipamento>
               <wc_material>text_wc_material1</wc_material>
               <copa>text_copa1</copa>
           </PEvento>
       </data>
   </report>

O template será um html da seguinte forma:

   <html>
       <head>
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
           <title>Check List Diário</title>
       </head>
       <body>
       <!-- #header -->
       <table border="0" cellspacing="0" cellpadding="0" width="90%">
           <tr>
               <td colspan="2">
                   <strong>
                   `       COREPHP - Centro de Desenvolvimento de Tecnologias em PHP
                            Coordenação Geral
                   </strong>
               </td>
           </tr>
           <tr>
               <td colspan="2" align="center" bgcolor="#000000"><strong style="font-size:20px; color:#FFFFFF;">Check List Diário ${datetime}</strong></td>
           </tr>
           <tr>
               <td width="50%" style="border:#000000 solid 1px; font-size:12px"><strong>Verificado por: ${usuario}</strong></td>
               <td width="50%" style="border:#000000 solid 1px; font-size:12px"><strong>Horário: ${horario}</strong></td>
           </tr>
       </table>
       <!-- #header -->
       <!-- #data -->
       <table cellspacing="0" cellpadding="0" width="90%">
           <tr>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>Salas</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>Nome do Evento / Orgão</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>OS</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>N WC / Arrumação</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>N WC / Equipamentos</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>N WC / Material Pedido</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>Copa</strong></td>
           </tr>
           <!-- #foreach node="PEvento" -->
           <tr>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${sala}</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${nome_evento}</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${ordemservico}</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${wc_arrumacao}</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${wc_equipamento}</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${wc_material}</strong></td>
               <td align="center" style="border:#000000 solid 1px; font-size:12px"><strong>${copa}</strong></td>
           </tr>        
           <!-- #endforeach node="PEvento" -->
           <tr>
               <td align="right" colspan="7"><strong><!-- #count node="PEvento" --> - Registros</strong></td>
           </tr>
       </table>
       <!-- #data -->
       </body>
   </html>

Exportação do relatorio

A exportação do relatorio é dada da seguinte forma,

  $xml  = "<report>";
     $xml .= "<header>";
        $xml .= "<datetime>18/07/2008</datetime>";
        $xml .= "<usuario>fellipe.santos</usuario>";
        $xml .= "<horario>14:38:54</horario>";
     $xml .= "</header>";
     $xml .= "<footer />";
     $xml .= "<data>";
        $xml .= "<PEvento id=\"1\">";
           $xml .= "<sala>5</sala>";
           $xml .= "<nome_evento>text_nome_evento1</nome_evento>";
           $xml .= "<ordemservico>text_ordemservico1</ordemservico>";
           $xml .= "<wc_arrumacao>text_wc_arrumacao1</wc_arrumacao>";
           $xml .= "<wc_equipamento>text_wc_equipamento1</wc_equipamento>";
           $xml .= "<wc_material>text_wc_material1</wc_material>";
           $xml .= "<copa>text_copa1</copa>";
        $xml .= "</PEvento>";
        $xml .= "<PEvento id=\"2\">";
           $xml .= "<sala>6</sala>";
           $xml .= "<nome_evento>text_nome_evento1</nome_evento>";
           $xml .= "<ordemservico>text_ordemservico1</ordemservico>";
           $xml .= "<wc_arrumacao>text_wc_arrumacao1</wc_arrumacao>";
           $xml .= "<wc_equipamento>text_wc_equipamento1</wc_equipamento>";
           $xml .= "<wc_material>text_wc_material1</wc_material>";
           $xml .= "<copa>text_copa1</copa>";
        $xml .= "</PEvento>";		
        $xml .= "<PEvento id=\"2\">";
           $xml .= "<sala>2</sala>";
           $xml .= "<nome_evento>text_nome_evento2</nome_evento>";
           $xml .= "<ordemservico>text_ordemservico2</ordemservico>";
           $xml .= "<wc_arrumacao>text_wc_arrumacao2</wc_arrumacao>";
           $xml .= "<wc_equipamento>text_wc_equipamento2</wc_equipamento>";
           $xml .= "<wc_material>text_wc_material2</wc_material>";
           $xml .= "<copa>text_copa2</copa>";
        $xml .= "</PEvento>";
     $xml .= "</data>";
  $xml .= "</report>";
  $formato  = 'pdf' || 'html' || 'excel'
  $path     = $_SERVER['DOCUMENT_ROOT'].$GLOBALS['DIR_SISTEMAS']."includes/php/reports/";
  $template = "websae/template.php";
  $dados    = $xml;
  $rePHPort = EngineRePHPort::buildAndSave($formato, $path, $template, $dados);

O retorno do metodo 'build' || 'save' || 'buildAndSave' é um objeto RePHPort. Com o objeto pode se manipular a ação que seu controle desempenhará como por exemplo abrir em uma nova janela no caso da utilização junto a arquitetura da WirePhrame.

  return "window.open('".$GLOBALS["DIR_SISTEMAS"]."/includes/php/reports/".$rePHPort->getFileName()."', '_blank')";

Observações finais

É extremamente importante notar que o template e os dados devem ter o mesmo charset.

O charset suportado oficialmente é o UTF-8.

Assim, o template deve sempre conter o seguinte no seu cabeçalho:

   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
This page was last modified on 31 August 2009, at 12:37. This page has been accessed 341 times.