segunda-feira, 11 de abril de 2016

Integração Advpl x Excel #1


Fala galera!

Vou iniciar um post sobre como fazer uma integração Advpl e Excel, onde iremos exportar uma planilha com dados de clientes de forma simples.


Integração Advpl x Excel


Bom, antes de começar, vamos definir quais campos queremos que apareça em nossa planilha. 
Vou definir os seguintes campos:

Código Cliente, Nome, Endereço, Bairro, Cidade e Estado.

Primeiro, vamos implementar a função principal denominada expExcel (esse foi o nome que eu escolhi, você pode optar por qualquer outro nome de sua preferência).
#include "protheus.ch"                                                       
#include "rwmake.ch"
//_________________________________________________________________________________
//¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
//¦¦+---------------------------------------------------------------------------+¦¦
//¦¦¦Programa  ¦ EXPEXCEL  ¦ Autor ¦ Renan Ramos              ¦ Data ¦ 21.01.16 ¦¦¦
//¦¦¦----------+----------------------------------------------------------------¦¦¦
//¦¦¦Descriçäo ¦ Programa que exporta clientes para planilha do excel.          ¦¦¦
//¦¦+---------------------------------------------------------------------------+¦¦
//¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

user function expExcel

private oReport

//exibe um diálogo onde a execução de um processo pode ser monitorada através da régua de progressão.                               
processa({|| oReport := ReportDef(), oReport:PrintDialog()},"Imprmindo dados...")

return  

Bom, nesta função, além de executar o método processa(<função>,<mensagem>) , também declaramos o objeto oReport que será utilizado para configurarmos os métodos e atributos do relatório.

O método processa(<função>,<mensagem>) é utilizado para apresentar uma mensagem ao usuário enquanto algumas funções estão em execução. Em seu primeiro parâmetro é onde será definida qual a função será executada. Existe a opção de somente chamar uma outra função qualquer ou , como nosso caso, utilizar de blocos de códigos. No segundo parâmetro é apresentada a mensagem que o usuário irá visualizar durante a execução em background da função definida no primeiro parâmetro e nossa mensagem será "Imprimindo dados...". 

Bloco de código: esta facilidade é amplamente utilizada no universo ADVPL. Bloco de código não é nada diferente que o seu próprio nome diz, um bloco de código. Para melhor entendimento, vejamos nosso caso:

{|| oReport := ReportDef(), oReport:PrintDialog()}

Bloco de código são códigos diferentes separados por "," (vírgula) e são executados sequencialmente, ou seja, no nosso bloco de código, primeiro será executada o método reportDef() e posteriormente o método do objeto oReport, printDialog().

PrintDialog é a função responsável por abrir a tela de configuração de impressão do sistema.

Veja mais sobre Bloco de código neste post.

Então, esta função principal (expExcel()) irá executar o método processa() que por sua vez executará o bloco de código definido em seu primeiro parâmetro.

No próximo post vou passar o método reportDef() e prosseguir com a explicação de cada elemento do relatório.

Até mais!
Renan Rodrigues Ramos Desenvolvedor

Sou desenvolvedor, amo desenvolvimento de software, músico e apaixonado por filmes e seriados.