Você está na página 1de 58

Curso de Introduo a Plataforma

ADVPL/ASP e Webservice

Aprenda de uma forma simples ,


objetiva e direta os principais conceitos
do ADVPL/ASP e WebService. O curso
apresenta o ADVPL/ASP, a linguagem
utilizado produzida para o
desenvolvimento de aplicaes
baseadas na Web. Alm de apresentar
os principais conceitos Webservice
incluindo exemplos de Montagem de um
Cliente em Protheus.

Curso de Introduo a Plataforma ADVPL/ASP WebService 1


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
ndice Analtico

Captulo 1 Arquitetura da ADVPL ASP ..................................................... 4


Introduo ........................................................................................................4
Repositrio de Objetos......................................................................................4
APO (Advanced Protheus Object)..................................................................4
Representao grfica do processamento........................................................5
Ferramentas de Produo.................................................................................6

Captulo 2 Variveis......................................................................................7
Introduo .........................................................................................................7
Nomenclatura das Variveis .............................................................................7
Declarando Variveis ........................................................................................7
Operadores .......................................................................................................8

Captulo 3 Estrutura da ADVPL ASP..........................................................09


Introduo ........................................................................09
Exemplo ...........................................................................................................09

Captulo 4 Estruturas de Controle ............................................................11


Instruo if .. then .. else ..elseif ............11
Instruo Do case ...........................................................................................15
Loops....................................15

Captulo 5 Recuperando Dados enviados por Post e Get ......................16


Recuperando Dados com Metdo POST ......................................16
Recuperando Dados com Metdo GET ..........................................................18

Captulo 6 Acessando Base de Dados.....................................................22


Introduo ......................................................................................................22
Inserindo dados em uma tabela......................................................................24

Captulo 7 Web Services em ADVPL - CLIENT .......................................28


Introduo ......................................................................................................28

Curso de Introduo a Plataforma ADVPL/ASP WebService 2


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Termos Tcnicos ...........................................................................................28
Definio do Servio em Advpl - Client .........................................................29
Passos para a utilizao do Fonte - Client ....................................................29
Passo 1 : Determinar como obter o WSDL do servio desejado...................30
Passo 2 : Gerar o Fonte AdvPl do Client usando o Assistente do IDE .........31
Passo 3 : Criar um fonte para a obteno do horrio ...................................34
Passo 4 : Executar o programa de testes......................................................35
Passo 5 : Obter informaes de debug........................................................36
Web Services Client Codigos de Erro.........................................................38

Captulo 8 Web Services em ADVPL - SERVER ....................................48


Introduo .....................................................................................................48
Termos Tcnicos ..........................................................................................48
Definio do Servio em Advpl - Server .......................................................49
Declarao de um Web Service SERVER em Advpl.................................50
Regras para Nomenclatura dos Servios / Estruturas / Dados e Mtodos...51
Nomenclatura dos Servios...........................................................................51
Nomenclatura de Estruturas..........................................................................51
Nomenclatura de Dados ( Campos ) ............................................................51
Tipos de Dados Bsicos................................................................................52
Mtodos ( Aes ) ........................................................................................53
Publicando um WEB Service no Protheus - Configurao...........................53
Web Services Ponto de Entrada WSSTART.............................................55

Curso de Introduo a Plataforma ADVPL/ASP WebService 3


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Captulo 1 - Arquitetura da ADVPL ASP

Introduo

Uma pgina ASP (Active Server Pages) uma pgina HTML contendo
cdigo interpretveis em uma linguagem compreensvel ao servidor HTTP
em uso. Por exemplo, o IIS (Internet Information Server) da Microsoft
recepciona scripts em VBScript ou o JavaScript para criar suas pginas
ASP, do mesmo modo que o AP7 Web Server recepciona a ADVPL ASP.
Uma pgina ASP uma combinao de script HTML e cdigo
interpretvel. No ADVPL ASP esse cdigo padro xBase, portanto a
preocupao maior daqueles que j conhecem e trabalham com o AP7 e
desejam desenvolver pginas ativas para aplicaes Web utilizando essa
facilidade conhecer HTML.

Uma caracterstica fundamental da ADVPL ASP que o script


executado no servidor, protegendo totalmente a propriedade intelectual e
tambm eliminando o trabalho do programador de se preocupar com qual
browser o usurio estaria utilizando para visualizar as pginas, devido a
incompatibilidade. Outra caracteristica o processamento do lado do
servidor.

Repositrio de Objetos

O repositrio do AP7 um conjunto de Objetos ADVPL ASP (APOs)


compilado de acordo com a Environment definida no AP7 IDE que podem
ser utilizados a qualquer momento de uma aplicao.

Repositrio
APOs

.aph

APO (Advanced Protheus Object)

Curso de Introduo a Plataforma ADVPL/ASP WebService 4


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
O APO conhecido como um Objeto ou um programa ADVPL. Um
conjunto de APOs formam um repositrio que esto armazenados dentro
do AP7 Web Server conforme descrito anteriormente.

Quando uma URL requisitada atravs de um Browser (seja atravs de


um Formulrio HTML, um link ou diretamente atravs do campo de URL
do Browser), essa requisio recebida pelo AP7 Server que a tratar do
seguinte modo:

Representao grfica do processamento.

Solicitao func.APW
Cliente

APOs
AP7
Resposta HTML Web Server
(repositrio)

A seguir dispomos os vrios comportamento ou resposta do AP7 Server


para cada tipo de solicitao.

Extenso Descrio O que acontece


do arquivo Exemplo
Nenhuma Um endereo Ao chamar um endereo URL sem http://servidor/
http nico, sem informar arquivo nenhum, o AP7 Server
um nome de ir procurar o arquivo chamado
arquivo definido. DEFAULT.HTM para enviar ao Web
Browser que efetuou o request.
.HTM;.HTML Pginas HTML, A pgina HTML, ou qualquer que seja o http://servidor/cadastro.h
ou outra arquivos texto, arquivo, ser simplesmente enviado ao tm
extenso arquivos de Web Browser, sendo que este o ou
qualquer. imagem, som, responsvel pela sua http://servidor/imagem.gif
vdeo, etc. traduo/interpretao.
.APW uma chamada Quando o AP7 Server receber um request http://servidor/acerto.apw
direta a uma deste tipo, a funo chamada (no ou
funo do exemplo func.apw, a funo chamada http://servidor/runprog.ap
repositrio do func, sem a extenso) ser executada no w
AP7. AP7 Server configurado na chave
[nome_do_server].
O que dever ser retornado pela funo

Curso de Introduo a Plataforma ADVPL/ASP WebService 5


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
uma string, que ser enviada para o Web
Browser.

.APH uma chamada Uma pgina Advpl ASP uma pgina http://servidor/activep.ap
para uma pgina HTML mesclada com cdigo executvel w
ativa (uma ou interpretvel no server. Tais pginas ou
pgina em so criadas utilizando qualquer editor de http://servidor/cadastro.a
ADVPL ASP). texto ou editor HTML, e devem ter pw
SEMPRE a extenso .APH. Devem ser
compiladas atravs do AP7 IDE. Durante
a compilao, o AP7 Server transforma
essa pgina em uma funo interna que
ser executada da mesma maneira que
aquelas chamadas .apw explicadas
anteriormente.
Como so funes tambm, as pginas
em Advpl ASP devem ser chamadas do
Web Browser com a extenso .apw

Ferramentas de Produo

Para aculturar-se em ADVPL ASP fundamental ter conhecimento em


HTML, pois uma pgina sempre haver cdigo ADVPL ASP mesclado
com HTML.

Os arquivos que contm o cdigo para gerar as pginas de seu site so


arquivos texto, portanto, voc pode utilizar qualquer editor de texto do
mercado.

Utilizaremos o AP7 IDE para escrever nossos cdigos ADVPL ASP com
HTML, porem utilizaremos tambm uma ferramenta que nos auxilie no
HTML. Existem vrias no mercado, mas as mais familiares so
Dreamweaver da Macromedia, FrontPage e o Visual Studio da Microsoft
entre outros .

Captulo 2 - Variveis

Curso de Introduo a Plataforma ADVPL/ASP WebService 6


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Introduo

Variveis um espao temporrio na memria RAM que pode ser


manipulado.

Nomenclatura das variveis

No Hypersite seguimos uma padronizao de nomenclaturas para facilitar


o entendimento dos complexos scripts.

nXXXX = varivel Numeric (nmerico). Quando voc se deparar com uma


varivel que possui o prefixo n significa que o contedo dela um valor
nmerico. Ex.: nVLUN = 100

dXXXX = varivel Date (data). Quando voc se deparar com uma varivel
que possui o prefixo d significa que o contedo dela uma data. Ex.:
dDTPG = 14/08/2000

cXXXX = varivel Char ou String (texto). Quando voc se deparar com


uma varivel que possui o prefixo c significa que o contedo dela um
texto. Ex.: cDTPG = Makira

lXXXX = varivel logic (lgico). Quando voc se deparar com uma


varivel que possui o prefixo l significa que o contedo dela um valor
lgico (verdadeiro ou falso). Ex.: lATIVO = F

Declarando variveis

A declarao das variveis obrigatrio na ADVPL ASP. H dois tipos de


variveis a Local e a Private.

Utiliza-se uma varivel Public quando h necessidade de armazenar o


contedo dela durante toda a navegao do usurio dentro do site, ao
contrrio da Local que utilizada momentaneamente.

Operadores

Curso de Introduo a Plataforma ADVPL/ASP WebService 7


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Operador Descrio
= Comparao (igual)
== Comparao (exatamente igual)
:= Atribuio
!= ou <> Diferente

Captulo 3 Estrutura da ADVPL ASP

Curso de Introduo a Plataforma ADVPL/ASP WebService 8


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Introduo

Todas as pginas escritas devero ser referenciadas a um programa APL


seguindo sempre a mesma nomenclatura. A seguir temos a estrutura de
um arquivo APW.

Exemplo

Montaremos a seguir um programa fonte simples que retorna a Data do


sistema. Ele ter o nome de RetDate, a chamada no browser deve ser
http://nome_do_server/u_RetDate.apw. Abaixo damos a descrio de
cada parte da chama.

Endereo do Server: http://nome_do server. Informa o endereo do server


onde esta compilada a pgina. Por default o server esta na porta 80
portanto no necessrio informar a porta, caso contrario a porta deveria
ser informa com : (dois pontos) e o nmero da porta aps o nome do
serve. Ex.: http://nomedo_server:82/u_RetDate.apw

Programa: U_RetDate.apw
Nomenclatura do nome :U_nnnnnnn.apw
U_ : Informa que que uma User Function (Funo de Usurio). W_
(Web Function) e (Function) so exclusiva para o desenvolvimento interno
da Microsiga Software S\A. Portanto clientes no conseguiram compilar
Web Function e Function, somente User Function.
nnnnnnn: nome da Funo
.apw: extenso de uma pgina ADVPL ASP

#INCLUDE "PROTHEUS.CH" //Include obrigatrio

Curso de Introduo a Plataforma ADVPL/ASP WebService 9


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
#INCLUDE "APWEBSRV.CH" //Include obrigatrio
#INCLUDE "WEBEXDEFS.CH" //Include obrigatrio

//comentarios sobre autor, data, descrio, retorno, etc. Opcional


/* --------------------------------------------------------------------------------------
Funcao RetDate
Autor Antonio
Data 07/09/2003
Descricao Retorna a Data
Retorno Retorno da Data do Sistema
-------------------------------------------------------------------------------------- */
User Function RetDate() // Clientes da Microsiga Software S\A devem
sempre desenvolver User Function. Utilza-se Function, Web Function
para desenvolvimento interno da Microsiga Software S\A.

