Escolar Documentos
Profissional Documentos
Cultura Documentos
Servios de FTP................................................................................................................................................................. 10
Servios de HTTP.............................................................................................................................................................. 11
O ADVPL ASP......................................................................................................................................................................... 15
A utilizao da API de acesso e do controle ActiveX mais indicada para aplicaes desenvolvidas em outras
linguagens e que necessitem interagir com o AP5. J com o acesso via Internet, possvel criar toda uma aplicao
Web que alie o poder de processamento do AP5 com a facilidade de formatao de interface do HTML.
Geralmente a utilizao de uma dessas opes ser indicada para aplicaes que necessitem executar processos
dentro do AP5, como por exemplo, colocar um pedido de venda diretamente na base de dados do sistema,
Importante: Para utilizar a API ou o controle ActiveX, necessrio a DLL de comunicao do AP5
chamada AP5CONN.DLL. Por isso, sempre que for necessrio utilizar uma dessas opes, a DLL de
comunicao deve estar em um path localizvel pelo Windows e deve estar atualizada em relao ao
AP5 Server em que a aplicao externa tentar se conectar.
Para utilizar a API de comunicao do AP5, necessrio conhecer a linguagem em que a aplicao externa est
escrita, a ponto de poder utilizar o conceito de DLLs do Windows. Qualquer linguagem de programao que
suportar a utilizao de DLLs poder utilizar a API de comunicao.
Diferentemente do controle ActiveX, a DLL de comunicao no pode ser tratada como um objeto, porm podem
existir vrias instncias de comunicao, o que permite a comunicao com diferentes servidores do AP5
simultneamente. O processo de utilizao resume-se em:
AP5CreateConnControl
Descrio: Criao de uma instncia de comunicao com o AP5 Server. Pode-se criar diferentes instncias de
comunicao, acessando um ou mais servidores do AP5.
Retorno: int - Retorna o Handle da instncia criada. Este Handle retornado dever ser informado em todas as
demais funes de comunicao, para identificao da instncia que ser utilizada.
AP5DestroyConnControl
Descrio: Destruio de uma instncia de comunicao com o AP5 Server. Aps a utilizao da API, e antes de
encerrar a execuo da aplicao externa, necessrio destruir o Handle criado com a funo anterior
para a liberao de memria.
AP5Connect
Descrio: Conexo a um AP5 Server. Esta funo no deve ser confundida com a funo
AP5CreateConnControl. Esta funo ir realizar a conexo com o AP5 Server indicado durante a
criao da instncia informada como parmetro.
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo. atravs do
Handle que definido em qual servidor, porta e ambiente os processos sero executados.
Retorno: bool - Retorna verdadeiro ou falso, indicando se a conexo foi efetuada com sucesso.
Sintaxe: lOk = AP5Connect(nAP5)
AP5Disconnect
Descrio: Desconexo de um AP5 Server. Esta funo no deve ser confundida com a funo
AP5DestroyConnControl. Esta funo ir encerrar a conexo ativa com um AP5 Server, da instncia
informada como parmetro.
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo.
Retorno: Sem retorno.
Sintaxe: AP5Disconnect(nAP5)
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo. atravs do
Handle que definido para qual servidor o parmetro ser enviado;
xParametro: indefinido - O tipo de dado do parmetro depender da funo utilizada, segundo os
tipos de dados permitidos explicados acima.
Retorno: bool - Retorna verdadeiro ou falso, indicando se o parmetro pde ser enviado ao AP5 Server com
sucesso.
ResultAsNumeric,
ResultAsString,
ResultAsLogical,
ResultAsDate,
ResultAsDateString,
ResultAsArray
Descrio: Estas funes so utilizadas para obter o retorno do AP5 Server aps a execuo de um processo.
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo.
Apenas para as funes ResultAsString e ResultAsDateString:
cBuffer: char * - Buffer de caracteres alocado para receber o retorno em formato caracter;
nSize: int - Tamanho do buffer passado no parmetro anterior.
Retorno: O tipo de dado do retorno depender da funo utilizada, segundo os tipos de dados definidos
anteriormente. Para as funes ResultAsString e ResultAsDateString o retorno ser o tamanho do
buffer preenchido.
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cBuild: char * - Buffer de caracteres para receber o nmero do build;
nSize: int - Tamanho do buffer passado no segundo parmetro.
PrepareEnv
Descrio: Funo utilizada para preparar o ambiente do sistema, ou seja, abrir arquivos, criar variveis, e tornar
o ambiente de execuo da aplicao externa em relao ao AP5 Server, o mais parecido possvel
com o que realizado pelos mdulos do sistema.
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cEnv: char * - Ambiente que ser utilizado para a abertura dos arquivos;
cEmp: char * - Cdigo da empresa do sistema (dois dgitos) que dever ser aberta;
cFil: char * - Cdigo da filial que ser utilizada (dois dgitos);
aTables: variant Este parmetro deve ser um array variant (para detalhes, consulte a documentao
da linguagem utilizada) contendo as siglas das tables que devero ser abertas (por exemplo SB1).
StartJob
Descrio: Esta funo permite a execuo de um processo (job) em um AP5 Server. O processo executado pode
ser qualquer um dos existentes no repositrio definido pelo ambiente informado, incluindo as funes
criadas pelo usurio (User Function). Pode tambm receber parmetros, bem como retornar um valor
para a aplicao externa, sempre utilizando-se das funes descritas anteriormente. A execuo de um
processo resume-se em:
A)
1. Enviar os parmetros (se existirem);
2. Executar o processo e aguardar sua finalizao;
3. Obter o resultado (se existir).
B)
1. Enviar os parmetros (se existirem);
2. Executar o processo sem aguardar sua finalizao;
Os processos so executados em threads de execuo separadas. Isso permite aplicao externa que
esteja utilizando a API, optar por executar o processo e continuar trabalhando enquanto o mesmo est
em execuo. Porm, somente poder obter um retorno quando esperar at que o processo termine de
ser executado.
Obs.: Como estes processos so executados sem que uma instncia do AP5 Remote esteja ativa,
devem ser criados sem nenhum comando de interface (criao de janelas, comandos de alerta, help,
etc). Se um comando de interface for utilizado no cdigo ADVPL de um processo, a execuo deste
atravs da API gerar um erro de execuo.
Retorno: bool - Retorna verdadeiro ou falso, indicando se o processo foi iniciado com sucesso.
Sintaxe: StartJob(nAP5,ENVIRONMENMT,MESEXTENSO,true)
CallProc
Descrio: Esta funo tem o mesmo objetivo que a anterior, porm sempre aguardar o trmino do processo
para que o controle volte aplicao externa, e tem algumas diferenas conceituais:
A) No se pode escolher o ambiente no qual o processo ser executado. Os processos
executados pela CallProc sero sempre executados no ambiente indicado na criao da
instncia com a funo AP5CreateConnControl;
B) Um processo executado atravs da funo StartJob, comear de um ambiente
totalmente novo. Porm, os processos executados pela funo CallProc mantm o ambiente
da ltima execuo. Assim, o valor de variveis criadas, os arquivos abertos, etc, so mantidos
na prxima execuo.
Parmetros: nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cFunc: char * - Nome do processo ou funo que ser executado no AP5 Server.
Retorno: Bool - Retorna verdadeiro ou falso, indicando se o processo foi finalizado com sucesso.
Sintaxe: CallProc(nAP5,CALCEST)
Com a utilizao da API, pode-se criar toda uma aplicao, em Visual Basic por exemplo, que executar funes do
sistema Advanced como o usurio faria atravs do AP5 Remote:
If AP5Connect(nAP5) Then
AddNumericParam(nAP5,5)
lOk = CallProc(nAP5,MESEXTENSO)
If lOk Then
ResultAsString(nAP5,cRes)
Else
CRes = No foi possvel obter o ms por extenso
End if
AP5Disconnect(nAP5)
End if
AP5DestroyConnControl(nAP5)
Importante: A notao dos tipos de dados e da sintaxe mencionados na descrio das funes
segue o padro de linguagens como a linguagem C. Deve-se considerar os exemplos de sintaxe
conforme a linguagem utilizada.
Todas as funes de caracter como ResultAsString ou AP5BuildNumber, trabalham com buffer
de caracteres. Isto significa que o buffer que receber o retorno deve ser alocado na linguagem
utilizada e que o tamanho alocado dever ser passado como parmetro para a funo chamada.
A aplicao externa tambm ser responsvel por liberar a memria do buffer alocado.
O controle ActiveX tem as mesmas funcionalidades da API. Porm o formato de utilizao diferenciado. O
controle ActiveX um objeto que deve ser registrado no computador onde ser utilizado e durante a execuo da
aplicao externa, dever ser criado, utilizado e destruido ao final. Para maiores detalhes, consulte a documentao
da linguagem utilizada ou a documentao do conceito ActiveX na pgina da Microsoft (http://www.microsoft.com).
Servios de FTP
O protocolo FTP (File Transfer Protocol) permite a transferncia de arquivos entre um servidor e uma
aplicao client de FTP (com um Web Browser como o Internet Explorer, por exemplo). Utilizando o AP5 Server
como um servidor FTP, os usurios podero remotamente baixar arquivos disponibilizados em um diretrio
configurvel no servidor. Pode-se tambm habilitar um recurso de auto-atualizao para o AP5 Remote, que ir
automaticamente baixar arquivos compactados para se auto atualizar quando necessrio.
[FTP]
Enable=1
Path=C:\AP5\FTP
Port=21
O recurso de auto-atualizao encontrado no AP5 Remote funciona atravs da deteco de diferenas na verso das
DLLs locais (ou seja, que se encontram juntamente com o executvel do AP5 Remote). Quando isto ocorre, o
usurio questionado sobre a execuo da auto-atualizao. Se tudo estiver corretamente configurado no arquivo de
configurao do AP5 Remote (AP5RMT.INI para maiores detalhes, consulte a documentao do AP5 Remote), ao
escolher que deseja tentar uma auto-atualizao, o AP5 Remote ir abrir uma conexo FTP com o Server
configurado e baixar os arquivos compactados (com a extenso .CAB) contendo as DLLs e executveis mais
atualizados. Os arquivos sero ento descompactados localmente para a atualizao.
Para habilitar o servio de HTTP no AP5 Server, os seguintes grupos devem ser criados no arquivo de configuraes
(AP5SRV.INI):
Quando uma URL requisitada atravs de um Web Browser (seja atravs de um comando POST, um link ou
diretamente atravs do campo de URL do Browser), essa requisio recebida pelo AP5 Server que a tratar do
seguinte modo:
Uma funo executada no momento do recebimento de uma requisio HTTP executada como um JOB,
ou seja, no contem interface. Por isso, tais funes no podem conter comandos de interface, como criao
de janelas ou exibio de helps e mensagens de alerta;
A nica interface possvel a utilizada no client HTTP. Por isso, tais funes devem SEMPRE retornar uma
string de caracteres. Aps o processamento da funo, essa string de retorno ser enviada diretamente ao
client HTTP e este ser o responsvel por sua interpretao. Por exemplo, utilizando um Web Browser
como client pode-se retornar a string de comandos HTML diretamente. O HTML ento ser propriamente
exibido no Web Browser;
Qualquer retorno diferente de uma string de caracteres gerar um erro que ser enviado aplicao client
HTTP (o erro gerado Invalid Proc Return);
O AP5 Server passa alguns parmetros para as funes chamadas. Isso significa que ao criar funes para
serem utilizadas em resposta s requisies HTTP, deve-se criar o cabealho da funo com estes
parmetros. No obrigatrio utilizar os mesmos nomes de parmetros sugeridos abaixo quando criar
diretamente estas funes. Porm, como so esses os nomes utilizados no ADVPL ASP explicado mas a
frente, aconselhvel utiliz-los por motivo de padronizao:
- __aCookies: Este parmetro recebe um array bidimensional com os Cookies criados na aplicao client
HTTP (por exemplo, no Internet Explorer 5). Pode-se utiliz-lo para checar validaes mantidas nas
mquinas client por exemplo. Para maiores detalhes, consulte a documentao do HTML ou do Web
Browser utilizado.
- __nProcID: Contm o Handle da Thread de execuo daquela funo. A utilizao deste parmetro
ser explicada juntamente com o tpico ADVPL ASP posteriormente;
- __aProcParms: Este parmetro recebe um array bidimensional com os parmetros enviados na linha de
URL do Web Browser. Por exemplo, na execuo de uma funo via linha de URL do Web Browser
como:
http://servidor/vende.apl?cod=000001&nome=PRODUTO DE TESTE&quant=20
a funo chamada vende receber o array __aProcParms da seguinte forma:
{
{cod, 000001},
{nome, PRODUTO DE TESTE},
{quant, 20}
}
Advanced Protheus - AP5 Conectividade e Advpl ASP 13
CopyRight 2000 Release A Microsiga Software S.A.
A funo pode tratar estes dados recebidos para realizar processamentos especficos. muito til
tambm para criar links de execuo diretamente atravs de um Web Browser.
- __cHTTPPage: Esse parmetro recebe o nome da pgina, arquivo ou funo originalmente requisitada
para o AP5 Server. utilizado quando as chaves GETPROC e POSTPROC (explicadas anteriormente)
so habilitadas no arquivo de configuraes do AP5 Server. A funo configurada ir receber nesse
parmetro o nome original requisitado e poder executar algum processamento especfico para
continuar o processo (retornando a prpria funo original) ou desviar para outra pgina, por exemplo.
A funo a seguir um bom exemplo para ser executado atravs de um Web Browser como o Internet Explorer ou o
Netscape Navigator. Ela retorna uma string contendo a pgina HTML onde est escrita a mensagem Hello World e
a lista de parmetros passados na linha de URL. Para test-la, crie um arquivo novo no AP5 IDE, cole o cdigo
abaixo e salve o arquivo como WEBDEMO.PRW. Aps compilar o programa, basta chamar em um Web Browser
uma URL como:
http://localhost/u_webdemo.apl?cod=000001&desc=DESCRICAO DO PRODUTO&qtd=2
Cdigo da funo:
#include "rwmake.ch"
If Len(__aProcParms) = 0
cHTML += '<p>Nenhum parmetro informado na linha de URL.'
Else
For i := 1 To Len(__aProcParms)
Next i
Endif
Return(cHTML)
Para crias as funes que sero utilizadas em chamadas via um Web Browser, ou seja, em
qualquer request HTTP, deve-se seguir o procedimento normal de criao de funes no
AP5: utilizando o AP5 IDE para a edio e para a compilao.
Note que no caso de funes do usurio (User Function) o nome chamado na URL do
Browser tambm dever conter o U_ no comeo da funo, por exemplo:
http://servidor/u_webrelato.apl
E deve-se sempre indicar a extenso .APL para que o AP5 Server identifique que uma funo a ser
executada.
Os arquivos ADVPL ASP tm a extenso padro .APH. So arquivos texto e devem ser adicionados a um projeto no
AP5 IDE e compilados da mesma maneira que os programas tradicionais. A diferena que o AP5 Server
identificar que se trata de um ADVPL ASP e executar uma espcie de tradutor (parser) antes que a compilao
seja executada. Este parser ir transformar todo o arquivo em uma funo nica, que receber os mesmos parmetros
das funes APL simples, como explicado anteriormente, e retornar uma string. O desenvolvedor no precisa se
preocupar em retornar HTML algum, pois o APH tambm um arquivo HTML. A funo que foi gerada na
compilao ir se encarregar de retornar o HTML contido no arquivo, depois que o cdigo foi processado.
Assim como outros ASPs, a diferenciao entre script HTML e cdigo efetuada atravs dos caracteres <% para
indicao de abertura de cdigo e %> para indicao do encerramento de cdigo.
Por exemplo, o HTML abaixo contm um pedao de cdigo ADVPL separado pelos delimitadores:
<html>
<head>
<title>ADVPL ASP Demo</title>
</head>
<body>
<p>Bem vindo ao mundo do ADVPL ASP!</p>
<%
// Soma os 100 primeiros nmeros
Local i, nSoma := 0
For i := 1 To 100
NSoma += i
Next i
%>
</body>
</html>
Quando este arquivo for requisitado ao AP5 Server (atravs de uma chamada em URL por exemplo) o cdigo entre
os delimitadores ser executado, porm o script colocado ao redor do cdigo ser mantido exatamente como se
encontra.
Note que tambm pode existir diferentes blocos de cdigo interpretvel separados pelos delimitadores, dentro de um
mesmo arquivo.
To importante quanto mesclar cdigo interpretvel com script de formatao HTML, utilizar os comandos
ADVPL para alterar o script de formatao. Ou seja, colocar o contedo de variveis, campos, etc, diretamente no
HTML que ser enviado aplicao client (ao Browser por exemplo). Isso pode ser realizado atravs dos
delimitadores de avaliao. Os delimitadores de avaliao so <%= para abertura e %> para encerramento.
Diferentemente dos delimitadores de cdigo interpretvel, estes devem sempre estar na mesma linha. Com eles
pode-se criar uma linha de script HTML, cujo contedo contm uma expresso que ser avaliada em tempo de
execuo:
<b>Esta linha HTML, mas a data exibida aqui: <%= Time() %> foi obtida em
tempo de execuo.</b>
No exemplo acima, a linha HTML ser retornada para o Browser com o resultado da funo time (ou seja, a hora
atual no servidor) inserido no texto.
Utilizando todos esses conceitos, pode-se criar toda uma apliao Web baseada no AP5. Ou seja, o processamento e
acesso aos dados fica por conta do AP5 Server, e a interface fica por conta do Browser (utilizando o HTML). Abaixo
um exemplo de um relatrio de clientes criado utilizando o ADVPL ASP. Para test-lo basta copiar o cdigo, salv-
lo como WEBREL.APH e compilar o arquivo atravs do AP5 IDE:
<html>
<head>
<%
#define FIELD_CODDE "FROM_CODE"
#define FIELD_CODATE "TO_CODE"
#define FIELD_LOCDE "FROM_LOCAL"
#define FIELD_LOCATE "TO_LOCAL"
Local cCodDe,cCodAte,cLocDe,cLocAte
Local nPos
<%
// "Impresso" dos parmetros
</table>
</center>
</div>
<p align="left"> </p>
<%
// Abertura dos arquivos e posicionamento do ponteiro
If Select("SB2") == 0 .Or. Select("SB1") == 0
RpcSetEnv ( "99", "01", "", "","","", {"SB1","SB2"} )
Endif
dbSelectArea("SB1")
dbSetOrder(1)
dbSeek(xFilial("SB1")+cCodDe+cLocDe,.T.)
%>
<%
While !EOF() .And. xFilial("SB1") == SB1->B1_FILIAL .And. SB1->B1_COD <= cCodAte;
.And. SB1->B1_LOCPAD <= cLocAte
SB2->(dbSetOrder(1))
SB2->(dbSeek(xFilial("SB2")+SB1->B1_COD+SB1->B1_LOCPAD,.F.))
%>
<tr>
<td width="12%" bgcolor="#FFFFCC"><%= HTMLAllTrim(SB1->B1_COD) %></td>
<td width="50%" bgcolor="#FFFFCC"><%= HTMLAllTrim(SB1->B1_DESC) %></td>
<td width="7%" bgcolor="#FFFFCC"><%= HTMLAllTrim(SB2->B2_LOCAL) %></td>
<td width="17%" bgcolor="#FFFFCC"><%= SB2->B2_QATU %></td>
<td width="14%" bgcolor="#FFFFCC"><%= "R$" + Str(SB2->B2_CM1,8,2) %></td>
</tr>
<%
dbSkip()
EndDo
%>
</table>
</body>
Aps ter o cdigo compilado, pode-se visualizar o resultado acessando atravs de um Web Browser como o Internet
Explorer a seguinte URL:
http://servidor/h_webrel.apl