Local cHtml //declarao da varivel de retorno


[ Espaco para declaracao de Variaveis e chamada de Metodos]

// Inicializacao do Ambiente **obrigatorio


Web Extended Init cHtml start "w_log_clire" //Opcional

cHtml := Date() //atribui a data do Sistema. Normalmente palavras


em outra cor que aparecem no IDE so palavras reservadas ou funes
do internas do sistema.

[ Espaco reservado para o processamento, criao de cursores , etc,,, ]

// Fechamento de ambiente ** obrigatorio


Web EXTENDED End
Return cHtml // Esse ser o retorno da Funo RetDate

Captulo 4 Estruturas de Controle

Curso de Introduo a Plataforma ADVPL/ASP WebService 10


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Instruo if .. then .. else ..elseif

A ADVPL ASP suporta as seguintes estruturas de deciso:

IF <condio>
<Instruo>
Elseif
<Instruo>
Else
<Instruo>
Endif

Exerccio: Vamos exemplificar a condio IF. O programa a seguir vai verificar


se no momento da execuo a hora for menor que 12 hs ento enviar a
mensagem Bom dia ! caso contrrio a mensagem ser Boa tarde !.

1. Vamos criar um novo Projeto no AP7 IDE.


a. Selecione a opo do menu Projetos e em seguida Novos
2. Digite o seguinte script e logo a seguir leia a explicao passo a passo:
Obs.: Em todos os scripts contidos nesta documentao ser utilizado a
numerao de linhas para fazer referncia s linhas do cdigo facilitando
a explicao, portanto, ao inseri-lo no considere os nmeros.

3. Este cdigo abaixo ser o nosso arquivo .apw, portanto ao salv-lo


informe a sua extenso.

1 User Function ex001()


2
3 Local cHTML:=""
4
5 Web Extended Init cHtml
6
7 cHTML:= l_ex001() // ou h_ex001()
9 Web EXTENDED End
10
11 Return cHTML

Na linha 1 temos a declarao de uma User function , montada para ser


chamada atraves do Browser. Na sua declaracao, ela ganha um prefixo
(U_) Daremos o nome para nossa funo de ex001.

Curso de Introduo a Plataforma ADVPL/ASP WebService 11


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Na linha 3 definimos a varivel cHTML como local e sem contedo inicial
(em branco)

Na linha 5 chamamos o comando Web Extended Init, que inicializa o


procedimento de montagem do ambiente necessario abertura de
tabelas e utilizao das demais funcoes, entre outras funcionalidades
posteriormente explanadas. Esta funo obrigatria.

Na linha 7 atribumos varivel cHTML o retorno da funo l_ex001 (para


ex001.aph) ou h_ex001 (para ex001.ahu), retornando o HTML . O que
diferncia a necessidade de uma ou outra Sintax o ambiente de
compilao: para arquivos compilados localmente nos cliente eles devem
ser obrigatriamente .AHU para os compilados na Microsiga ambos so
aceitos.

Na linha 9 chamamos o comando WEB EXTENDED END, que informa ao


servidor para fechar o ambiente . Esta funo obrigatria. Entre outras
funcionalidades internas, a WEB EXTENDED END coloca no Html
identificadores internos, tratamentos de erro, entre outros, indispensvel
para o funcionamento do mecanismo como um todo. Nao deve haver
mais nenhum processamento apos WEB END

Na linha 11 obtemos o retorno da varivel cHTML, que devolvido para o


Browser.

4. Agora, nos vamos escrever o cdigo do arquivo APH (ou AHU) , portanto,
salve este novo arquivo como ex001.aph (ou ex001.ahu). Neste
momento estaremos solicitando ao servidor a hora atual se a hora atual
for menor que 12 ento enviaremos a seguinte mensagem ao usurio
Bom dia !!! se a hora for maior que 12 ento ser enviado a seguinte
mensagem ao usurio Boa tarde !!!. Note que, sempre que houver a
necessidade de enviar uma informao ao browser processada a partir de
um arquivo .apw, essa informao deve estar contida dentro de um
arquivo APH (ou AHU).

1 <html>
2 <body>

Curso de Introduo a Plataforma ADVPL/ASP WebService 12


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
3
4 <%
5 local n
6
7 n := left(time(),2)
8 if val(n) < 12
9 %>
10 Bom Dia !!!
11 <%
12 Else
13 %>
14 Boa Tarde !!!
15 <%
16 Endif
17 %>
18
19 </body>
20 </html>

Na linha 1 e 2 encontramos as tags <html> e <body> que como vimos faz


parte do inicio e corpo de um documento HTML.

Na linha 4 temos o indicador de script (<%), que tem como objetivo


informar ao browser que daquele ponto em diante h um cdigo ADVPL
ASP a ser executado. Sempre que for iniciar um script ADVPL ASP utiliza-
se o indicador (<%) e para finalizar um script utiliza-se o indicador (%>).

Na linha 5 estamos declarando a varivel n como uma varivel local.

Na linha 7 temos o cdigo n := left(time(),2). Utilizamos a funo time()


para retornar a hora atual no formato hh:mm:ss, utilizamos a funo
left(string,posio) para retornar apenas as horas (hh) do contedo da
funo time(). Este contedo ser armazenado na varivel n

Na linha 8 utilizamos a condio IF para verificar se n menor que 12,


lembrando que estamos trabalhando com time de 24 hs.

Na linha 9 estamos indicando com (%>) o final do primeiro bloco de script.

Na linha 10 colocamos um texto HTML

Curso de Introduo a Plataforma ADVPL/ASP WebService 13


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Na linha 11 iniciamos novamente um bloco de cdigo com o indicador (<
%)

Na linha 12 colocamos o comando Else que faz parte da condio IF. Que
executado se a condio inicial no for verdadeira.

Na linha 13 colocamos novamente o indicado (<%) para iniciar um bloco


de cdigo.

Nas linhas 14 e 15 colocamos a mensagem a ser enviada ao usurio


caso a condio em IF for falsa e fechamos o bloco de cdigo.

Na linha 16 encerramos a condio IF com ENDIF.

Na linhas 17 e posteriores encerramos o bloco de cdigo e tambm


informamos ao browser que o documento HTML acaba por aqui.

ATENO: sempre que for finalizado um programa deve-se compilar


o mesmo. neste processo que o repositrio ser alimentado com
as novas funcionalidades.

Para executar o programa, certifique-se que o mesmo j foi compilado e


em seguida carregue o browser e digite a seguinte URL:
http://servidor:porta/u_ex001.apw , onde:

Servidor: o nome do servidor onde est instalado o AP7 Web


Server

Porta: o nmero da porta que o administrador configurou o AP7


Web Server, est informao encontra-se no arquivo AP7srv.ini.

Por default, a configuracao de porta do servidor Http do Protheus


habilitado na porta 80, default do protocolo HTTP, de modo que nao
precisamos informar a porta no Browser, a no ser que alteremos as
configuraes iniciais para habilitar o servidor em uma porta diferente da
80

Instruo Do case

Curso de Introduo a Plataforma ADVPL/ASP WebService 14


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Outra estrutura que veremos agora a instruo Case que funciona da
mesma maneira que a instruo IF. Possibilitando criar lista de
expresses para cada condio.
A estrutura da instruo Case a seguinte:

Do Case
Case <primeira condio >
<instrucoes>

Case <segunda condio >


<instrues>
Otherwise
<instrues>
EndCase

Loops

Os Loops so utilizados quando h a necessidade de percorrer n vezes o


mesmo conjunto de instrues. Muito utilizado por exemplo para ler um
bloco de registros em uma base de dados.

For <varivel> := <incio> to <fim> [ step <passo> ]


<Instruo>
Next

O parmetro step no obrigatrio, e indica qual o incremento utilizado


para a variavel. (default=1)

While <condio>
<Instruo>
Enddo

Captulo 5 Recuperando Dados enviados por Post e Get

Curso de Introduo a Plataforma ADVPL/ASP WebService 15


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Recuperando Dados com Metdo POST

Formulrio uma pgina HTML contendo controles de entrada como


textbox, listbox, radio buttom, check buttom e botes de execuo.

A finalidade de se utilizar um formulrio manipular de alguma forma os


dados informados pelo usurio. Para isso temos em ADVPL ASP funes
com a RQryStr, que nos retorna o conteudo de cada campo.

H dois mtodos para se retornar o contedo de um formulrio, o mtodo


POST e o GET, o primeiro que tem como caracterstica passar o contedo
dos campos de maneira oculta, no aparece na linha de URL do browser.

HttpPost-><NOME DA VARIVEL>
HttpGet-><NOME DA VARIVEL>
HttpSession-><NOME DA SESSO>

Descrio: retorna o contedo dos campos de um formulrio.

Parmetros: <NOME DA VARIVEL> informe o nome do campo


informado na propriedade name do formulrio.

Exerccio: Vamos exemplificar a recuperao de dados utilizando o


mtodo POST

Vamos criar um formulrio em HTML. Note que informaremos o mtodo


POST e a ao http://nomeDoServidor/w_ex002.apw dentro da tag Form.

<html>
<body bgcolor="#FFFFFF">
<form method="post" action="http://localhost/u_ex002.apw">
<p>Nome: <input type="text" name="field_nome"> <br>
Idade: <input type="text" name="field_idade"> <br>
<input type="submit" name="Submit" value="Enviar">

Curso de Introduo a Plataforma ADVPL/ASP WebService 16


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
</p>
</form>
</body>
</html>

Agora vamos escrever o cdigo em ADVPL ASP para nosso arquivo APW
1 User Function ex002()
2
3 Local cHTML:=""
4 Private cNome, cIdade
5
6 cNome := HttpSession->field_nome
7 cIdade := HttpSession->field_idade
8
9 WEB EXTENDED INIT cHtml
10
11 cHTML:= H_teste001()
12
13 WEB EXTENDED END
14
15 Return cHTML

Na linha 1 estamos chamando a funo User Function, sempre


obrigatria.

Nas linhas 2 e 3 estamos definindo as variveis a serem utilizadas no


cdigo. Note que as variveis cNome e cIdade so do tipo Private que
tambm podem ser lidas no APH.

Na linha 6 estamos atribuindo para a varivel cNome o conteudo do


campo field_nome utilizando a funo HttpPost-><NOME DA VARIVEL>.
O mesmo serve para a linha 7.

As linhas 9,11,13 e 15 j foram explicadas nos exerccios anteriores.


Agora vamos escrever o cdigo do arquivo APH

1 <html>
2 <body bgcolor="#FFFFFF">
nome: <%=cNome %> <P>
4 idade: <%=cIdade %>
5 </body>
6 </html>

Nas linhas 1 e 2 estamos informando ao browser que o documento HTML


est iniciando

Curso de Introduo a Plataforma ADVPL/ASP WebService 17


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Na linha 3 temos o texto nome: em HTML e em seguida indicamos com <
% o incio de um bloco de cdigo ADVPL ASP, onde estamos retornando
ao browser o conteudo da varivel cNome, que neste momento est
armazenada a string que voc digitou no campo nome do formulrio.

O processamento deste exerccio simples, entenda que no primeiro


momento apresentamos uma documento HTML com um formulrio com
os campos Nome e Idade para o usurio preencher, aps o usurio
informar os dados e clicar no boto Enviar, enviado uma solicitao ao
servidor para ele executar a User Function ex002 que informamos na
propriedade action do formulrio. Quando est solicitao chega ao
servidor o mesmo j possui o conteudo dos campos do formulrio e como
nos codificamos, atribumos o conteudo das variveis com o conteudo
dos campos e finalmente apresentamos o conteudo delas ao usurio
utilizando o arquivo APH (ou AHU).

Recuperando Dados com Metdo GET

O mtodo GET passa o contedo dos campos do formulrio atravs da


URL. O contedo dos campos sero retornados no parmetro HttpGet-
><NOME DA VARIVEL>.

A diferena bsica entre o mtodo Get e o Post que o primeiro mostra


na linha de URL do browser o contedo dos campos informados no
formulrio, podendo ser visualizado pelo usurio.

Exerccio 003: Vamos exemplificar a recuperao de dados utilizando o


mtodo Get
Vamos criar um formulrio em HTML. Note que informaremos o mtodo
GET e a ao http://nomedoServidor/u_ex003.apw dentro da tag Form.

<html>
<head>
<title>Metodo GET</title>
</head>

<body bgcolor="#FFFFFF">
<form method="get" action="http://nistal:1200/u_ex003.apw">

Curso de Introduo a Plataforma ADVPL/ASP WebService 18


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
<table width="22%" align="center">
<tr bgcolor="#006699">
<td colspan="2">
<div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-
serif"><b><font color="#FFFFFF">MET&Oacute;DO
GET</font></b></font></div>
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Nome:</font></td>
<td width="83%">
<input type="text" name="field_nome">
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Sobrenome:</font></td>
<td width="83%">
<input type="text" name="field_snome">
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Curso:</font></td>
<td width="83%">
<input type="text" name="field_curso">
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%">
<div align="center">
<input type="submit" name="Submit" value="Enviar">
</div>
</td>
<td width="83%">&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Agora vamos escrever o cdigo do arquivo apw.

1 User Function ex003()


2

Curso de Introduo a Plataforma ADVPL/ASP WebService 19


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
3 Local cHTML:=""
4 Private cNome, cSNome, cCurso
5
6 Web Extended Init cHtml
7 cNome := HttpGet->field_nome
8 cSNome := HttpGet->field_snome
9 cCurso := HttpGet->field_curso
10
11 cHTML:=H_ex003()
12
13 Web Extended End
14
15 Return cHTML

Na linha 1 estamos declarando a funo User Function, sempre


obrigatria.
Na linha 6 estamos chamando o comando Web Extended Init cHtml para
iniciar um ambiente de trabalho web.

Na linha 7 temos o seguinte cdigo cNome := HttpGet->field_nome


que est chamando a funo HttpGet-> enviando os dois parmetros e
atribuindo o retorno dela a varivel cNome.

Na linha 8 temos o seguinte cdigo cSNome := HttpGet->field_snome


que est chamando a funo HttpGet-> enviando os dois parmetros e
atribuindo o retorno dela a varivel cSNome.

Na linha 7 temos o seguinte cdigo cCurso := HttpGet->field_curso


que est chamando a funo HttpGet-> enviando os dois parmetros e
atribuindo o retorno dela a varivel cCurso.

Agora vamos escrever o cdigo do arquivo APH

<html>
<body bgcolor="#FFFFFF">
<table width="75%">
<tr>
<td colspan="2">

Curso de Introduo a Plataforma ADVPL/ASP WebService 20


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
<div align="left"><b>Dados informados no
formul&aacute;rio</b></div>
</td>
</tr>
<tr>
<td width="12%" height="14">Nome:</td>
<td width="88%" height="14"><%= cNome %></td>
</tr>
<tr>
<td width="12%">Sobrenome:</td>
<td width="88%"><%= cSNome %></td>
</tr>
<tr>
<td width="12%">Curso:</td>
<td width="88%"><%= cCurso %></td>
</tr>
</table>
</body>
</html>

Captulo 6 Acessando Base de Dados

Introduo

Curso de Introduo a Plataforma ADVPL/ASP WebService 21


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
H duas maneiras de acessar e manipular uma base de dados, uma
utilizando o CodeBase (.DBF) outra maneira atravs do TOPCONNECT
que possibilita o acesso a vrios banco de dados (SQL, INFORMIX, etc).

Exerccio 004: Vamos exemplificar uma consulta a uma base de dados. A


seguir temos o arquivo .apw, que tem como objetivo criar o ambiente no
AP7 Web Server, conforme a funo vista.

1 User Function ex004()


2
3 Local cHTML:=""
4
5 Web Extended Init cHtml
6
8 cHTML:= h_ex004
9
10 Web Extended End
11
12 Return cHTML

Arquivo ex004.aph

<html>
<body bgcolor="#FFFFFF">
<table width="75%" border="0" cellpadding="0" cellspacing="1" bgcolor="#EEEEEE">
<tr bgcolor="#003366">
<td colspan="3">
<div align="center"><font color="#FFFFFF"><b><font face="Verdana, Arial,
Helvetica, sans-serif" size="2">CONSULTA
BASE DE DADOS</font></b></font></div>
</td>
</tr>
<tr bgcolor="#003399">
<td>
<div align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"
color="#FFFFFF">C&oacute;digo</font></b></div>
</td>
<td>
<div align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"
color="#FFFFFF">Descri&ccedil;&atilde;o</font></b></div>
</td>
<td>
<div align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"
color="#FFFFFF">Quantidade em Estoque

Curso de Introduo a Plataforma ADVPL/ASP WebService 22


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Unit&aacute;rio</font></b></div>
</td>
</tr>
<%
dbselectarea('FA2')
dbgotop()
while !Eof()
%>
<tr bgcolor="#FFFFFF">
<td><%=FA2_COD %></td>
<td><%=FA2_DESCR %></td>
<td><%=FA2_QTDEST %></td>
</tr>
<%
dbskip()
enddo
%>

</table>

</body>
</html>

Observe o bloco de cdigo em negrito, o comando dbselectarea('FA2')


seleciona a tabela FA2 que contm os dados que necessitamos para a
consulta. O comando dbgotop() posiciona-se no primeiro registro da
tabela FA2. A seguir utilizamos o loop while !Eof() que determina a
execuo do cdigo adiante at que a condio !Eof() (End of File) for
verdadeira. As instrues dentro do loop so para retornar o contedo dos
campos FA2_COD, FA2_DESCR e FA2_QTDEST dentro das Tags <td>. E
finalmente executamos o comando dbskip() que posiciona-se no prximo
registro.

Inserindo dados em uma tabela

Exerccio 5 Vamos fazer um exerccio que tenha como objetivo inserir um


registro na tabela FA2 e em seguida apresentaremos todos os registros desta
tabela no browser.

Curso de Introduo a Plataforma ADVPL/ASP WebService 23


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
1. Primeiramente, vamos criar o arquivo .aph (ou .ahu), que tem como
objetivo formar um formulrio para que o usurio insira os dados (cdigo
do produto, descrio do produto e quantidade em estoque).

<html>
<head>
<title>Inserindo Registros</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF">
<form method="POST" action="http://localhost/w_ex005.apw">
<table width="22%" align="center">
<tr bgcolor="#006699">
<td colspan="2">
<div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-
serif"><b><font color="#FFFFFF">Inserindo
Registros</font></b></font></div>
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Cod:</font></td>
<td width="83%">
<input type="text" name="field_cod">
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Descricao:</font></td>
<td width="83%">
<input type="text" name="field_descr">
</td>
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Qtde. Estoque:</font></td>
<td width="83%">
<input type="text" name="field_qtdest">
</td>

Curso de Introduo a Plataforma ADVPL/ASP WebService 24


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
</tr>
<tr bgcolor="#EEEEEE">
<td width="17%">
<div align="center">

<input type="submit" name="Submit" value="Inserir">


</div>
</td>
<td width="83%">&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Note que neste cdigo utilizamos o mtodo POST no formulrio, visto


anteriormente nesta apostila.

Agora vamos escrever o cdigo do arquivo .apw, nele que iremos escrever
os comandos para recuperar os dados enviados pelo formulrio e em
seguida grava-los na base de dados.

1 User Function ex005()


2
3 Local cHTML:=""
4 Local cCod, cDescr, nQtdEst
5
6 Web Extended Init cHtml
7
9
10 // Recupera os dados do formulrio.
11 cCod := HttpPost->field_cod
12 nQtdEst := HttpPost->field_qtdest
13 cDescr := HttpPost->field_descr
14
15 // Grava os dados.
16 If RecLock('FA2',.t.)
17 FA2->FA2_COD := cCOD
18 FA2->FA2_DESCR := cDescr
19 FA2->FA2_QTDEST := val(nQtdEst)
20 MSUnlock()
22 cHTML:=H_ex004

Curso de Introduo a Plataforma ADVPL/ASP WebService 25


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Else
CHtml := WebAlert(Erro ao incluir registro.)

Endif

23
24 Web Extended End
25
27 Return cHTML

Nas linhas 3 e 4 estamos declarando as variveis como locais que sero


utilizadas no decorrer do programa;

Na linha 6 estamos comunicando ao AP7 Web Server que ser


inicializada uma conexo web;

Na linha 10 temos um comentrio. Tudo que estiver aps os caracteres


// e na mesma linha no sero considerados no momento da
compilao;

Nas linhas 11,12 e 13 estamos recuperando os dados enviados para o


Server atravs do formulrio. Os dados cdigo do produto, descrio do
produto e quantidade em estoque sero armazenados nas variveis
cCod, cDescr e nQtdEst respectivamente. Note que a varivel nQtdEst
inicia a sua nomenclatura com o caracter n porque a mesma uma
varivel do tipo nmerica.

Na linha 15 temos outro comentrio.


Na linha 16 estamos inicializando o processo para gravar um registro na
tabela. O comando RecLock('FA2',.t.) tem como objetivo travar o registro
a ser gravado para que nenhum outro usurio que esteja executando o
mesmo programa grave no mesmo nmero de registro. Este comando
retornar .t. (true) se a condio for verdadeira, ou seja se ningum
estiver tentando gravar no mesmo nmero de registro;

Na linha 17 estamos gravando o conteudo da varivel cCod no campo


FA2_Cod da tabela FA2. Note que para gravar um registro utilizamos o
comando REPLACE;

Na linha 18 estamos gravando o conteudo da varivel cDescr no campo


FA2_DESCR da tabela FA2. Note que para gravar um registro utilizamos
o comando REPLACE;

Curso de Introduo a Plataforma ADVPL/ASP WebService 26


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Na linha 19 temos um diferencial entre as duas linha anteriores, pois
antes de mandar gravar o dado na base de dados, estamos convertendo
a varivel nQtdEst em um valor nmerico.

Na linha 20 estamos liberando o registro para ser manipulado com o


comando MSUnLock().

Na linha 22 note que estamos solicitando a execuo do arquivo ex004,


ou seja, este arquivo foi escrito no exerccio anterior e tem como objetivo
listar os registros da base de dados FA2, concluindo, estamos reutilizando
o cdigo do exerccio anterior para finalizar o nosso programa.

Captulo 7 Web Services em ADVPL - CLIENT

Introduo

Quando um Web Service criado e disponibilizado , junto dele tambm


disponibilizada a definio do servio , seus argumentos , estruturas e retornos

Curso de Introduo a Plataforma ADVPL/ASP WebService 27


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
(WSDL) . Para nos utilizarmos de um Web Service , precisamos montar um
programa - Client que seja capaz de montar um envelope SOAP com os dados
necessrios o processamento do Servio , realizar a chamada , e tratar o
respectivo retorno e excesses .

Embora existam Web Services que podem ser acessados via Http direto
, apenas passando parmetros via URL , o Client de Web Services do Advanced
Protheus tm seu foco e recursos direcionados apenas servios que possuam
interface de comunicao que realize POST de pacotes de dados XML em
formato SOAP.

Termos Tcnicos

SOAP - Sigla de Simple Objetc Access Protocol, ou protocolo simples de


acesso a objetos. O SOAP um padro aberto, baseado em XML, criado pela
Microsoft, Ariba e IBM para padronizar a transferncia de dados entre
aplicaes.
Pode ser usado em combinao com vrios outros protocolos comuns da
Internet,
como HTTP e SMTP.
WSDL - Web Service Description Language. Submetida W3C - o rgo
padronizador da Internet - . A linguagem WSDL define regras baseadas em XML
para descrever servios web.
WEB SERVICES - programa completo ou componente de software residente
num servidor web.
XML - Sigla de Extensible Markup Language, o XML uma linguagem baseada
em tags semelhante ao HTML. Sua principal caracterstica a extensibilidade.
Quem
emite um documento XML pode criar tags personalizadas, que so explicadas
num
documento anexo, que tem extenso XSD.
XSD - Sigla de XML Schema Definition. Arquivo associado a um documento
XML que descreve e valida aos dados no documento. Assim como as linguagens
de programao, os XSDs aceitam dados de diferentes tipos, como nmeros,
data e moeda.

Definio do Servio em Advpl - Client

Para a criao do cdigo-fonte de um Client de um Web Service , foi


criada uma ferramenta de gerao automtica do fonte a partir da definio do

Curso de Introduo a Plataforma ADVPL/ASP WebService 28


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Servio (WSDL) , integrada ao IDE , e foram criadas classes especiais
reservadas em Advpl para a montagem de tal fonte .

Ao gerarmos um fonte client para um WEB Service, este conter as


definies dos mtodos / aes do servio , a(s) estrutura(s) utilizada(s) no
mesmo , e a(s) classe(s) intermediria(s) de uso interno para montagem e
desmontagem da(s) estrutura(s) ; visando o encapsulamento de todos os
tratamentos de envio e recebimento de dados atravs de pacotes SOAP.

O Fonte gerado atravs do assistente de criao de fonte deve


preferencialmente ser gerado e compilado em um arquivo exclusivo , destinado
unica e exclusivamente a este cdigo. E , por tratar-se de uma classe Advpl
gerada a partir da definio de um servio , no devemos inserir e/ou alterar
nenhuma das definies geradas pelo assistente , pois as mesmas sero
perdidas caso o fonte seja gerado novamente .

Passos para a utilizao do Fonte - Client

Partindo de uma classe de Web Services Client , gerado com o Assistente


de Services Client do IDE , devemos seguir alguns passos para a utilizao
desta classe em nosso sistema. So eles :

1 Criar uma varivel ( preferncialmente local ) para armazenar o objeto do


Web Service
2 Inicializar o objeto do WebSErvice ( WsServico():New() )
3 Verificar os parmetros e seus respectivos tipos a serem utilizados no
mtodo , declarados no servio.
4 Atribuir no(s) parametro(s) necessrios chamada do mtodo ps valores
desejados ou chame diretamente o mtodo , passando os parametros
necessrios na chamada do mesmo.
5 Verficar o retorno do mtodo . Caso este tenha retornado .T. , o
processamento foi executado com sucesso e a(s) propriedade(s) de
retorno do mtodo est(o) alimentada(s)
6 Caso retorne .F. , ocorreu uma falha na requisio e/oui processamento
do Servio . Para recuperar os detalhes da falha , utilizamos a funcao
GetWSCError()

Criao de um Web Service CLIENT Passo a Passo

Curso de Introduo a Plataforma ADVPL/ASP WebService 29


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Objetivo : Criar um WebService Client em Advpl , que utilize o servio
exemplificado no tpico Criao de um WebService SERVER passo a passo.

Passo 1 : Determinar como obter o WSDL do servio desejado

A maioria das definies WSDL dos servios disponiveis na WEB so


acessados atravs de uma URL , em geral apontando para o servidor onde o
servio est publicado , contendo o nome do servio na url e um sufixo ?WSDL
ou .WSDL na Url. No h padro definido para tal , de modo que cada servidor
pode disponibilizar ( ou no ) o WSDL de uma maneira diferente . O WSDL de
alguns servios restritos ( como por execmplo o servio de busca na base de
dados do Google ) so disponibilizados em arquivo ASCII , enviados por e-mail ,
apos um cadastro no site e autorizao da empresa para o uso do servio por
ele provido. No nosso exemplo , a definio do servio obtida diretamente via
http , atravs do link http://localhost/SERVERTIME.apw?WSDL

Caso vc execute este link atravs de um Web Browser ( Internet .Explorer.


, por exemplo ) , ser exibido no browse um arquivo em XML correspondendo
definio do servio , conforme exemplo abaixo :

<?xml version="1.0" encoding="utf-8" ?>


<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://localhost/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://localhost/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<s:schema elementFormDefault="qualified" targetNamespace="http://localhost/">
<s:element name="GETSERVERTIME">
<s:complexType>
<s:sequence />
</s:complexType>
</s:element>
<s:element name="GETSERVERTIMERESPONSE">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GETSERVERTIMERESULT" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</types>
<message name="GETSERVERTIMESOAPIN">
<part name="parameters" element="s0:GETSERVERTIME" />
</message>

Curso de Introduo a Plataforma ADVPL/ASP WebService 30


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
<message name="GETSERVERTIMESOAPOUT">
<part name="parameters" element="s0:GETSERVERTIMERESPONSE" />
</message>
<portType name="SERVERTIMESOAP">
<operation name="GETSERVERTIME">
<input message="s0:GETSERVERTIMESOAPIN" />
<output message="s0:GETSERVERTIMESOAPOUT" />
</operation>
</portType>
<binding name="SERVERTIMESOAP" type="s0:SERVERTIMESOAP">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<operation name="GETSERVERTIME">
<soap:operation soapAction="http://localhost/GETSERVERTIME" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<service name="SERVERTIME">
<port name="SERVERTIMESOAP" binding="s0:SERVERTIMESOAP">
<soap:address location="http://localhost/SERVERTIME.apw" />
</port>
</service>
</definitions>

Passo 2 : Gerar o Fonte AdvPl do Client usando o Assistente do IDE

Ao gerarmos um fonte client para um WEB Service, este fonte conter as


definies dos metodos do servio , a(s) estrutura(s) utilizada(s) no mesmo , e
a(s) classe(s) intermediria(s) de uso interno para montagem e desmontagem
da(s) estrutura(s) ; visando o encapsulamento de todos os tratamentos de envio
e recebimento de dados atravs de pacotes SOAP.

O Fonte gerado atravs do assistente de criao de fonte deve


preferencialmente ser gerado e compilado em um arquivo exclusivo , destinado
unica e exclusivamente a este cdigo. E , por tratar-se de uma classe Advpl
gerada a partir da definio de um servio , no devemos inserir e/ou alterar
nenhuma das definies geradas pelo assistente , pois as mesmas sero
perdidas caso o fonte seja gerado novamente .

Para gerao do fonte Client em Advpl para utilizar este servio ,


devemos criar um novo arquivo .PRX no IDE , especificamente para conter as
classes deste servio . Ento , acessamos o menu Ferramentas, opo Gerar

Curso de Introduo a Plataforma ADVPL/ASP WebService 31


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Ciente Wbservices . Neste momento , ser mostrado na tela um pop-up
semelhante ao mnostrado abaixo :

No campo de entrada de dados , devemos digitar a URL de onde o


servidor ir obter a definio do WebSErvice. ( no nosso caso ,
http://localhost/SERVERTIME.apw?WSDL ) . Aps a confirmao da janela
acima , caso o processamento ocorra com suicesso , na janela de mensagens
do Ide ser mostrado um texto semelhante ao abaixo :

Estabelecendo conexo com o server...


Por favor aguarde. Obtendo descrio do WebService...
Finalizando conexo com o server...
Ok

E , na janela do novo arquivo criado , dever ser criado um cdigo-fonte


semelhante ao mostrado abaixo :

#INCLUDE "PROTHEUS.CH"
#INCLUDE "APWEBSRV.CH"

--- header do servio ---


/*
=========================================================
=======
WSDL Location http://localhost/SERVERTIME.apw?WSDL
Gerado em 12/30/02 17:21:29
Observaes Cdigo-Fonte gerado por ADVPL WSDL Client 1.021217 B
Alteraes neste arquivo podem causar funcionamento incorreto
e sero perdidas caso o cdigo-fonte seja gerado novamente.
=========================================================
======= */

/* -------------------------------------------------------------------------------
WSDL Service WSSERVERTIME
------------------------------------------------------------------------------- */

--- declarao da Classe Client do WebService , com metodos e propriedades


utilizadas ---
WSCLIENT WSSERVERTIME

Curso de Introduo a Plataforma ADVPL/ASP WebService 32


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
WSMETHOD NEW
WSMETHOD GETSERVERTIME

WSDATA _URL AS String


WSDATA cGETSERVERTIMERESULT AS string

ENDWSCLIENT

--- declarao do mtodo NEW , para a criao do Objeto / Servio ---


WSMETHOD NEW WSCLIENT WSSERVERTIME
::_URL := NIL
::cGETSERVERTIMERESULT := ""
Return Self

/* -------------------------------------------------------------------------------
WSDL Method GETSERVERTIME of Service WSSERVERTIME
------------------------------------------------------------------------------- */

--- Definio do mtodo , que recebe os parmetros de chamada , executa o servio


e alimenta as propriedades de retorno do metodo , contendo os encapsulamentos
necessrios para tratamento de excesses ---

WSMETHOD GETSERVERTIME WSSEND NULLPARAM WSRECEIVE cGETSERVERTIMERESULT


WSCLIENT WSSERVERTIME
Local cSoap := "" , oXmlRet

BEGIN WSMETHOD

DEFAULT ::_URL := "http://localhost/SERVERTIME.apw"

cSoap += '<GETSERVERTIME xmlns="http://localhost/">'


cSoap += "</GETSERVERTIME>"

oXmlRet := SvcSoapCall( Self,cSoap,;


"http://localhost/GETSERVERTIME",;
"DOCUMENT","http://localhost/",)

::cGETSERVERTIMERESULT := xGetInfo( oXmlRet ,


"_GETSERVERTIMERESPONSE:_GETSERVERTIMERESULT:TEXT" , "" )

END WSMETHOD

oXmlRet := NIL
Return .T.

O fonte acima constitui uma Classe em Advpl , gerada para realizar a


interface com a classe original publicada no Server, j realizando os tratamentos
adequados para realizar a comunicao via http com o servidor onde o servio
est publicado. Vale obvervar que as linhas em negrito no fonte acima no foram
inseridas pelo assistente do IDE , mas acrescentadas a este documento para
fins didticos.

Curso de Introduo a Plataforma ADVPL/ASP WebService 33


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Nele , observamos um cahealho , contendo informaes sobre a
localizao do WSDL utilizado para a gerao do fonte , data e hora de gerao
e verso do engine de WebServices utilizado . Logo abaixo , a declarao de
uma cliasse Client de WebServices ( WSCLIENT WSSERVERTIME ) , com o
mtodo new() para inicializao das propriedades advpl da classe . E , em
seguida , a declarao do mtodo de busca de Horrio ( WSMETHOD
GETSERVERTIME ) , que no envia parmetro algum , e retorna o horrio atual
do server em :: cGETSERVERTIMERESULT , com todos os tratamentos
necessrios embutidos.

Passo 3 : Criar um fonte que utilize esta classe para a obteno do horrio.

Agora , criamos um novo arquivo no IDE , e montamos uma funo para


utilizar a classe de Web Services Client para obter o horrio no servidor.

1 #INCLUDE "PROTHEUS.CH"
2
3 User Function TestClient()
4 Local oSvc := NIL
5
6 oSvc := WSSERVERTIME():New()
7
8 If oSvc:GETSERVERTIME()
9 alert("Horrio no Servidor : "+ oSvc:cGETSERVERTIMERESULT)
10 Else
11 alert("Erro de Execuo : "+GetWSCError())
12 Endif
13
14 Return

Linha 1 Declaramos a utilizao do Include Protheus.ch , contendo as


definies dos comandos ADVPL e demais constantes
Linha 3 Criamos uma User Function para utilizar o Web Service
Linha 4 Declaramos uma varivel local para conter o Objeto do Web Service
Client
Linha 6 Para utilizarmos o servio , alimentamos a varivel oSvc com uma onva
instncia do Web Services Client , obtida atravs da sintaxe
<NOME_DO_SERVICO>():New()
Linha 8 Chamamos a execuo do Mtodo GetServerTime a partir do Objeto do
servio oSrv , sem passar qualquer parametro. O retorno de um mtodo

Curso de Introduo a Plataforma ADVPL/ASP WebService 34


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
do client pode ser .T. (true) em caso de execuo com sucesso ou .F.
(false) em caso de falha de execuo .
Linha 9 Caso o servio tenha sido executado com sucesso , o retorno esperado
alimenrado na propriedade cGetServerTimeResult do objeto do servio.
Linha 11 Caso contrrio ( retorno .F. ) , ocorreu alguma falha na chamada do
servio, como por exemplo o servidor no estava no ar, demorou muito
pra responder ( time-out ) , entre outras. Para recuperarmos maiores
detalhes sobre a ocorrncia de erro , utilizamos a funo
GetWSCerror() , que retorna uma string com o resumo da ocorrncia .
Linha 13 Finalizamos o programa de teste com um Return

Passo 4 : Executar o programa de testes

Abra uma nova instncia do Ap Remote , e execute a funo


U_TESTCLIENT . Caso o Web Service esteja no ar e funcionando, e o fonte
client seja devidamente compilado e sem erros , o resultado esperado uma
janela semelhante mostrada abaixo :

No ambiente que montamos para teste , o Servidor de WebServices e o


Client esto no Protheus , compilados no mesmo Repositrio de Objetos .
Ento , vamos desabilitar o Server HTTP do Protheus (colocando enable=0 na
chave [http] do arquivo de consigurao do servidor) , re-iniciar o Server
Protheus , e executar o programa client novamente . Devemos obter uma tela
semelhante exemplificada abaixo :

Curso de Introduo a Plataforma ADVPL/ASP WebService 35


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Passo 5 : Obter informaes de debug

Visto at o passo 4 , vemos um client funcionando perfeitamente . Agora ,


imaginemos que , durante o desenvolvimento e testes do client do servio ,
faam-se necessrias determinadas informaes internas as rotinas de
execuo do servio no Client Advpl . Para tal , foi criada uma funo que
permite definir em tempo de execuo , um nivel de detalhamento de
informaes adicionais relacionadas ao Web Service ; informaes estas que
sero mostradas no Console do Server Protheus ( caso habilitado ) . a Funo
para definir o nivel de detalhe chama-se WSDLDbgLevel() , e recebe um nmero
como parmetro :

0 ( default ) Sem informaes adicionais.


1 Apenas String SOAP de retorno do Server.
2 Strings Soap de Envio e Retorno.

Ento , na linha 7 , vamos acrescentar a instruo WSDLDbgLevel(2) ,


para ativar o nivel mais completo de informacoes adicionais , e vamos obervar
no console do servidor as mensagens apresentadas durante a execuo do
fonte de testes do client . Devemos obter um echo no console do server
semelhante ao exemplo abaixo :

Iniciando Thread (siga0984, AUTOMAN)...


-------------------------------------------------------------------------------
SvcSoapCall to http://automan:8000/webservice/SERVERTIME.apw /
DOCUMENT
NameSpace http://automan:8000/webservice/
SoapAction http://automan:8000/webservice/GETSERVERTIME
Called from GETSERVERTIME ( 137)

Curso de Introduo a Plataforma ADVPL/ASP WebService 36


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Called from U_TESTCLIENT ( 10)
---------------------------------- SOAPSEND -----------------------------------
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/en
velope/"> <soap:Body>
<GETSERVERTIME xmlns="http://automan:8000/webservice/">
</GETSERVERTIME> </soap:Body>
</soap:Envelope>
-------------------------------------------------------------------------------
--------------------------------- POST RETURN ---------------------------------
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:xsi="http://www.w3.or
g/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:so
ap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GET
SERVERTIMERESPONSE

xmlns="http://automan:8000/webservice/"><GETSERVERTIMERESULT>
10:37:10</GETSERVE
RTIMERESULT></GETSERVERTIMERESPONSE></soap:Body></soap:En
velope>
-------------------------------------------------------------------------------
Fim Thread (siga0984, AUTOMAN) BytesIn 73 BytesOut 75

O texto marcado em azul claro so as mensagens informativas a respeito


da chamada do WebService , informando a URL chamada , o estilo soap de
troca de dados ( document ) , o NameSpace e o SoapAction utilizados. O Texto
marcado em verde (SOAPSEND) informa o conteudo do pacote Soap que foi
enviado ( postado ) ao Servidor , e o conteudo em amarelo ( POST RETURN )
informa o contedo do pacote Soap devolvido pelo Server referente esta
solicitao.

Quando ocorre um erro qualquer , relacionado a execuo do Client Web


Services , o mtodo chamado retorna .F. , e o erro pode ser recuperado atravs
da funo GetWSCerror() , vista anteriormente . Para cada excesso prevista no
Client , existe um cdigo de erro correspondente, todos eles prefixados com
WSCERR . A maioria das ocorrncias est relacionada a gerao do Cdigo
fonte do Client Advpl utilizado-se o IDE. Todas as ocorrenctas de excesso

Curso de Introduo a Plataforma ADVPL/ASP WebService 37


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
tratadas peo Web Services Client Advpl esto relacionadas no Tpico Web
Services Client Cdigos de Erro .

Web Services Client Codigos de Erro

WSCERR000 / WSDL no suportado : Existem <N> Servios declarados.

Por definio , um WSDL deve conter um e apenas um servio


declarado , com um ou mais mtodos . Caso sejam identificados mais de um
servio no mesmo WSDL , no momento da gerao do fonte , o processo
abortado com esta mensagem , informando em <N> o numero de servios
identificados no WSDL.

WSCERR001 / No h Bindings SOAP para a gerao do Servio.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , uma vez identificado o servio , o gerador de
cdigo procura a declarao dos BINDINGS no WSDL. Caso esta declarao
no esteja presente , a rotina considera o WSDL incompleto , e aborta o
processo de gerao de cdigo com esta mensagem .

WSCERR002 / <STRUCT_NAME> / <STRUCT_TYPE> (B) Estrutura no


encontrada.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , so analisados todos os parmetros e estruturas
utilizadas pelos mtodos do servio . Caso alguma estrutura seja declarada no
servio, porm no seja encontrada a identificao da mesma no WSDL , este
considerado invlido , sendo o processo abortado com a mensagem acima ,
onde a estrutura no encontrada identificada em <STRUCT_NAME> e
<STRUCT_TYPE>

WSCERR003 / Enumeration no suportado : <STRUCT_NAME> /


<STRUCT_TYPE>

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , so analisados todos os parmetros e estruturas
utilizadas pelos mtodos do servio . Quando encontrada uma estrutura

Curso de Introduo a Plataforma ADVPL/ASP WebService 38


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
"simpletype" com um "enumeration" ( lista de parametros vlidos pr-
determinada ) , os tipos suportados at a verso 'ADVPL WSDL Client 1.021119
B' so : STRING, FLOAT, DOUBLE, DECIMAL, INT, INTEGER,
UNSIGNEDLONG, UNSIGNEDINT, LONG . Caso o WSDL contenha um
"enumeration" com uma lista de itens de algum tipo que no os declarados
acima ( tipo no supirtado ) , o processamento abortado com a mensagem
acima , onde o "enumeration" no suportado identificado em
<STRUCT_NAME> e <STRUCT_TYPE>

WSCERR004 / Apontamento de pendncia 001B em Implementao para


(<N>) <STRUCT_NAME>

Apos a anlise inicial dos parametros e estruturas utilizadas no servio ,


as estruturas pendentes so analizadas recursivamente at que todas as
estruturas utilizadas sejam processadas. Quando deste processamento , uma
estrutura contenha um elemento que aponte para uma outra estrutura , e esta for
encontrada registrada no como uma estrutura ( complextype ) ; o WSDL
considerado invlido , e o processo de gerao abortado com a mensagem
acima, identificando a estrutura pendente em <STRUCT_NAME>

WSCERR005 / Apontamento de pendncia 001A em Implementao para


(<N>) <STRUCT_NAME>

Similar ao WSCERR004 , esta ocorrncia reproduzida quando uma


estrutura contenha um elemento que aponte para uma outra estrutura , e esta
segunda estrutura no for encontrada no WSDL ; consequentemente o processo
de gerao abortado com a mensagem acima, identificando a estrutura
pendente em <STRUCT_NAME>

WSCERR006 / 01 Empty ParamName : aMsg <N>

Quando da anlise de parmetros ( Messages ) a partir de um WSDL ,


Caso um Message no tenha nome definido , O WSDL considerado invlido , e
o processo de gerao abortado com a mensagem acima, identificando em
<N> o elemento Interno do array de Messages do gerador de cdigo Advpl .

WSCERR007 / 01 Empty ParamType for <PARAM_NAME> : aMsg <N>

Quando da anlise de parmetros ( Messages ) a partir de um WSDL ,


Caso um Message no tenha um tipo definido , O WSDL considerado invlido ,
e o processo de gerao abortado com a mensagem acima, identificando em

Curso de Introduo a Plataforma ADVPL/ASP WebService 39


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
<PARAM_NAME> o nome do Message incompleto , e em <N> o elemento
Interno do array de Messages do gerador de cdigo Advpl .

WSCERR008 / Retorno NULLPARAM invlido

Quando da montagem do cdigo fonte Advpl , a partir de um WSDL , caso


um parmetro de retorno seja identificado como NULO ( NULLPARAM ) , O
WSDL considerado invlido , e o processo de gerao abortado com a
mensagem acima.

WSCERR009 / 01 Param IO (<X>) unknow

Esta mensagem uma ocorrncia interna de erro do gerador , no


reproduzida at o momento. Ela poder ser reproduzida quando da anlise do
array interno de parmetros , e este no contenha uma definio de IO De
estrutura vlido . Caso este erro se reproduza , entre em contato com <XXX>

WSCERR010 / Type <STRUCT_TYPE> no contm Definio ASTRUCTIN

Quando da anlise de estruturas pendentes a partir de um WSDL , caso


uma estrutura complexa no contenha a especificao de seus elementos
internos, e a mesma no contenha nenhuma referncia ao SCHEMA ou a outra
estrutura , o WSDL considerado invlido , e o processo de gerao abortado
com a mensagem acima, identificando em <STRUCT_TYPE> o nome da
estrutura incmpleta.

WSCERR011 / Retorno NULLPARAM invlido -> Idntico


ao WSCERR008

WSCERR012 / 01 Param IO (<X>) unknow -> Identico ao


WSCERR009

WSCERR013 / ReturnData no implementado : <SOAP_TYPE>

Quando da gerao das expresses de converso de valores de SOAP


para Advpl , caso um parametro SOAP no seja suportado para converso , o
processo de gerao abortado com a mensagem acima, identificando em
<SOAP_TYPE> o tipo do dado no suportado para converso .

WSCERR014 / InitType NULLPARAM no implementado.

Curso de Introduo a Plataforma ADVPL/ASP WebService 40


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Esta mensagem uma ocorrncia interna de erro do gerador , no
reproduzida at o momento.

WSCERR015 / Node '+cObjName+' as '+cObjType+' on SOAP Response not


found.

*** Ocorrncia de erro de execuo do Client , reproduzida quando do


processamento de um pacote SOAP retornado por um Web SErvice cuja
definio de trocas de dados SOAP utilize o Style = RPC , e um node de retorno
de um Array de Estruturas obrigatrio definido no WSDL no foi encontrado no
pacote retornado. ***

WSCERR016 / Requisio HTTPS no suportada.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , podemos especificar um arquivo na unidade de
disco do servidor , ou uma definico WSDL piblicada em um servidor WEB HTTP
. O Protocolo HTTPS ainda no suportado para operaes com WEB Services.

WSCERR017 / Requisio HTTP retornou NIL.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , quando especificamos uma definico WSDL
piblicada em um servidor WEB HTTP , caso o servidor no seja encontrado , o
processo abortado com a mensagem acima. Verifique se a a URL digitada est
em formato vlido , se existe entrada no DNS da sua conexo de rede para
resolver o IP do servidor especificado , e se o mesmo est em operao normal.

WSCERR018 / Requisio HTTP retornou EMPTY.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , quando especificamos uma definico WSDL
piblicada em um servidor WEB HTTP , caso o servidor seja encojntado , porm
no haja nenhum tipo de retorno por parte do mesmo , o processo abortado
com a mensagem acima. Verifique se a URL est digitada corretamente e se o
servidor est em operao normal.

WSCERR019 / Arquivo no encontrado.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , quando especificamos uma definico WSDL salva
em um arquivo na unidade de disco do SErvidor , caso o arquivo especificado

Curso de Introduo a Plataforma ADVPL/ASP WebService 41


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
no seja encontrado , o processo abortado com a mensagem acima. Verifique
se o arquivo especificado est digitado em formato vlido , e se o mesmo
realmente existe.

WSCERR020 / Falha de Abertura do Arquivo / FERROR <FERROR_NUM>

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , quando especificamos uma definico WSDL salva
em um arquivo na unidade de disco do SErvidor , caso no seja possvel a
abertura do arquivo para a leituda da definico , o processo abortado com a
mensagem acima , identificando o cdigo ADVPL de Falha de Abertura em
<FERROR_NUM> . Verifique se o arquivo especificado no est sendo utilizado
por outro programa , e se o usurio que subiu o Server Protheus tm direitos de
acesso de rede pasta\arquivo especificada.

WSCERR021 / <EXTRA_INFO> WSDL Parsing <PARSER_ERROR>

Esta ocorrncia reproduzida no momento da gerao de um codigo-


fonte a partir de um WSDL , caso este apresente alguma inconsistncia , como
um erro de sintaxe ou estrutura, em nvel de documento XML. Caso reproduzida
sta ocorrncia , o WSDL considerado invlido , e o processo de gerao
abortado com a mensagem acima , identificando em EXTRA_INFO o "source"
do WSDL , e em <PARSER_ERROR> maiores detalhes sobre a inconsistncia
detectada.

WSCERR022 / <EXTRA_INFO> WSDL Parsing <PARSER_WARNING>

Similar ocorrncia WSCERR021 , esta ocorrncia reproduzida no


momento da gerao de um codigo-fonte a partir de um WSDL , caso este
apresente alguma inconsistncia em nvel de documento XML. Caso
reproduzida sta ocorrncia , o WSDL considerado invlido , e o processo de
gerao abortado com a mensagem acima , identificando em EXTRA_INFO o
"source" do WSDL , e em <PARSER_WARNING> maiores informaes sobre a
inconsistncia detectada.

WSCERR023 / <EXTRA_INFO> Falha ao Importar WSDL : Todos os


parmetros VAZIOS

Esta ocorrncia reproduzida no momento da gerao de um codigo-


fonte a partir de um WSDL , caso este , aps tratramento do Parser , no resulte
nenhum conteudo. Neste caso , o WSDL considerado invlido , e o processo

Curso de Introduo a Plataforma ADVPL/ASP WebService 42


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
de gerao abortado com a mensagem acima , identificando em EXTRA_INFO
o "source" do WSDL .

WSCERR024 / Message <MESSAGE_NAME> no encontrada.

Esta ocorrncia reproduzida no momento da gerao de um codigo-


fonte a partir de um WSDL , quando especificado um parmetro no BINDING
do servio , porm o mesmo no foi declarado no Message do mesmo. Neste
caso , o WSDL considerado invlido , e o processo de gerao abortado com
a mensagem acima , identificando em MESSAGE_NAME o nome do parmetro
especificado no Bindings no encontrado.

WSCERR025 / Binding <SERVICE_BINDING> no Encontrado.

Esta ocorrncia reproduzida no momento da gerao de um codigo-


fonte a partir de um WSDL , quando especificado um binding no servio ,
porm o mesmo no foi declarado na seo Bindings do mesmo. Neste caso , o
WSDL considerado invlido , e o processo de gerao abortado com a
mensagem acima , identificando em SERVICE_BINDING nome do parmetro
especificado no Servio no encontrado.

WSCERR026 / targetNamespace no definido no WSDL.

Quando da anlise do header de um WSDL , no for localizado o atributo


que identifica o namespace default utilizado pelo WSDL ( TargetNamespace ) , o
WSDL considerado invlido , e o processo de gerao abortado com a
mensagem acima .

WSCERR027 / <SERVICE_NAME> : Bind_Operation no encontrada em


aBind[<N>]

Quando da anlise da estrutura de um WSDL , no for localizado uma


operao definida do servio na seo BINDINGS do mesmo , o WSDL
considerado invlido , e o processo de gerao abortado com a mensagem
acima , identificando o servico em <SERVICE_NAME> , e o elemento do array
de controle interno de Bindings em <N>

WSCERR028 / PortType <PORT_TYPE> no Encontrado em aPort

Quando da anlise da estrutura de um WSDL , no for localizado uma


operao definida do servio na seo PORTTYPE do mesmo , o WSDL

Curso de Introduo a Plataforma ADVPL/ASP WebService 43


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
considerado invlido , e o processo de gerao abortado com a mensagem
acima , identificando o porttype no encontrado em <PORT_TYPE>.

WSCERR029 / PortType <PORT_TYPE> no contm operaes.

Quando da anlise da estrutura de um WSDL , for localizado o


PORTTYPE do servio , porm o mesmo no contiver a definio interna de
parmetros , o WSDL considerado invlido , e o processo de gerao
abortado com a mensagem acima , identificando o porttype inconsistente em
<PORT_TYPE>.

WSCERR030 / Declaracao de estrutura pendente no suportada com


<STRUCT_TYPE>

Quando do processamento de estruturas pendentes do WSDL , em


momento de gerao de fonte , as estruturas pendentes devem ser estruturas
tipo COMPLEXTYPE. No so suportados outros tipos neste ponto da rotina .
Neste caso , o WSDL considerado invlido , e o processo de gerao
abortado com a mensagem acima , identificando o tipo da estrutura em
processamento no momento em <STRUCT_TYPE>

WSCERR031 / NameSpace indefinido para <STRUCT_NAME>

Quando do processamento de estruturas pendentes , identificadas como


sendo externas o WSDL atual , especificadas por um IMPORT ou REF , caso a
estrutura seja declarada sem o referido namespace , o WSDL considerado
invlido , e o processo de gerao abortado com a mensagem acima ,
identificando a estrutura em <STRUCT_NAME>

WSCERR032 / (X) NameSpace (<SHORT_NAMESPACE>) para Type


<STRUCT_TYPE> no encontrado.

Quando do processamento de estruturas pendentes , identificadas como


sendo externas o WSDL atual , especificadas por um IMPORT ou REF , o
namespace da mesma deve estar declarado no header do WSDL. Caso ele no
seja encontrado, o WSDL considerado invlido , e o processo de gerao
abortado com a mensagem acima , identificando o alias do namespace em
<SHORT_NAMESPACE> , e a estrutura em <STRUCT_TYPE>.

WSCERR033 / Import para NameSpace <LONG_MANESPACE> no


encontrado.

Curso de Introduo a Plataforma ADVPL/ASP WebService 44


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Complementar ao erro WSCERR032 , este reproduzido quando o
namespace idenfiicado para o parmetro seja externo ao WSDL , porm a URL
para processamento do mesmo no seja especificada atravs de um
<IMPORT...> no WSDL . Neste caso , o WSDL considerado invlido , e o
processo de gerao abortado com a mensagem acima , identificando o
namespace em <LONG_NAMESPACE> .

WSCERR034 / Location VAZIO para Import do NameSpace


<LONG_MANESPACE>

Complementar ao erro WSCERR033 , este reproduzido quando a


declarao da URL / Location do namespace externo no esteja declarado no
<IMPORT...> no WSDL . Neste caso , o WSDL considerado invlido , e o
processo de gerao abortado com a mensagem acima , identificando o
namespace em <LONG_NAMESPACE> .

WSCERR035 / Definio aType para <STRUCT_TYPE> no encontrada.

Quando do processamento de estruturas pendentes , identificadas como


sendo externas o WSDL atual , especificadas por um IMPORT ou REF , o
namespace da mesma identificado e importado , e todo o esquema re-
processado. No reprocessamento , caso o parmetro pendente no seja
encontrado , o WSDL considerado invlido , e o processo de gerao
abortado com a mensagem acima , identificando a estrutura em
<STRUCT_TYPE>.

WSCERR036 / 03 ParamRef no suportado : <REFERENCIA> from


<PARAM_NAME> / <STRUCT_NAME>

Qundo da validao de estruturas complexas , caso a mesma no possua


tipo definido , e no seja uma referncia externa ao WSDL , ela deve ser uma
referncia ao prprio SCHEMA. Caso seja especificada qualquer outro tipo de
referncia , o WSDL considerado invlido , e o processo de gerao
abortado com a mensagem acima , identificando a referncia em
<REFERENCIA> , e os detalhes sobre o parametro / estrutura em
<PARAM_NAME> / <STRUCT_NAME>

WSCERR037 / Estrutura Interna Inesperada em (<PARAM_NAME>)

Quando da validao de estruturas complexas , caso a mesma tenha


passado por todas as interpretaes cabiveis de uma estrutura , e mesmo assim
no foi possvel identific-la , o WSDL considerado invlido , e o processo de

Curso de Introduo a Plataforma ADVPL/ASP WebService 45


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
gerao abortado com a mensagem acima , identificando a estrutura em
<PARAM_NAME>

WSCERR038 / 02 Empty ParamName for <PARAM_NAME> aType[<N1>]


[<N2>]

Quando da validao de estruturas complexas , caso a mesma tenha


passado por todas as interpretaes cabiveis de uma estrutura , porm seu
nome no foi declarado , o WSDL considerado invlido , e o processo de
gerao abortado com a mensagem acima , identificando a estrutura em
<PARAM_NAME>

WSCERR039 / Unexpected DumpType <OBJ_TYPE>

Quando da utilizao da funo XMLDataSet , para a interpretao de um


objeto de retorno XML em formato DataSet , caso no seja passado um objeto
Advpl de tipo vlido ( Objeto XML ou Array ) , o processamento abortado ,
mostrando a mensagem acima , identificando o tipo de parmetro recebido em
<OBJ_TYPE>

WSCERR040 / Unexpected SCHEMA Type <OBJ_TYPE>

Quando da utilizao da funo XMLDataSchema , para determinar os


dados recebidos por um retorno de um Web Service que retorna uma referncia
ao Schema , e no seja passado funo um Objeto Advpl de Tipo Vlido
( Objeto Xml ou Array ) , o processamento abortado , mostrando a mensagem
acima , identificando o tipo de parmetro recebido em <OBJ_TYPE>

WSCERR041 / <NOTNIL_MESSAGE>

Durante a identificao do retorno de um Web Service , caso algum


parmetro obrigatorio do servio no esteja presente no pacote de retorno , o
processamento abortado com a mensagem acima , identificando em
NOTNIL_MESSAGE o parametro que no veio preenchido.

WSCERR042 / URL Location no especificada.

No momento de postar o pacote SOAP de parmetros para um Web


Service , verificada a propriedade reservada _URL do Objeto do Servio. Caso
a mesma esteja fora re-definida para NIL ou , o processamento abortado
com a mensagem acima. Antes da postagem dos dados.

Curso de Introduo a Plataforma ADVPL/ASP WebService 46


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
WSCERR043 / SoapStyle Desconhecido : " <SOAP_STYLE>

No momento de enviar o pacote de parmetros para um Web Service ,


verificado o SoapStyle utilizado pelo servio . Caso o mesmo no seja
DOCUMENT ou RPC , o processamento abortado com a mensagem acima,
identificando o SoapStyle utilizado em <SOAP_STYLE>.

WSCERR044 / No foi possvel POST em <URL_LOCATION>

Apos montado o pacote de envio para a solicitao de processamento do


servio , o pacote enviado url discriminada no servio. Caso o Servidor de
destino do pacote no seja localizado no DNS ou no esteja no ar ,o
processamento abortado com a mensagem acima ,e a url de destino
especifiacada em <URL_LOCATION>

WSCERR045 / Retorno VAZIO de POST em <URL_LOCATION>

Apos montado o pacote de envio para a solicitao de processamento do


servio , o pacote enviado url discriminada no servio. Caso o pacote seja
enviado , porm o retorno do servidor seja um pacote Vazio , o processamento
abortado com a mensagem acima ,e a url de destino especifiacada em
<URL_LOCATION>

WSCERR046 / XML Warning <PARSER_WARNING> ( POST em


<URL_LOCATION> )

Apos montado e enviado o pacote de envio para a solicitao de


processamento do servio , o pacote SOAP retornado analizado para a
alimentacao dos parametros Advpl . Caso o pacote retornado apresente alguma
incionsistncia em nivel de documento XML , o processamento abortado com a
mensagem acima , identificando a inconsistncia em <PARSER_WARNING> e a
url de destino especifiacada em <URL_LOCATION>

WSCERR047 / XML Error <PARSER_ERROR> ( POST em <URL_LOCATION>


)

Apos montado e enviado o pacote de envio para a solicitao de


processamento do servio , o pacote SOAP retornado analizado para a
alimentacao dos parametros Advpl . Caso o pacote retornado apresente algum
erro de sintaxe ou estrutura em nivel de documento XML , o processamento

Curso de Introduo a Plataforma ADVPL/ASP WebService 47


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
abortado com a mensagem acima , identificando o erro em <PARSER_ ERROR
> e a url de destino especifiacada em <URL_LOCATION>

WSCERR048 / SOAP FAULT <FAULT_CODE> ( POST em <URL_LOCATION>


) : [<FAULT_STRING>]

Apos analizado o pacote SOAP retornado do servio , caso o mesmo


apresente uma ocorrncia de falha do tipo SOAP:FAULT , o processamento
abortado com a mensagem acima , identificando o soap_code em
FAULT_CODE , e a string contendo os detalhes da ocorrncia gerada pelo
Server em FAULT_STRING , e a url de destino do pacote <URL_LOCATION>

WSCERR049 / SOAP RESPONSE (RPC) no encontrado.

Durante a analize do pacote SOAP retornado do servio , caso o mesmo


utilize um soapType = RPC , e o node de resposta no seja encontrado no
pacote , o processamento abortado com a mensagem acima .

WSCERR050 / SOAP RESPONSE REF <REFERENCE_ID> (RPC) no


encontrado.

Durante a analize do pacote SOAP retornado do servio , caso o mesmo


utilize um soapType = RPC , e o node de resposta aponte para un outro node via
referncia , e este novo node no seja encontrado no pacote , o pacote
considerado invlido e o processamento abortado com a mensagem acima ,
mostrando o identificador de referncia nao encontrado em REFERENCE_ID

WSCERR051 / SOAP RESPONSE RETURN (RPC) no encontrado.

Durante a analize do pacote SOAP retornado do servio , caso o mesmo


utilize um soapType = RPC , e o node de resposta no aponte para nenhuma
referncia , o node de retorno est dentro do nivel de resposta . Caso o node de
retorno no seja encontrado neste nivel , o pacote de retorno considerado
invlido , e o processamento abortado com a mensagem acima .

WSCERR052 / Enumeration FAILED on <STRUCT_TYPE>

Durante a montagem do pacote de envio de dados para a requisio de


um processamento de um Web Service , caso um parmetro de um tipo simples
contiver um enumeration , e for alimentado pelo client com um valor no
constante na lista do Enumeration , o processamento abortado antes da

Curso de Introduo a Plataforma ADVPL/ASP WebService 48


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
requisico ser realizada , com a mensagem acima , identificando o tipo da
estrutura invlida em <STRUCT_TYPE>

WSCERR053 / WSRPCGetNode (Object) not found.

Quando da analise do retorno de um processamento de um Web Service ,


utilizando soap:style = RPC , no momento de analise de um retorno de uma
estrutura complexa , caso o node referente mesma no seja localizado no
pacote de retorno , o pacote de retorno considerado invlido , e o
processamento abortado com a mensagem acima.

WSCERR054 / Binding SOAP no localizado no WSDL.

Durante a gerao do codigo-fonte para Client Advpl a partir de uma


definio de servio (WSDL) , uma vez identificado o servio , o gerador de
cdigo procura a declarao dos BINDINGS no WSDL. Dentre os bindings
encontrados , apenas so processados os bindings que transportam dados no
formato SOAP . Caso nenhum binding do servio utilize SOAP , o processo de
gerao do fonte client abortado , retornando esta ocorrncia.

WSCERR055 / Invalid Property Type (<TYPE1>) for <PROPERTY>


( <TYPE2> )

Quando da utilizao de uma classe client de um Web Service em Advpl ,


as propriedades da classe devem ser alimentadas com os tipos Advpl
apropriados. Caso uma determinada propriedade do Objeto seja alimentada com
um tipo no concordante com a declarao do mtodo / estrutura , no nomento
do pacote SOAP ser montado , todas as propriedades usadas pelo mtodo so
validadas antes do envio . Caso alguma propriedade <PROPERTY> esteja
alimentada com um tipo de dado Advpl <TYPE1> , porm o tipo esperado era
<TYPE2> , o processamento abortado com a ocorrncia de erro acima.

Observao : Esta validao est disponvel a partir da verso ADVPL WSDL


Client 1.030523 e superiores. Em verses anteriores , ocorria um erro Interno
Type Mismatch ou Argument Error dentro da funo WSSoapValue.

WSCERRINT / <INTERNAL_ERROR>

Curso de Introduo a Plataforma ADVPL/ASP WebService 49


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Esta ocorrncia aponta um erro interno no engine de processamento do
client Web Services . Caso esta ocorrncia seja reproduzida , entre em contato
com Departamento de Tecnologia da Microsiga Software S/A.

Captulo 8 - Web Services em ADVPL - SERVER

Introduo
Visto de forma simples , um Web Service uma classe que pode ser
acessada via protocolo http. De modo que , um programa de Software client ir
solicitar ao server um processamento de uma ao / mtodo do servio ,
enviando o(s) parmetro(s) ao mesmo atravs de uma string XML , formatada no
padro SOAP (Simple Object Access Protocol) , e o servio retornar ao client
uma string XML de resposta , tambm formatada no padro SOAP.

Diferentemente dos Web Sites, que so apresentaes de dados feitas


para serem vistas em um browser por um internauta , um Web Service
construdo para ser acessado diretamente por outro servio ou programa de
Software. Os servios podem ser combinados entre si e com outras aplicaes
para construir servios interativos e inteligentes.

A universalidade de um Web Service , entre outros fatores , reside


justamente na maneira de disponibilizar uma espcie de manual do servio ,
chamado de WSDL ( Web Services Description Language ) , que nada mais do
que uma descrio detalhada do servio , que capaz de resumir em um nico
documento os mtodos de um servio , os parmetros , retornos e detalhes do
mesmo. Um documento WSDL de tal forma completo que praticamente elimina

Curso de Introduo a Plataforma ADVPL/ASP WebService 50


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
a necessidade de qualquer tipo de contato direto entre o desenvolvedor de um
Servico (server) e o analista que ir montar um client para interagir com ele.
Tambm foi idealizado o uso do protocolo HTTP originalmente para a troca de
pacotes de requisio e retorno de processamento pois a maioria dos sistemas
operacionais tm recursos para suport-lo ; e foi escolhido o formato SOAP por
ser um padro aberto, criado pela Microsoft, Ariba e IBM para padronizar a
transferncia de dados em diversas aplicaes, que utiliza como veculo o
universalmente conhecido XML ( Extended MarkUp Language ) .

Termos Tcnicos

SOAP - Sigla de Simple Objetc Access Protocol, ou protocolo simples de


acesso a objetos. O SOAP um padro aberto, baseado em XML, criado pela
Microsoft, Ariba e IBM para padronizar a transferncia de dados entre
aplicaes.
Pode ser usado em combinao com vrios outros protocolos comuns da
Internet,
como HTTP e SMTP.
WSDL - Web Service Description Language. Submetida W3C - o rgo
padronizador da Internet - . A linguagem WSDL define regras baseadas em XML
para descrever servios web.
WEB SERVICES - programa completo ou componente de software residente
num servidor web.
XML - Sigla de Extensible Markup Language, o XML uma linguagem baseada
em tags semelhante ao HTML. Sua principal caracterstica a extensibilidade.
Quem
emite um documento XML pode criar tags personalizadas, que so explicadas
num
documento anexo, que tem extenso XSD.
XSD - Sigla de XML Schema Definition. Arquivo associado a um documento
XML que descreve e valida aos dados no documento. Assim como as linguagens
de programao, os XSDs aceitam dados de diferentes tipos, como nmeros,
data e
moeda.

Definio de um Web Service SERVER em Advpl


Inicialmente veremos neste documento as atribuies e funcionalidades
dos Web Services direcionados uma aplicao SERVER , e num momento

Curso de Introduo a Plataforma ADVPL/ASP WebService 51


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
posterior a funcionalidade de uma aplicao CLIENT em detalhes . A criao de
um Web Service em Advpl consiste na montagem de uma classe Advpl especial
, chamada WSSERVICE , onde cada mtodo da classe uma ao do Web
Service. Caber os fontes dessa classe o processamento de uma requisio e
a gerao do respectivo retorno , cabendo ento Lib de Web Services do AP7
a camada de troca de dados , recepo e tratamento do pacote SOAP , as
converses de dados cabveis do XML para as propriedades de parmetro da
classe Advpl e a montagem do pacote SOAP a partir das propriedades de
retorno setadas pelo mtodo executado e retorn-lo ao Client, alm de prover o
client o documento WSDL referente o servio compilado no Repositrio de
Objetos Advpl .
Este mtodo de programao em camadas permite encapsular on
tratamentos internos , em se tratando de protocolo HTTP , SOAP e WSDL ,
tornando relativamente fcil a misso de criar um Web Servie utilizando-se do
Advanved Protheus. Basta escrever uma classe que receba um ou mais
parmetros e devolva um retorno , ambos tratados pelo fonte como um tipo de
dado Advpl bsico; configurar o Server Protheus para habilitar a interface HTTP
e os Web Services , que a Lib faz todo o resto.

Declarao de um Web Service SERVER em Advpl


Vejamos abaixo um esboo contendo as instrues Advpl necessrias
para a declarao de um Web Service SERVER em Advpl . Para a utilizao
destes comandos , faz-se necessria a declarao do arquivo de header Advpl
APWEBSRV.CH .

WSSERVICE <Nome_do_Servico> // Declarao do Servio

WSDATA <Nome_Campo1> as [ARRAY OF] <Tipo_do_campo1>


[OPTIONAL]
(... demais propriedades , parmetros e retornos ... )

WSMETHOD <Nome_do_Metodo>
(... demais mtodos ...)

ENDWSSERVICE

Curso de Introduo a Plataforma ADVPL/ASP WebService 52


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
WSSTRUCT <Nome_da_Estrutura> // Declarao da(s)
Estrututra(s) ( opcionais )

WSDATA <Nome_Campo1> as [ARRAY OF] <Tipo_do_campo1>


[OPTIONAL]
( ... demais campos da estrutura ... )

ENDWSSTRUCT

// --- Fontes do(s) mtodo(s) declarado(s) no Servio ---

WSMETHOD < Metodo> WSRECEIVE < Campo_In>[, Campo_In2,...] WSSEND


< Campo_Out>
( ... Processamento do servio a partir dos parametros , e alimentao do
retorno <Nome_campo_out> ... )

Regras para Nomenclatura dos Servios / Estruturas / Dados e


Mtodos

1. Nomenclatura dos Servios

<Nome_do_servico> Deve ser iniciado por um caracter alfabtico , e


deve conter apenas os caracteres alfabticos compreendidos entre A ... Z , os
caracteres numricos compreendidos entre 0 ... 9 , podendo tambm ser
utilizado o caracter _ (underline ) . Um servio no pode ter um nome de uma
palavra reservada Advpl , e no pode ter o nome igual a um tipo bsico de
campo ( STRING , INTEGER , FLOAT , DATE , BOOLEAN ) .

2. Nomenclatura de Estruturas

WSSTRUCT <Nome_da_Estrutura> // Declarao de


Estrututras ( opcionais )

Curso de Introduo a Plataforma ADVPL/ASP WebService 53


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
<Nome_da_Estrutura> Obedece s mesmas regras de nomenclatura de
Servios , no podendo haver uma estrutura com o
mesmo nome de um servio declarado.

Uma estrutura um agrupamento de dados bsicos, criado como uma


classe especial (WSSTRUCT) em Advpl. Procedemos com a criao de uma
estrutura para um servio quanto temos a necessidade de definir que um
conjunto de dados bsicos pode ser agrupado em um tipo de informao que
ser utilizada como parmetro e/ou retorno em um ou mais metodos do servio.

3. Nomenclatura de Dados ( Campos )

WSDATA <Nome_Campo> as [ARRAY OF] <Tipo_campo> [OPTIONAL]

<Nome_Campo> Obedece s mesmas regras de nomenclatura de


Servios , no podendo haver um dado com o
mesmo nome de um servio ou estrutura j
declarados.

[ARRAY OF] Caso especificado , indica que este dado poder ter
mais de uma ocorrncia , sendo tratado como um
Array em Advpl .

<Tipo_Campo> Pode ser um tipo bsico de dado (String , Date ,


Integer , Float , Boolean ) , ou pode ser uma estrutura
declarada .

[OPTIONAL] Caso especificado , indica que a especificao deste


dado nos pacotes de envio e/ou retorno opcional.

*** Resties de uso da instruo ARRAY OF : No permitido o uso da


instruo ARRAY OF quando declaramos dados utilizados para entrada de
dados dentro da declarao do servio. Para tal , precisamos criar uma estrutura
intermediria para encapsular o array.

Tipos de Dados Bsicos

String Dado Advpl do tipo String.

Curso de Introduo a Plataforma ADVPL/ASP WebService 54


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Date Dado Advpl do tipo Data.
Integer Dado Advpl do Tipo numrico , apenas numeros inteiros.
Float Dado Advpl do Tipo numrico , pode conter numeros inteiros e
no-inteiros.
Boolean Dado Advpl do Tipo Booleano ( lgico ) .
Base64Binary* Dado Advpl do Tipo String Binria , aceitando todos os
Caracteres da Tabela ASCII , de CHR(0) a CHR(255)

* A implementao do Campo Base64Binary est disponvel apenas a partir


de repositrios gerados aps Maro / 2003 ( A partir da verso ADVPL
WSDL Server 1.030306 ) .

*** Campos Obrigatrios / Opcionais : Por default , um campo declarado sem


a clusula OPTINAL , obrigatrio . Sendo obrigatrio , isto significa que o node
ou tag SOAP referente ao mesmo dever ser especificado no pacote XML
Soap onde o campo for utilizado, seja ele um parmetro ou retorno . No
processamento de um servio , os dados enviados pelo client como parmetro
na requisio so lidos do pacote SOAP e atribuidos s propriedades do mtodo
do respectivo servio, e caso um dado no seja passado ao servio , atribudo
ao mesmo o contedo NIL. A partir da verso ADVPL WSDL Server 1.030103
B , foi implementado o tratamento de excesso no Server para gerar um Soap
Fault automtico , caso algum parametro obrigatrio no seja recebido na
solicitao de processamento.

4. Mtodos ( Aes )

WSMETHOD <Metodo> WSRECEIVE <Cpo_In>[, Cpo_In2,...] WSSEND


<Cpo_Out>

<Metodo> Obedece s mesmas regras de nomenclatura de


Servios , no podendo haver um servio ou
estrutura declarados com o mesmo nome.

Ao declarar o mtodo , obrigatoriamente devemos especificar um ou mais


campos declarados dentro do servio a serem utilizados para a entrada de
dados , e apenas um campo para sada de dados do mtodo . Os campos
podem ser de tipos bsicos ou estruturas. Dentro do mtodo , fazemos
referncias s propriedades da estrutura , segundo a nomenclatura de acesso
propriedades de objetos Advpl ( prefixo :: ) . Caso desejemos declarar um
servio que no requer nenhum parmetro , devemos especificar que o mesmo
recebe o parmetro reservado NULLPARAM .

Curso de Introduo a Plataforma ADVPL/ASP WebService 55


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
Publicando um WEB Service no Protheus - Configurao

Um WebService em Advpl utiliza-se de Working Threads (**) para atender


s solicitaes de processamento em um host http , de modo que , para publicar
e habilitar um Web Service em um servidor Protheus , devemos primeiramente
habilitar o servio de publicaes web ( http ) do Protheus , atravs da seo
[http] do Arquivo de Inicializao do Servidor ( Ap7Srv.ini ) .

Feito isso , existem duas maneiras de habilitar o WebService : Atravs da


criao da seo [webservices] no Arquivo de Configurao do Server , ou
atravs da configurao manual de um ambiente de Working Threads Extended
( WEBEX ) , tambm no inicializador. A diferena entre ambas que a segunda
opao permite especificar maiores detalhes do ambiente de execuo do servio
, permite a configurao de servios e Web sites simultaneamente e multi-
hosting . Quando nos utilizamos do server HTTP do Protheus apenas para Web
Services , utilizamos com grande eficcia a configurao atravs da seo
[webservices]

[WebServices]
Enable=0 ; Indica se o service est habilitado (1) ou no (0).
Environment=ENVTESTE ; Indica qual environment do Server que ir
atender s requisies
Conout=1 ; Permite a exibio de informaes dos status internos do
servio ( default = 0 : desabilitado )
Trace=1 ; Habilita a grevao de um arquivo de log ( wsstrace.log ) ,
contendo as informaes sobre todas as chamadas e status do Web Service
( default = 0 )
PrepareIn=01,01 ; Permite especificar qual a empresa e filial do ERP
sero utilizados para a montagem do ambiente de processamento das
requisies.
NameSpace = http://localhost ; Permite especificar o nome do namespace
utilizado pelo servio ( default = host atualmente utilizado )
URLLocation = http://localhost ; Permite especificar a url responsvel pelo
atendimento as solicitaes de processamento do servio ( default = host
atualmente utilizado )

Para configurar o WebService manualmente , devemos alm de habilitar


o server http , devemos tambm configurar um Job do tipo WEBEX , apontando
para funcoes internas de processamento dos WebServices , configurar um host

Curso de Introduo a Plataforma ADVPL/ASP WebService 56


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
cujas requisioes de links apw seram atendidas por este job. Veja exemplo do
job abaixo :

[http] ; configurao do servio http


Enable=1
Port=80
Path=c:\Ap7\Http

[localhost] ; Configuraao do host local


ResponseJob=WSTESTE

[WSTESTE] ; Configuracao do job


TYPE=WEBEX ; Tipo do Job para WebServices deve ser WEBEX
ONSTART=__WSSTART ; configurao fixa para webservices
ONCONNECT=__WSCONNECT ; configurao fixa para webservices
Environment=ENVTESTE ; Indica qual environment do Server que ir
atender s requisies
INSTANCES=2,5 ; Indica qual a quantidade minima (default ) e maxima
de threads ( ambientes ) que sero colocados no ar para atender solicitaes
de processamento do servio publicado.
Conout=1 ; Permite a exibio de informaes dos status internos do
servio ( default = 0 : desabilitado )
Trace=1 ; Habilita a grevao de um arquivo de log ( wsstrace.log ) ,
contendo as informaes sobre todas as chamadas e status do Web Service
( default = 0 )
PrepareIn=01,01 ; Permite especificar qual a empresa e filial do ERP
sero utilizados para a montagem do ambiente de processamento das
requisies.
NameSpace = http://localhost/ ; Permite especificar o nome do
namespace utilizado pelo servio ( default = host atualmente utilizado )
URLLocation = http://localhost/ ; Permite especificar a url responsvel
pelo atendimento as solicitaes de processamento do servio ( default = host
atualmente utilizado )

Web Services Ponto de Entrada WSSTART

O ambiente de execuo das Threads dos Web Services


automaticamente monta um ambiente ERP , utilizando a empresa e filial

Curso de Introduo a Plataforma ADVPL/ASP WebService 57


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."
especificadas no parametro PREPAREIN na configurao dos WebServices,
quando informado o mesmo.

Caso seja necessrio alguma inicializao especifica para as Threads


destinadas ao Web Services , foi disponibilizado o Ponto de Entrada
WSSTART(cERPEmp,cERPFil) . Vale lembrar que , quando compilamos este
ponto de entrada no repositrio de Objetos , cabe o ponto de entrada realizar a
inicializao do ambiente, de modo que o parmetro PREPAREIN apenas ser
lido , e seu contedo ser passado como parmetro ao ponto de entrada.Caso o
ponto de entrada seja compilado , e no seja preenchido o parametro
PREPAREIN , o ponto de entrada receber a empresa e/ou filial em branco ().

Curso de Introduo a Plataforma ADVPL/ASP WebService 58


"Essa mensagem destinada exclusivamente ao seu destinatrio e pode conter informaes confidenciais,
protegidas por sigilo profissional ou cuja divulgao seja proibida por lei. O uso no autorizado de tais
informaes proibido e est sujeito s penalidades cabveis."

Você também pode gostar