You are on page 1of 81

Todos os direitos autorais reservados pela TOTVS S.A.

Proibida a reproduo total ou parcial, bem como a armazenagem em sistema de recuperao e a transmisso, de qualquer
modo ou por qualquer outro meio, seja este eletrnico, mecnico, de fotocpia, de gravao, ou outros, sem prvia autorizao
por escrito da proprietria.
O desrespeito a essa proibio configura em apropriao indevida dos direitos autorais e patrimoniais da TOTVS.
Conforme artigos 122 e 130 da LEI no. 5.988 de 14 de Dezembro de 1973.

Programao ADVPL
WebService
Protheus Verso 12
Programao ADVPL WebService

Sumrio

1. Objetivo........................................................................................................................................... 5
2. Introduo aos WEBSERVICES ..................................................................................................... 5
2.1. O QUE UM WEBSERVICE WSDL........................................................................................ 5
2.2. O QUE UM XML ................................................................................................................... 6
2.3. O QUE SOAP ....................................................................................................................... 8
2.4. O QUE UDDI ........................................................................................................................ 8
3. O Servidor Protheus como um servidor WEBSERVICES ............................................................... 9
4. Configurando servidor de WEBSERVICES .................................................................................... 9
5. Mdulos Web .................................................................................................................................. 13
6. Explicando o INI do WEBSERVICES.............................................................................................. 21
7. WSINDEX - ndice de Servios ....................................................................................................... 24
7.1. Processamento de Funes..................................................................................................... 26
8. Codificando o servio...................................................................................................................... 26
9. Testando o servio ......................................................................................................................... 28
10. Consumo de servios ................................................................................................................... 35
11. TWsdlManager ............................................................................................................................. 36
12. Criando um WEBSERVICE de Gravao ..................................................................................... 38
12.1. Definio de estrutura ............................................................................................................ 38
13. APNDICES ................................................................................................................................. 59
13.1. GUIA DE REFERNCIA RPIDA: Funes e Erros apresentado pelo WebServices ........... 59
14. GETWSCERROR - Recuperao de informaes ....................................................................... 59
15. WSCERR000 / WSDL no suportado. Existe mais de um servio declarado ............................... 60
16. WSCERR001 / No h SOAP:BINDINGS para a gerao do Servio ......................................... 60
17. WSCERR003 / [XXX / YYY] Enumeration no suportado ............................................................. 60
18. WSCERR004 / NO IMPLEMENTADO ( 001<X> / <N> / WSDLTYPE_NAME ) ......................... 61
19. WSCERR006 / WSDL invlido ou no suportado ......................................................................... 61
20. WSCERR007 / WSDL invlido ou no suportado ......................................................................... 61
21. WSCERR008 / Retorno NULLPARAM invlido ............................................................................ 61
22. WSCERR009 / INTERNAL ERROR (X)........................................................................................ 62
23. WSCERR010/[STRUCT_TYPE]Estrutura / Tipo incompleto ........................................................ 62
24. WSCERR011 / Retorno NULLPARAM invlido ............................................................................ 62
25. WSCERR012 / INTERNAL ERROR (X)........................................................................................ 62
26. WSCERR013 / [SOAP_TYPE] UNEXPECTED TYPE .................................................................. 63
27. WSCERR014 / INVALID NULLPARAM INIT ................................................................................ 63
28. WSCERR015 / Node [XXX] as [YYY] on SOAP Response not found........................................... 63
29. WSCERR016 / Requisio HTTPS no suportada neste Build. [XXX] ......................................... 63
30. WSCERR018 / HTTP[S] Requisio retornou [EMPTY] ............................................................... 64

2 Verso 12
Programao ADVPL WebService

31. WSCERR019 / (XXX) Arquivo no encontrado ............................................................................ 64


32. WSCERR020 / ( XXX / FERROR YYY ) Falha de Abertura. ......................................................... 65
33. WSCERR021/[INFO] WSDL Parsing [PARSER_WARNING] ....................................................... 65
34. WSCERR022 / [INFO] WSDL Parsing [PARSER_ERROR] ......................................................... 65
35. WSCERR023/[xxx] FALHA INESPERADA AO IMPORTAR WSDL .............................................. 65
36. WSCERR024 / [MSG_INFO] MESSAGE no encontrada ............................................................ 66
37. WSCERR025 / [BIND_INFO] Binding no Encontrado ................................................................. 66
38. WSCERR026/TARGETNAMESPACE no definido no WSDL ..................................................... 66
39. WSCERR027/[OPER_INFO] BIND:OPERATION no encontrado ............................................... 66
40. WSCERR028/[PORT_INFO] PortType no Encontrado em aPort ............................................... 67
41. WSCERR029/[PORT_INFO]PortType nocontm operaes ...................................................... 67
42. WSCERR031 / [SCTUCT_NAME] Tipo sem NAMESPACE ......................................................... 67
43. WSCERR032 / [SHORT_NS] NAMESPACE no encontrado ...................................................... 67
44. WSCERR033/[LONG_NS] NameSpace sem Import declarado .................................................... 67
45. WSCERR034/[INFO_NS] NAMESPACE sem LOCATION informado .......................................... 68
46. WSCERR035 / [TYPE] Tipo indefinido ......................................................................................... 68
47. WSCERR036 / Definio no suportada ...................................................................................... 68
48. WSCERR037 / [TYPE] Estrutura Interna Inesperada ................................................................... 68
49. WSCERR038 / [PARAM] WSDL invlido ou no suportado ......................................................... 69
50. WSCERR039 / Unexpected DumpType [X] .................................................................................. 69
51. WSCERR040 / Unexpected SCHEMA Type [X] ........................................................................... 69
52. WSCERR041 / [NOTNIL_MESSAGE] .......................................................................................... 69
53. WSCERR042 / URL LOCATION no especificada ....................................................................... 70
54. WSCERR043 / [SOAP_STYLE] SOAPSTYLE Desconhecido ...................................................... 70
55. WSCERR044 / No foi possvel POST: URL [URP_POST] ......................................................... 70
56. WSCERR045 / Retorno VAZIO de POST : URL <URL> [HEADER_RET] ................................... 71
57. WSCERR046 / XML Warning [XML_WARNING] ( POST em <URL> ) ........................................ 71
58. WSCERR047 / XML Error [XML_ERROR] ( POST em <URL> ) .................................................. 71
59. WSCERR048 / SOAP FAULT [FAULT_CODE] ( POST em <URL> ) :
[FAULT_STRING] ............................................................................................................................... 72
60. WSCERR050 / SOAP RESPONSE REF <NODE_REF> (RPC) NOT FOUND ............................ 72
61. WSCERR051 / SOAP RESPONSE RETURN (RPC) NOT FOUND ............................................. 72
62. WSCERR052 / Enumeration FAILED on [STRUCT_TYPE] ......................................................... 73
63. WSCERR053 / WSRPCGetNode (Object) not found .................................................................... 73
64. WSCERR054 / Binding SOAP no localizado no WSDL .............................................................. 73
65. WSCERR055 / Invalid Property Type (X) for [PARAM] (Y) ........................................................... 74
66. WSCERR056 / Invalid XML-Soap Server Response: soap-envelope not found ........................... 74
67. WSCERR057 / Invalid XML-Soap Server Response: soap-envelope empty ................................ 74
68. WSCERR058 / Invalid XML-Soap Server Response : Invalid soap-envelope
[SOAP_ENV] object as valtype [X] ..................................................................................................... 74

Verso 12 3
Programao ADVPL WebService

69. WSCERR059 / Invalid XML-Soap Server Response: soap-body not found .................................. 75
70. WSCERR060 / Invalid XML-Soap Server Response: soap-body envelope empty ....................... 75
71. WSCERR061 / Invalid XML-Soap Server Response: Invalid soap-body [BODY] object
as valtype [TYPE] ............................................................................................................................... 75
72. WSCERR062 / Invalid XML-Soap Server Response: Unable to determine Soap Prefix
of Envelope [SOAP_ENV]................................................................................................................... 75
73. WSCERR063 / Argument error : Missing field [NODE] as [TYPE] ................................................ 76
74. WSCERR064 / Invalid Content-Type return (HTTP_HEAD) from <URL> ..................................... 76
75. WSCERR065 / EMPTY Content-Type return (HEADER) from <URL> ......................................... 76
76. WSCERR066 / Invalid INVALID WSDL Content-Type (HTTP_HEAD) from <URL> ..................... 77
77. WSCERR067 / EMPTY WSDL Content-Type (HTTP_HEAD) from <URL> .................................. 77
78. WSCERR068 / NOT XML SOURCE from <URL> ........................................................................ 77
79. WSCERR069 / BYREF [PARAM] WITH NO INPUT ARGUMENT : UNSUPPORTED
WEBSERVICE .................................................................................................................................... 78
80. WSCERR070 / Requisio HTTPS no suportada neste BUILD
[PROTHEUS_BUILD] ......................................................................................................................... 78
81. WSCERR071 / INVALID HTTP HEADER (HTTPHEAD) from <URL> .......................................... 78
82. WSCERR072 / HTTP REQUEST ERROR (HEADER) from <URL> ............................................. 78
83. WSCERR073 / Build (BUILD) XML Internal Error ......................................................................... 79
84. Nomenclatura dos Servios .......................................................................................................... 79
85. Nomenclatura de Estruturas ......................................................................................................... 79
86. Nomenclatura de Dados ( Campos )............................................................................................. 80
86.1. Tipos de Dados Bsicos......................................................................................................... 80
87. Mtodos (Aes) ........................................................................................................................... 81

4 Verso 12
Programao ADVPL WebService

1. Objetivo
Ao final do curso, o treinando dever ter desenvolvido os seguintes conceitos, habilidades e atitudes:
A) Conceitos:
estruturas para implementao aplicaes ADVPL WEBSERVICES
introduo as tcnicas de programao voltadas a mltiplos servios baseados na estrutura de
programao ADVPL
introduo aos conceitos de inserir, alterar, excluir e apresentao dos dados via protocolo SOAP

B) Habilidades e tcnicas:
desenvolvimento de aplicaes voltadas ao ERP/WEBSERVICES Protheus
anlise de fontes de mdia complexidade
desenvolvimento de um servio WebServices e seu Client

D) Atitudes a serem desenvolvidas:


adquirir conhecimentos atravs da anlise das funcionalidades disponveis no ERP Protheus;
estudar a implementao de fontes com estruturas orientadas a objetos em WEBSERVICES;

2. Introduo aos WEBSERVICES

2.1. O QUE UM WEBSERVICE WSDL


Web service uma soluo utilizada na integrao de sistemas e na comunicao entre aplicaes diferentes. Com
esta tecnologia, possvel que novas aplicaes possam interagir com aquelas que j existem e que sistemas
desenvolvidos em plataformas diferentes sejam compatveis. Os Web services so componentes que permitem s
aplicaes enviar e receber dados em formato XML. Cada aplicao pode ter a sua prpria "linguagem", que
traduzida para uma linguagem universal, o formato XML.

Para as empresas, os Web services podem trazer agilidade para os processos e eficincia na comunicao entre
cadeias de produo ou de logstica. Toda e qualquer comunicao entre sistemas passa a ser dinmica e
principalmente segura, pois no h interveno humana.

Essencialmente, o Web Service faz com que os recursos da aplicao do software estejam disponveis sobre a rede de
uma forma normalizada. Outras tecnologias fazem a mesma coisa, como, por exemplo, os browsers da Internet acedem
s pginas Web disponveis usando por norma as tecnologias da Internet, HTTP e HTML. No entanto, estas tecnologias
no so bem sucedidas na comunicao e integrao de aplicaes. Existe uma grande motivao sobre a tecnologia
Web Service pois possibilita que diferentes aplicaes comuniquem-se e utilizem recursos diferentes.

Utilizando a tecnologia Web Service, uma aplicao pode invocar outra para efetuar tarefas simples ou complexas,
mesmo que as duas aplicaes estejam em diferentes sistemas e escritas em linguagens diferentes. Por outras
palavras, os Web Services fazem com que os seus recursos estejam disponveis para que qualquer aplicao cliente
possa operar e extrair os recursos fornecidos.

Os Web Services so identificados por um URI (Uniform Resource Identifier), descritos e definidos usando XML
(Extensible Markup Language). Um dos motivos que tornam os Web Services atrativos o fato deste modelo ser
baseado em tecnologias padro, em particular XML e HTTP (Hypertext Transfer Protocol). Os Web Services so
utilizados para disponibilizar servios interativos na Web, podendo ser acessados por outras aplicaes usando, por
exemplo, o protocolo SOAP (Simple Object Access Protocol).

Verso 12 5
Programao ADVPL WebService

O objetivo dos Web Services a comunicao de aplicaes atravs da Internet. Esta comunicao realizada com
intuito de facilitar a EAI (Enterprise Application Integration) que significa a integrao das aplicaes de uma empresa,
ou seja, interoperabilidade entre a informao que circula numa organizao nas diferentes aplicaes como, por
exemplo, o comrcio electrnico com os seus clientes e seus fornecedores. Esta interao constitui o sistema de
informao de uma empresa. E, para alm da interoperabilidade entre as aplicaes, a EAI permite definir um workflow
entre as aplicaes e pode constituir uma alternativa aos ERPs (Enterprise Resource Planning). Com um workflow,
possvel otimizar e controlar processos e tarefas de uma determinada organizao.

Tecnologias

As bases para a construo de um Web service so os padres XML e SOAP. O transporte dos dados realizado
normalmente via protocolo HTTP ou HTTPS para conexes seguras (o padro no determina o protocolo de
transporte). Os dados so transferidos no formato XML, encapsulados pelo protocolo SOAP.

2.2. O QUE UM XML


XML (eXtensible Markup Language) uma recomendao da W3C para gerar linguagens de marcao para
necessidades especiais.

um dos subtipos da SGML (acrnimo de Standard Generalized Markup Language ou Linguagem Padronizada de
Marcao Genrica) capaz de descrever diversos tipos de dados. Seu propsito principal a facilidade de
compartilhamento de informaes atravs da internet.

Entre linguagens baseadas em XML incluem-se XHTML (formato para pginas Web), RDF, SDMX, SMIL, MathML
(formato para expresses matemticas), NCL, XBRL, XSIL e SVG (formato grfico vetorial). A principal caracterstica do
XML, de criar uma infraestrutura nica para diversas linguagens, que linguagens desconhecidas e de pouco uso
tambm podem ser definidas sem maior trabalho e sem necessidade de submisso aos comits de padronizao.

Em meados da dcada de 1990, o World Wide Web Consortium (W3C) comeou a trabalhar em uma linguagem de
marcao que combinasse a flexibilidade da SGML com a simplicidade da HTML. O princpio do projeto era criar uma
linguagem que pudesse ser lida por software, e integrar-se com as demais linguagens. Sua filosofia seria composta por
vrios princpios importantes:

Separao do contedo da formatao


Simplicidade e legibilidade, tanto para humanos quanto para computadores
Possibilidade de criao de tags sem limitao
Criao de arquivos para validao de estrutura (chamados DTDs)
Interligao de bancos de dados distintos
Concentrao na estrutura da informao, e no na sua aparncia

O XML um formato para a criao de documentos com dados organizados de forma hierrquica, como se v,
frequentemente, em documentos de texto formatados, imagens vetoriais ou bancos de dados.

Pela sua portabilidade, j que um formato que no depende das plataformas de hardware ou de software, um banco
de dados pode, atravs de uma aplicao, escrever em um arquivo XML, e um outro banco distinto pode ler ento estes
mesmos dados.

6 Verso 12
Programao ADVPL WebService

Vantagens e desvantagens

Com relao aos outros "formatos universais para intercmbio de dados" j propostos e experimentados, o XML
apresenta diversas vantagens tcnicas, mas so as vantagens no-tcnicas que o tornam um tpico de to grande
importncia:

um padro "de fato" e formal: em um universo onde cada desenvolvedor e cada fabricante tm a liberdade
de criar e impor seu prprio formato, a aceitao do XML tem sido vista como o seu maior trunfo.

Tem sua origem em uma das instituies de padronizao mais abertas e dinmicas, o W3C.

Se baseia na experincia de sucesso do SGML, sendo considerado inclusive o "sucessor da SGML".

Vantagens tcnicas

baseado em texto simples


Com relao aos formatos no-texto (binrios), um debate existe desde os tempos do SGML, mas ainda hoje a
comunidade de usurios e desenvolvedores prefere o texto ao binrio, e as opes do tipo txt.zip (texto
comprimido) tais como o OpenDocument so a sada mais largamente adotada

Suporta Unicode, permitindo que a maior parte da informao codificada em linguagem humana possa ser
comunicada

Pode representar as estruturas de dados relevantes da computao: listas, registros, rvores

auto documentado (DTDs e XML Schemas): o prprio formato descreve a sua estrutura e nomes de campos,
assim como valores vlidos

A sintaxe restrita e requerimentos de parsing tornam os algoritmos de anlise mais eficientes e consistentes

editvel, devido popularidade do XML nos dias de hoje, com diferentes nveis de automao, em qualquer
ambiente:
Sem automao: editores txt antigos, tais como vi
Com recurso automtico de destaque: a maior parte dos editores txt modernos oferece recursos para
destaque de XML (distino visual entre tag, atributo e contedo)
Com recursos de visualizao e controle (folding) da hierarquia: editores txt mais especializados e editores
simples acoplados a navegadores
Com recursos de validao e anlise sinttica: ferramentas um pouco mais sofisticadas, orientadas a
programadores, tais como as IDEs, ou orientadas a contedo, tais como editores XHTML, ambos vem se
adaptando para lidar com outros formatos XML, interpretando DTD, XSLT ou XML Schema

Desvantagens tcnicas

As desvantagens em geral se restringem s aplicaes que no demandam maior complexidade, tais como vetores,
listas associativas (chave-valor) e informaes relativas configurao, em que o bom senso estabelece a melhor
escolha (entre o XML ou um formato menos popular).

O "XML simples" pode ser substitudo por formatos mais simples, como properties, YAML, JSON e Simple Outline XML.

Verso 12 7
Programao ADVPL WebService

Os principais critrios para se avaliar a demanda por um formato mais simples so:

Velocidade: a grande quantidade de informao repetida prejudicando a velocidade de transferncia real de


informao (quando esta transportada na forma de XML)

Editabilidade txt: o arquivo "XML simples" (como se pode ver nos exemplos acima) pode ser bem pouco
intuitivo, dificultando sua edio com editores txt por pessoas leigas, mais ainda no caso de volume de dados
muito grandes, onde o XML pode sequer ser facilmente editvel por pessoas experientes

O formato properties, por exemplo, mais fcil de ser editado por leigos, por ser apenas uma lista de itens do tipo
chave-valor, e o JSON um exemplo de um formato mais prtico e rpido em contexto Javascript.

2.3. O QUE SOAP


SOAP, originado do acrnimo ingls Simple Object Access Protocol, e em portugus Protocolo Simples de Acesso a
Objetos, um protocolo para troca de informaes estruturadas em uma plataforma descentralizada e distribuda.

Ele se baseia na Linguagem de Marcao Extensvel (XML) para seu formato de mensagem, e normalmente baseia-se
em outros protocolos da Camada de aplicao, mais notavelmente em Chamada de Procedimento Remoto (RPC) e
Protocolo de Transferncia de Hipertexto (HTTP), para negociao e transmisso de mensagens.

SOAP pode formar a camada base de uma pilha de protocolos de web services, fornecendo um framework de
mensagens bsico sob o qual os servios podem ser construdos.

Este protocolo baseado em XML consiste de trs partes: um envelope, que define o que est na mensagem e como
process-la, um conjunto de regras codificadas para expressar instncias dos tipos de dados definidos na aplicao e
uma conveno para representar chamadas de procedimentos e respostas.

Sua especificao define um framework que prov maneiras para se construir mensagens que podem trafegar atravs
de diversos protocolos e que foi especificado de forma a ser independente de qualquer modelo de programao ou
outra implementao especfica. Por no se tratar de um protocolo de acesso a objetos, o acrnimo no mais
utilizado.

Geralmente servidores SOAP so implementados utilizando-se servidores HTTP, embora isto no seja uma restrio
para funcionamento do protocolo. As mensagens SOAP so documentos XML que aderem a uma especificao
fornecida pelo rgo W3C.

O primeiro esforo do desenvolvimento do SOAP foi implementar RPCs sobre XML.

2.4. O QUE UDDI


UDDI (originado do acrnimo ingls Universal Description, Discovery and Integration) um servio de diretrio onde
empresas podem registrar (publicar) e buscar (descobrir) por servios Web (Web Services).
UDDI ainda um framework de plataforma independente para descrio de servios, descobrindo as empresas, e
integrar os servios de negcios usando a internet. A comunicao realizada atravs do SOAP e as interfaces web
service so descritas por WSDL.

Um servio de registro UDDI um Web Service que gerencia informao sobre provedores, implementaes e
metadados de servios. Provedores de servios podem utilizar UDDI para publicar os servios que eles oferecem.

8 Verso 12
Programao ADVPL WebService

Usurios de servios podem usar UDDI para descobrir servios que lhes interessem e obter os metadados necessrios
para utilizar esses servios.

A especificao UDDI define:

APIs SOAP utilizadas para publicar e obter informaes de um registro UDDI


Esquemas XML do modelo de dados do registro e do formato das mensagens SOAP
Definies WSDL das APIs SOAP
Definies de registro UDDI (modelos tcnicos - tModels) de diversos sistemas de identificao e
categorizao, que podem ser utilizados para identificar e categorizar registros UDDI

3. O Servidor Protheus como um servidor WEBSERVICES


O servidor Protheus pode ser configurado para trabalhar como um servidor WEBSERVICES.

O Protheus, a partir da verso AP7, possui ferramentas nativas e integradas com a LIB de Infraestrutura do ERP, para
desenvolvimento de aplicaes 'Cliente' e 'Server', utilizando a tecnologia dos Web Services.

Para melhor compreenso do assunto, os tpicos relacionados a ambos foram didaticamente separados em Aplicaes
Server e Aplicaes Cliente, respectivamente. Nos tpicos 'Comandos' e 'Funes', so abordadas respectivamente as
diretivas e funes da Lib de Infraestrutura do ERP disponibilizadas para o desenvolvimento de ambas as aplicaes,
Cliente e Server.

No tpico 'Exemplos AdvPL', so demonstrados os exemplos 'atmicos' de uso das funes e comandos.

4. Configurando servidor de WEBSERVICES


Nos servios HTTP e HTTPS, possvel especificar as configuraes padro deste protocolo, propriedades gerais
aplicadas a todos os hosts e URLs de acesso utilizadas pelos projetos WEBSERVICES.

A habilitao do servio de HTTP necessria para a instalao dos mdulos WebService. Durante a instalao de um
mdulo WebService, caso o servio de HTTP no esteja habilitado, esta operao ser executada automaticamente.

Ao expandir o tpico "Servidor HTTP", so mostrados os itens HTTP, HTTPS e FTP, que permitem a edio
independentemente das configuraes de cada um destes protocolos. Para cada um deles, so permitidas as
operaes de edio e excluso da respectiva configurao.

Neste tpico iremos abordar somente a criao do Servio HTTP e WEBSERVICES

Editando a Configurao HTTP

Para inserir / editar uma configurao HTTP:

1. Abra o Wizard localizado na pasta smartclient

Verso 12 9
Programao ADVPL WebService

2. Clique no cone Wizard

3. No tpico "Servidor HTTP", posicionado o cursor sobre o item "HTTP" e clique em - Editar Configurao, nas
Aes Relacionadas.

4. Clique em editar e a tela se abrir:

10 Verso 12
Programao ADVPL WebService

Ser apresentada uma nica janela, contendo as configuraes padres atuais para o servio de http.

Protocolo Habilitado

Atravs deste campo possvel desabilitar a utilizao do protocolo http, sem deletar as configuraes atuais desta
seo.

Nome da Instncia

Este campo no est disponvel para edio. Caso esteja preenchido, informa que um mdulo Web foi instalado no host
HTTP [default]; neste caso, no possvel alterar as informaes de path, porta de conexo, ambiente e processo de
resposta.

Se for necessrio alterar as informaes de configurao padro do protocolo, deve-se utilizar o assistente de edio
de Mdulos Web, editando a instncia que est utilizando a seo http [default].

Path de Arquivos

Especifica o diretrio raiz a ser utilizado pelo protocolo "HTTP" para o acesso a arquivos estticos e imagens.

Deve ser informado com unidade de disco e caminho completo.

Porta de Conexo

Informa a porta de conexo utilizada. Para HTTP, a porta padro a 80.

Verso 12 11
Programao ADVPL WebService

Ambiente

Permite selecionar um ambiente (Environment) neste ByYou Application Server para atender s solicitaes de
processamento de links ".apl".

Processo de Resposta

Permite selecionar um processo WEB/WEBEX configurado neste ByYou Application Server para atender s solicitaes
de processamento de links ".apw".

Instncias de Protocolo (mnimo e mximo)

Nestas configuraes, possvel especificar um nmero mnimo e mximo de processos internos referentes ao servio
de HTTP. Estes processos internos so utilizados para o atendimento simultneo das requisies de contedo esttico,
arquivos, imagens, e demais arquivos disponveis a partir da pasta definida em Path de Arquivos, atravs deste
protocolo (*).

Path para Upload de Arquivos

Caso o host HTTP [default] esteja sendo utilizado com um processo de resposta que suporte a funcionalidade de
Upload de arquivos via HTTP, atravs desta chave, possvel configurar a partir de qual diretrio sero gravados os
arquivos enviados via http (relativo ao diretrio raiz do ambiente utilizado pelo processo de resposta).

Esta configurao atualizada, automaticamente, conforme o mdulo web instalado.

Timeout de Sesses WEBEX (em segundos)

Ao configurar um ou mais mdulos Web que utilizem sesses de usurio atravs de um Processo WEBEX, possvel
definir qual ser o tempo de permanncia em inatividade em memria das variveis de sesses utilizadas pelos
usurios do mdulo web.

Caso seja no especificado, o valor padro equivalente a 3600 segundos (uma hora).

(*) Vale ressaltar que uma thread HTTP no possui, necessariamente, ligao implcita com uma Thread AdvPL. Um
Web Browser, quando solicita um arquivo HTML ou uma imagem, estabelece uma conexo HTTP com o ByYou
Application Server, para receber o dado solicitado. Quando o browse recebe a informao desejada, fecha esta
conexo, mantendo a Thread HTTP do Protheus disponvel para atender a outras requisies HTTP, oriundas deste ou
de outro Web Browser.

12 Verso 12
Programao ADVPL WebService

Para gravar as configuraes atuais, deve-se clicar em Finalizar.

Ao confirmar a gravao, o arquivo de configuraes do ByYou Application Server (appserver.ini) ser atualizado e o
Assistente ser reiniciado, apresentando a tela principal do Wizard.

5. Mdulos Web
Neste tpico, possvel instalar, configurar e excluir as configuraes e arquivos adicionais pertinentes aos mdulos
Web disponibilizados pelo Sistema.

Os mdulos Web disponibilizados so:

DW - Data Warehouse

Verso 12 13
Programao ADVPL WebService

BSC - Balanced Scorecard


GE - Gesto Educacional
TCF - Terminal do Funcionrio (RH on-line)
PP - Portal Protheus
WS - Web Services
WPS - WebPrint/WebSpool
MAK - Mdulo Webex Makira (ambientes customizados)
GPR - Gesto de Pesquisas e Resultados
GAC - Gesto de Acervos

Instalando um Mdulo Web

Para instalar um mdulo Web:

1. Abra o Wizard localizado na pasta smartclient

2. Clique no cone Wizard

3. Posicione com o mouse sobre o tpico Mdulos Web na rvore de tpicos, e clique em Novo Mdulo , nas
Aes Relacionadas.

4. Clique em editar e a tela se abrir

14 Verso 12
Programao ADVPL WebService

Mdulo Web

Selecione o mdulo Web que deve ser instalado. Para instalao do mdulo PP - Portal Protheus, GPR - Gesto de
Pesquisa e Resultado e GAC - Gesto de Acervos, necessria a instalao prvia do mdulo Web Services.

Nome da Instncia

Informe o nome para identificao desta configurao do mdulo Web; no utilize caracteres acentuados ou espaos.

Este nome ser utilizado para individualizar as configuraes das instalaes do mdulo Web, assim, se a empresa
necessita aplicar diferentes configuraes para um mesmo mdulo Web, possvel instal-lo sob uma nova instncia.

Exemplo: Na instalao do mdulo GE - Educacional, cada unidade educacional pode utilizar um conjunto diferente de
imagens para apresentao do seu site ou, ainda, um environment diferente no Server Protheus da verso
correspondente; para isto, ser necessrio criar diferentes instncias.

Diretrio Raiz de Imagens (Web Path)

Informe o diretrio para instalao das imagens e dos demais arquivos (. css,.jar,.htm, etc.) deste mdulo, que sero
utilizados para apresentao no browser.

Este diretrio ser criado abaixo do diretrio raiz (RootPath) do Ambiente (environment) selecionado para a instalao.

Para cada instalao de mdulo Web, dever ser especificado um diretrio diferente, iniciando com o sinal de "\" (barra
inversa).

Verso 12 15
Programao ADVPL WebService

Environment

Selecione o environment (ambiente) que ser utilizado para execuo do mdulo. So relacionados todos os ambientes
disponveis no Server ativo.

Habilitar processos na inicializao do Servidor

Caso esta configurao seja selecionada, os processos WEB / WEBEX criados para esta configurao de mdulo sero
automaticamente inseridos na configurao OnStart do ByYou Application Server.

URL do Protheus Web Services

Este campo somente exibido na instalao do mdulo WS - WebServices Protheus; neste caso, deve ser preenchido
com a URL utilizada na instalao do mdulo Web Services, precedido por "HTTP://".

5. Para prosseguir para a segunda tela, clique em "Avanar".

O Assistente ir consistir as informaes fornecidas e determinar se o ambiente est apto para instalao do mdulo.
Deve-se observar que para instalao dos mdulos Web, necessrio que os pacotes de instalao dos arquivos Web
(. MZP) estejam disponveis na pasta "SYSTEMLOAD" localizada abaixo do diretrio raiz.

(RootPath) do Ambiente (environment). Caso os pacotes no sejam localizados, ser apresentada uma janela de
advertncia.

16 Verso 12
Programao ADVPL WebService

A instalao poder prosseguir; no entanto, os arquivos Web no sero descompactados, sendo apenas atualizada a
configurao do servidor. Em seguida, ser apresentada a janela "Configurao de Host x Empresas/Filiais".

6. Informe os dados conforme a orientao a seguir:

Host: Informe o endereo Web a partir do qual o mdulo ser acessado, por meio de um browser.

Exemplos:
www.nomedosite.com.br (para um ambiente Internet)
"nomedoservidor (para um ambiente Intranet).

Pode-se, adicionalmente, informar um diretrio virtual aps o Host, separando-os por uma barra /. Isto permite que
seja instalado, no mesmo host, mais de um mdulo Web.

Verso 12 17
Programao ADVPL WebService

Exemplos:
nomedoservidor/ws (para webservices)
nomedoservidor/pp (para o Portal)

No se deve especificar o protocolo utilizado (como "HTTP://" ou HTTPS://).

Vale ressaltar que possvel especificar um nome de host, no sendo obrigatoriamente o nome da estao servidor,
desde que o nome especificado esteja registrado em um servidor de DNS (que relaciona um nome de host ao IP do
equipamento servidor) e visvel no mbito do parque de mquinas-cliente da aplicao Web.

Selecione as Empresa/Filiais

Na rea "Seleo Empresas/Filiais", selecione a empresa/filial para a qual est sendo configurado este host.

Se a instalao for referente aos mdulos BSC, PP e WPS, estar disponvel apenas a opo "Todas as Empresas".

7. Aps informar o Host e selecionar um item da rea de Seleo Empresa/Filiais, clique em "Relacionar".

A amarrao do host informado com este item ser apresentada na janela "Relacionamentos".

possvel criar diversos relacionamentos, o Assistente, automaticamente, ir criticar as amarraes, de acordo com as
caractersticas operacionais do mdulo em instalao.

Exemplo: O mdulo de WebServices no permite amarrar um mesmo host a mais de uma empresa/filial; j para o
mdulo TCF, esta amarrao possvel.

8. Se necessrio excluir um relacionamento, posicione o cursor sobre este e clique em "Excluir".

18 Verso 12
Programao ADVPL WebService

9. Clique em Avanar para prosseguir.

No possvel prosseguir para a prxima tela sem que seja informada, no mnimo, uma amarrao entre um host e
uma Empresa/Filial.

10. Informe os dados conforme a orientao a seguir:

Host Virtual

Apresenta o host configurado.

Empresa/Filial

Apresenta a empresa/filial relacionada.

Mnimo Usurios

Informe a expectativa mnima de usurios que iro acessar o site.

Mximo Usurios

Informe a expectativa mxima de usurios que iro acessar o site.

Com base nos campos Mnimo Usurios e Mximo Usurios, o Assistente ir determinar a quantidade mdia de
processos (working threads) que o site ir utilizar.

Exemplo:

Mnimo: 5

Mximo: 10

Com base nesta configurao, o Protheus ir determinar um nmero de processos para atender a essa demanda.
Considerando que a mdia de usurios por processo de 10 para 1, neste caso, o Protheus ir configurar o nmero
mnimo de 1 processo e o mximo de 3.

A informao do nmero mnimo no necessria; caso omitida, ser considerado 1 processo. A informao do
nmero mximo obrigatria.

Verso 12 19
Programao ADVPL WebService

11. Para finalizar a instalao do mdulo, clique em Finalizar.

Ao confirmar a instalao, o pacote de arquivos do mdulo Web ser descompactado no diretrio raiz de imagens
informado, e o arquivo de configuraes do ByYou Application Server (appserver.ini) ser atualizado com as definies
pertinentes ao mdulo (Host, Processos WEB/WEBEX).

Ao final do processo de atualizao, o Assistente ser reiniciado para apresentao da tela inicial do Wizard.

20 Verso 12
Programao ADVPL WebService

Feche o assistente e levante o servio em modo console para verificar o seu funcionamento

6. Explicando o INI do WEBSERVICES


Um Web Service em AdvPL utiliza-se de working threads para atender as solicitaes de processamento atravs do
protocolo HTTP.

Para isso, existem duas maneiras de habilitar um Web Service:

1. Atravs da criao da seo [WebServices], no arquivo de configurao (appserver.ini), do TOTVS |


Application Server.

2. Configurao manual de um ambiente working threads extended (WEBEX), no arquivo de configurao


(appserver.ini), do TOTVS | Application Server.

A diferena entre ambas que a segunda opo permite especificar mais detalhes do ambiente de execuo do
servio, configurar os servios de Web Sites simultaneamente e o atendimento diferenciado do processamento para
mais de um host e diretrios virtuais.

A seguir, observe um exemplo de como configurar o servidor TOTVS | Application Server para Web Services, utilizando
a seo [WebServices].

Verso 12 21
Programao ADVPL WebService

Importante

Esta configurao exige que a seo [HTTP] no esteja configurada no TOTVS | Application
Server. J que a configurao ir internamente habilitar o servio de HTTP e configurar o
processo de resposta para o Web Services.

Exerccio

[WebServices]
Enable=1; (Obrigatrio) - Indica se o service est habilitado (1) ou no (0).

Environment=PROTHEUS;
(Obrigatrio) - Indica qual environment do Server que ir atender as requisies.

Conout=0;
(Opcional) - Permite a exibio de informaes dos status internos do servio
(padro=0:desabilitado).
Utilizado APENAS para depurao, em casos especficos, pois prejudica significativamente a
performance do(s) servio(s).

Trace=0;
(Opcional) - Habilita a gravao de um arquivo de log (wsstrace.log), contendo as informaes
sobre todas as chamadas e status do Web Service (padro=0).

PrepareIn=01,01;
(Obrigatrio) - Permite especificar qual a empresa e filial do ERP sero utilizados para a montagem
do ambiente de processamento as requisies.

NameSpace=http://localhost:81;
(Opcional) - Permite especificar o nome do namespace'padro', utilizado pelo(s) servio(s)
compilado(s) sem a definio de 'NameSpace'. (Padro=host atualmente utilizado).

URLLocation=http://localhost:81;
(Opcional) - Permite especificar a URL responsvel pelo atendimento s solicitaes de
processamento do(s) servio(s) (padro=host atualmente utilizado).

No entanto, possvel configurar o Web Service manualmente. Para isso, deve-se inicialmente habilitar o servio de
HTTP do servidor Protheus, configurar um processo WEBEX apontando para funes internas de processamento dos
Web Services e configurar um host atravs do qual as requisies de processamento sero atendidas.

22 Verso 12
Programao ADVPL WebService

Exerccio

HTTP]; Configurao do protocolo HTTP


Enable=1
Port=81
Path=F:\Protheus\Protheus12\Protheus_data\WEB

[Localhost]; Configurao do host da estao local


Defaultpage=wsindex.apw
ResponseJob=WSTeste

[WSTeste]; Configurao do job para atender aos Web Services.

Type=WEBEX; (Obrigatrio) - Tipo do job para Web Services deve ser WEBEX.

OnStart=__WSSTART; (Obrigatrio) - Configurao fixa para Web Services.

OnConnect=__WSCONNECT; (Obrigatrio) - Configurao fixa para Web Services.

Environment=ENVTeste; Especifique qual o ambiente (environment) do servidor Protheus que ir


atender os Web Services.

Instances=2.5; (Obrigatrio) - Indica qual a quantidade mnima (padro) e mxima de processos


(Threads) que sero colocados na memria para atender s solicitaes de processamento do(s)
servio(s) publicado(s).

Conout=0; (Opcional) - Permite a exibio de informaes dos status internos do servio


(padro=0:desabilitado). Utilizado APENAS para depurao, em casos especficos, pois prejudica
significativamente a performance do(s) servio(s).

Trace=1; (Opcional) - Habilita a gravao de um arquivo de log (wsstrace.log), contendo as


informaes sobre todas as chamadas e status do Web Service (padro=0).

PrepareIn=99,01; (Obrigatrio) - Permite especificar qual empresa e filial do ERP sero utilizadas
para a montagem do ambiente de processamento das requisies.

NameSpace=http://localhost:81/; (Opcional) - Permite especificar o nome do namespace


'padro', utilizado pelo(s) servio(s) compilado(s) sem a definio de 'NameSpace'. (padro=host
atualmente utilizado).

URLLocation=http://localhost:81/; (Opcional) - Permite especificar a URL responsvel pelo


atendimento s solicitaes de processamento do(s) servio(s) (padro=host atualmente utilizado).

Verso 12 23
Programao ADVPL WebService

7. WSINDEX - ndice de Servios


Uma vez habilitada a configurao para Web Services, obtemos acesso a uma interface HTTP de consulta ao ndice de
servios publicados. Para tal, basta reiniciar o servidor TOTVS | Application Server aps a configurao ser realizada,
abrir um navegador (por exemplo, Internet Explorer), e acessar o link http://<servidor>/wsindex.apw. No caso do
exemplo de configurao acima, informe o endereo http://localhost/wsindex.apw e observe a interface de consulta ao
ndice dos servios.

Exemplo

Caso o host configurado para os Web Services seja o host local (localhost), deve-se acessar o endereo:
http://localhost:90/ws. Se estiver utilizando o sistema Microsiga Protheus, a tela apresentada ser semelhante ao
exemplo abaixo:

Observe que, na janela acima, so apresentados todos os servios compilados e disponibilizados no repositrio de
objetos do ambiente configurado. Atravs dessa janela, possvel obter mais detalhes de cada um dos servios
compilados. Cada servio ativo um link para uma pgina que apresentar todos os mtodos do servio com um link
do servidor TOTVS | Application Server que fornecer a descrio do servio (WSDL).

Observe, a seguir, um exemplo com os detalhes do servio CFGTABLE.

24 Verso 12
Programao ADVPL WebService

Atravs desta janela, possvel obter a descrio do servio WSDL ao clicar no link disponvel em "Descrio do
Servio (WSDL)". Ao clicar neste link, uma nova janela ser apresentada exibindo o documento WSDL do servio.

Alm disso, cada mtodo do servio disponibilizado tambm um link para uma pgina onde so apresentados os
exemplos de pacotes SOAP que esse mtodo especificamente espera para recepo de parmetros e o modelo de
retorno do servio.

Verso 12 25
Programao ADVPL WebService

Caso, o fonte-client AdvPL do servio, seja gerado e esteja compilado no repositrio atual, a interface de consulta
habilita a funcionalidade de teste do Web Services, atravs da interface HTTP, apresentando no final da tela o boto
testar.

Ao clicar nesse boto, ser montada uma tela HTML para que os parmetros do servio sejam preenchidos. Aps o
preencher os parmetros solicitados e submet-los, o pacote de retorno do servio e seu respectivo status so
retornados no browse.

7.1. Processamento de Funes


A operao de buscar o horrio atual no servidor no necessita de nenhum parmetro para execuo, tendo um
retorno: o horrio atual, no formato hh:mm:ss.

A especificao de um WebService permite que um servio seja declarado de modo a no receber nenhum parmetro,
mas exige que o Web Service sempre possua um retorno.

8. Codificando o servio
Para codificar um servio, deve-se utilizar o TOTVS | Development Studio, criar um novo arquivo de programa e nele
escrever o servio. A numerao disposta esquerda do cdigo fonte meramente ilustrativa, no devendo ser
digitada. Essa numerao utilizada mais abaixo, para detalhar o cdigo exemplo linha a linha.

1. #include "Protheus.ch"
2. #include "ApWebSRV.ch"
3. #include "TbiConn.ch"
4.
5. WSSERVICE SERVERTIME Description "VEJA O HORARIO"
6.
7. WSDATA Horrio AS String
8. WSDATA Parmetro AS String

//String Dado AdvPL do tipo string.


//Date Dado AdvPL do tipo data.
//Integer Dado AdvPL do tipo numrico (apenas nmeros inteiros).
//Float Dado AdvPL do tipo numrico (pode conter nmeros 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) CHR(255).

9. WSMETHOD GetServerTime Description "METHOD DE VISUALIZAO DO HORARIO"


10. ENDWSSERVICE
11. WSMETHOD GetServerTime WSRECEIVE Parmetro WSSEND Horrio WSSERVICE SERVERTIME
12. ::Horrio:= TIME()
13. Return .T.

Linha 1 - especificada a utilizao do include Totvs.CH ou Protheus.ch, contendo as definies dos comandos AdvPL
e demais constantes.

26 Verso 12
Programao ADVPL WebService

Linha 2 - especificada a include APWebSrv.CH ou Totvswebsrv.ch, que contm as definies de comandos e


constantes utilizados nas declaraes de estruturas e mtodos do Web Service. Ele obrigatrio para o
desenvolvimento de Web Services.

Linha 3 - especificada a utilizao do include TBICONN.CH, contendo as definies dos comandos AdvPL para
conectar ao banco e Protheus desejados.

Linha 5 - Com esta instruo, definido o incio da classe do servio principal, qual damos o nome de SERVERTIME.

Linha 6 - Dentro da estrutura deste servio, informado que um dos parmetros utilizados chama-se horrio, e ser do
tipo string.

Linha 9 - Dentro da estrutura deste servio, informado que um dos mtodos do servio chama-se GetServerTime.

Linha 10 - Como no so necessrias mais propriedades ou mtodos neste servio, a estrutura do servio fechada
com esta instruo.

Linha 11 - Aqui declarado o fonte do mtodo GetServerTime, que receber parmetros, informado que seu retorno
ser o dado Horrio (declarado na classe do servio como uma propriedade, do tipo string).

Linha 12 - atribudo na propriedade ::Horrio da classe deste servio, o retorno da funo AdvPL Time(), que retorna
a hora atual no servidor no formato HH:MM:SS. Deve-se utilizar "::" para alimentarmos a propriedade da classe atual.

Linha 13 - O mtodo GetServerTime finalizado nesta linha, retornando .T. (verdadeiro), indicando que o servio foi
executado com sucesso.

Aps compilado o servio, deve-se acessar novamente a pgina de ndice de servios (wsindex.apw) e verificar se o
novo servio compilado encontra-se l.

Verso 12 27
Programao ADVPL WebService

9. Testando o servio

Para executar isto dentro de um cdigo, a princpio, devemos gerar um client de conexo do WS-Service.

28 Verso 12
Programao ADVPL WebService

No Tds iremos criar o client.

Verso 12 29
Programao ADVPL WebService

Preencher com as informaes:

Local: Diretrio que ir salvar o fonte;


Nome do fonte: Nome do arquivo PRW que ser criado;
Url: Informar a URL do servio que deseja criar o client

Ao Clicar em concluir o sistema ir gerar o cdigo fonte do client do referido Services informado.

#include "Totvs.ch"
#include "Totvswebsrv.ch"

/* ===============================================================================
WSDL Location http://localhost:81/SERVERTTIME.apw?WSDL
Observaes Cdigo-Fonte gerado por ADVPL WSDL Client 1.111215
Alteraes neste arquivo podem causar funcionamento incorreto
e sero perdidas caso o cdigo-fonte seja gerado novamente.
=============================================================================== */

User Function _GGLXARK ; Return // "dummy" function - Internal Use

/* -------------------------------------------------------------------------------

30 Verso 12
Programao ADVPL WebService

WSDL Service WSSERVERTTIME


------------------------------------------------------------------------------- */

WSCLIENT WSSERVERTTIME

WSMETHOD NEW
WSMETHOD INIT
WSMETHOD RESET
WSMETHOD CLONE
WSMETHOD GETSERVERTTIME

WSDATA _URL AS String


WSDATA _HEADOUT AS Array of String
WSDATA _COOKIES AS Array of String
WSDATA cCPARAM AS string
WSDATA cGETSERVERTTIMERESULT AS string

ENDWSCLIENT

WSMETHOD NEW WSCLIENT WSSERVERTTIME


::Init()
If !FindFunction("XMLCHILDEX")
UserException("O Cdigo-Fonte Client atual requer os executveis do Protheus Build
[7.00.111010P-20120314] ou superior. Atualize o Protheus ou gere o Cdigo-Fonte novamente utilizando o
Build atual.")
EndIf
Return Self

WSMETHOD INIT WSCLIENT WSSERVERTTIME


Return

WSMETHOD RESET WSCLIENT WSSERVERTTIME


::cCPARAM := NIL
::cGETSERVERTTIMERESULT := NIL
::Init()
Return

WSMETHOD CLONE WSCLIENT WSSERVERTTIME


Local oClone := WSSERVERTTIME():New()
oClone:_URL := ::_URL
oClone:cCPARAM := ::cCPARAM
oClone:cGETSERVERTTIMERESULT := ::cGETSERVERTTIMERESULT
Return oClone

// WSDL Method GETSERVERTTIME of Service WSSERVERTTIME

WSMETHOD GETSERVERTTIME WSSEND cCPARAM WSRECEIVE cGETSERVERTTIMERESULT WSCLIENT


WSSERVERTTIME
Local cSoap := "" , oXmlRet

BEGIN WSMETHOD

Verso 12 31
Programao ADVPL WebService

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


cSoap += WSSoapValue("CPARAM", ::cCPARAM, cCPARAM , "string", .T. , .F., 0 , NIL, .F.)
cSoap += "</GETSERVERTTIME>"

oXmlRet := SvcSoapCall( Self,cSoap,;


"http://localhost:81/GETSERVERTTIME",;
"DOCUMENT","http://localhost:81/",,"1.031217",;
"http://localhost:81/SERVERTTIME.apw")

::Init()
::cGETSERVERTTIMERESULT := WSAdvValue(
oXmlRet,"_GETSERVERTTIMERESPONSE:_GETSERVERTTIMERESULT:TEXT","string",NIL,NIL,NIL,NIL,NIL
,NIL)

END WSMETHOD

oXmlRet := NIL
Return .T.

Entendendo o Codigo fonte do Client gerado pelo IDE

#include "Totvs.ch"
#include "Totvswebsrv.ch"

/* ===============================================================================
WSDL Location http://localhost:81/SERVERTTIME.apw?WSDL
Observaes Cdigo-Fonte gerado por ADVPL WSDL Client 1.111215
Alteraes neste arquivo podem causar funcionamento incorreto
e sero perdidas caso o cdigo-fonte seja gerado novamente.
=============================================================================== */

User Function _GGLXARK ; Return // "dummy" function - Internal Use

Este cdigo o IDE gera, informando os includes obrigatrias para o Client do WebService executar. Foi criada uma
funo User Function _GGLXARK aleatria para esse fonte, cujo nome poder ser alterado pelo usurio
posteriormente.

/* -------------------------------------------------------------------------------
WSDL Service WSSERVERTTIME
------------------------------------------------------------------------------- */

WSCLIENT WSSERVERTTIME

WSMETHOD NEW
WSMETHOD INIT
WSMETHOD RESET
WSMETHOD CLONE
WSMETHOD GETSERVERTTIME

WSDATA _URL AS String


WSDATA _HEADOUT AS Array of String

32 Verso 12
Programao ADVPL WebService

WSDATA _COOKIES AS Array of String


WSDATA cCPARAM AS string
WSDATA cGETSERVERTTIMERESULT AS string

ENDWSCLIENT

Essa parte inicializa a criao do client do WebService. Podemos notar que o nome do cliente do WebService
SERVERTTIME parecido com o nome do Client WSSERVERTTIME.

Vejamos que foram criados 4 mtodos que no existiam no prprio WebService.

WSMETHOD NEW
WSMETHOD INIT
WSMETHOD RESET
WSMETHOD CLONE

O mtodo criado pelo IDE NEW.

Trata-se de um processo de criao do objeto WebService para repassar todo o contedo do WebService gerado para
uma varivel definida pelo usurio.

WSMETHOD NEW WSCLIENT WSSERVERTTIME


::Init()
If !FindFunction("XMLCHILDEX")
UserException("O Cdigo-Fonte Client atual requer os executveis do Protheus Build
[7.00.111010P-20120314] ou superior. Atualize o Protheus ou gere o Cdigo-Fonte novamente utilizando o
Build atual.")
EndIf
Return Self

Pode, analisando o prprio mtodo, chamar outro mtodo gerado pelo IDE INIT.

Trata-se de um processo de criao do objeto WebService para disponibilizar a criao ou chamada de outros servios
disponvel no repositrio para complementar o WebService do cliente.

WSMETHOD INIT WSCLIENT WSSERVERTTIME


Return

Analisamos agora o Method RESET.

Trata-se de um processo de limpeza de variveis do WebService para que voc possa utiliz-lo novamente sem estar
com as informaes executadas anteriormente.

WSMETHOD RESET WSCLIENT WSSERVERTTIME


::cCPARAM := NIL
::cGETSERVERTTIMERESULT := NIL
::Init()
Return

Verso 12 33
Programao ADVPL WebService

Analisaremos agora o mtodo CLONE.

Tratamento de gerar uma nova varivel com o Objeto criado do WebService. Duplica a informao dos dados do
WebService.

WSMETHOD CLONE WSCLIENT WSSERVERTTIME


Local oClone := WSSERVERTTIME():New()
oClone:_URL := ::_URL
oClone:cCPARAM := ::cCPARAM
oClone:cGETSERVERTTIMERESULT := ::cGETSERVERTTIMERESULT
Return oClone

Analisaremos agora o mtodo GETSERVERTTIME.

Tratamento de executar o service disponvel pelo WebService e retornar o processo executado por ele, retornando na
varivel cGETSERVERTTIMERESULT.

WSMETHOD GETSERVERTTIME WSSEND cCPARAM WSRECEIVE cGETSERVERTTIMERESULT WSCLIENT


WSSERVERTTIME
Local cSoap := "" , oXmlRet

BEGIN WSMETHOD

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


cSoap += WSSoapValue("CPARAM", ::cCPARAM, cCPARAM , "string", .T. , .F., 0 , NIL, .F.)
cSoap += "</GETSERVERTTIME>"

oXmlRet := SvcSoapCall( Self,cSoap,;


"http://localhost:81/GETSERVERTTIME",;
"DOCUMENT","http://localhost:81/",,"1.031217",;
"http://localhost:81/SERVERTTIME.apw")

::Init()
::cGETSERVERTTIMERESULT:=WSAdvValue(oXmlRet,
"_GETSERVERTTIMERESPONSE:_GETSERVERTTIMERESULT:TEXT" , "string",NIL,NIL,NIL,NIL,NIL,NIL)

END WSMETHOD

oXmlRet := NIL
Return .T.

O cdigo fonte utiliza uma funo chamada WSSoapValue. Esta funo executa toda a estrutura do XML para dentro
do WebService, criando as suas respectivas tags que o mtodo solicitado exige.

Logo abaixo apresentada outra funo: WSADVVALUE, que retorna o valor que o WebService est disponibilizando.

Devemos compilar o cdigo fonte gerado pelo DevStudio e podemos fazer tratamentos de notificaes no Mtodo com
a funo SetSoapFault.

34 Verso 12
Programao ADVPL WebService

Exemplo:

WSMETHOD GetServerTTime WSRECEIVE cParam WSSEND Horrio WSSERVICE SERVERTTIME


Local nDay := dow( date() )
if nDay == 1 .Or. nDay == 7
SetSoapFault( "Metodo no disponvel", ;
"Este servio no funciona no fim de semana." )
Return .F.
Endif
::Horrio := TIME()
Return .T.

10. Consumo de servios


Aps gerar o client,devemos gerar um cdigo fonte User Function para capturar a informao disponvel do nosso
WebService.

#include Protheus.ch

User function XtempoX()


Local oBj := nil
oBj:= WSSERVERTIME():new()
oBj:GetServerTime()
MsgStop(oBj:cGetServerTimeResult)

Return()

Exemplo com o retorno das mensagens do Mtodo.:

If oObj := WSXSERVERTIME():NEW()
oObj:GETSERVERTIME(' ')
msgAlert( oObj:cGETSERVERTIMERESULT )
Else
cSvcError := GetWSCError() // Resumo do erro
cSoapFCode := GetWSCError(2) // Soap Fault Code
cSoapFDescr := GetWSCError(3) // Soap Fault Description
If ! empty(cSoapFCode)
// Caso a ocorrncia de erro esteja com o fault_code preenchido ,
// a mesma teve relao com a chamada do servio .
MsgStop(cSoapFDescr,cSoapFCode)
Else
// Caso a ocorrncia no tenha o soap_code preenchido
// Ela est relacionada a uma outra falha ,
// provavelmente local ou interna.
MsgStop(cSvcError,'FALHA INTERNA DE EXECUCAO DO SERVIO')
Endif
Endif
Return( NIL )

Verso 12 35
Programao ADVPL WebService

Vejamos o exemplo abaixo:

Exerccio

1. Crie um WebService que apresente a data de Hoje pelo sistema.


2. Crie um cliente para ler esse WebService.
3. Crie uma rotina para capturar a data do seu WebService e o horrio do WebService servertime.

11. TWsdlManager

A classe TWsdlManager faz o tratamento para arquivos WSDL (Web Services Description Language). Esta classe
implementa mtodos para identificao das informaes de envio e resposta das operaes definidas, alm de mtodos
para envio e recebimento do documento SOAP.

A classe trabalha com 2 tipos de dados: os tipos complexos, que so as sees do XML, e os tipos simples, que so as
tags que recebem valor. Por exemplo, numa operao de insero de clientes, a tag "cliente" um tipo complexo, pois
contm os dados do cliente dentro, e as uma tag "nome" um tipo simples, pois recebe diretamente um valor (no caso,
o nome do cliente).

TWsdlManager ir realizar o parse de um WSDL, seja por uma URL ou por arquivo, e ir montar internamente uma lista
com os tipos simples e outra com os tipos complexos. A lista de tipos complexos ter somente os tipos complexos que
tenham nmero varivel de ocorrncias. Por exemplo, se tiver 2 tipos complexos onde um deles tem mnimo de 1 e
mximo de 1, e outro com mnimo de 1 e mximo 2, s o que tem o valor mnimo diferente do valor mximo ir ser
listado.

Atravs do mtodo NextComplex possvel verificar quais so esses elementos de tipo complexo que necessitam de
definio do nmero de ocorrncias. Esse mtodo deve ser chamado em recurso, at no existirem mais elementos
retornados (ir retornar Nil). Para cada elemento retornado deve-se definir a quantidade de vezes que a tag ir aparecer
no XML final (SOAP). Para isso utiliza-se o mtodo SetComplexOccurs. Caso no seja especificado a quantidade de
vezes que a tag ir aparecer, a classe ir considerar a quantidade como 0 (zero).

Caso seja passado zero no mtodo SetComplexOccurs, ele ir marcar os elementos simples e complexos dentro da tag
para serem ignorados, o que far com que os elementos complexo internos no apaream no retorno do mtodo
NextComplex, e os elementos simples internos no sero retornados pelo mtodo SimpleInput.

36 Verso 12
Programao ADVPL WebService

Uma vez definida a quantidade de vezes que os tipos complexos iro aparecer na mensagem SOAP, podemos chamar
o mtodo SimpleInput, para retornar quais so os campos que iro receber valor. Os tipos simples podem ter seus
valores definidos atravs dos mtodos SetValue (para 1 valor apenas) ou SetValues (para mais de 1 valor). Para saber
a quantidade de valores aceitos pelo tipo simples s olhar a quantidade mnima e mxima informada no mtodo
SimpleInput, ndices 3 e 4 de cada tag, respectivamente.

Exemplo:

Local oWsdl
Local lOk
Local aOps := {}
Local aComplex := {}
Local aSimple := {}

// Cria o objeto da classe TWsdlManager


oWsdl := TWsdlManager():New()

// Faz o parse de uma URL


lOk := oWsdl:ParseURL( "http://localhost:90/ws/SERVERTIME.apw?WSDL" )
if lOk == .F.
MsgStop( oWsdl:cError , "ParseURL() ERROR")
Return
endif

// Lista os Metodos do servio


aOps := oWsdl:ListOperations()

// Seta a operao a ser utilizada listada pelo ListOperations nome do mtodo


//que ira executar.

lOk := oWsdl:SetOperation( "GETSERVERTIME" )

if !lOk
MsgStop( oWsdl:cError , "SetOperation(ConversionRate) ERROR")
Return
Endif

// Verifica o tipo de parametro que vai ser usado pelo mtodo, //retornando quais
// so os campos que iro receber valor

aComplex := oWsdl:NextComplex()
aSimple := oWsdl:SimpleInput()

// Passando os valores para o parametro do mtodo


xRet := oWsdl:SetValue( 0, "000" )

// Exibe a mensagem que ser enviada


conout( oWsdl:GetSoapMsg() )

// Faz a requisio ao WebService

Verso 12 37
Programao ADVPL WebService

lOk := oWsdl:SendSoapMsg()
if !lOk
MsgStop( oWsdl:cError , "SendSoapMsg() ERROR")
Return
endif

// Recupera os elementos de retorno, j parseados


cResp := oWsdl:GetParsedResponse()

// Monta um array com a resposta transformada, considerando


// as quebras de linha ( LF == Chr(10) )

aElem := StrTokArr(cResp,chr(10))
MsgInfo( SubStr(aElem[2], AT(":",aElem[2] )+1))

Return( NIL )

12. Criando um WEBSERVICE de Gravao

12.1. Definio de estrutura


A princpio, devemos definir uma estrutura adequada para a elaborao dos nossos servios e mtodos a serem
disponibilizados no nosso WebService.
Iremos gerar um WebService para a gravao de Clientes. Para isso, devemos saber quais so as empresas e filiais
disponveis e a forma que o Cliente ir nos enviar os dados para serem gravados nos bancos de dados da respectiva
empresa e filial.

Para saber para qual a empresa o cliente enviar os dados, ele dever saber qual a empresa e filial que possumos.

Devemos gerar um mtodo de apresentao de Empresa e Filial.


Demonstrar uma estrutura adequada para apresentar as empresas e filiais
Demostrar uma estrutura para receber os dados de Clientes
Demostrar uma estrutura para criticar a informao enviada pelo Client
Executar a gravao dos dados

1. Gerar um mtodo de apresentao de Empresa e Filial.

#include "Totvs.ch"
#include "Totvswebsrv.ch"

WsService CTT description "Treinamento do WebService para o Curso CTT"


Wsdata cCodEmp as String // cdigo da empresa
Wsdata aEmpresa as array of EstruturaEmp // estrutura inteira do sigamat.emp
Wsdata cRet as String // Mensagem de Retorno
WsMethod LISTAEMPRESA DESCRIPTION "APRESENTA TODOS OS DADOS DO SIGAMAT.EMP DO
CLIENTE"
EndWsservice

WsStruct EstruturaEmp
WsData M0_CODIGO As String

38 Verso 12
Programao ADVPL WebService

WsData M0_CODFIL As String


WsData M0_FILIAL As String
WsData M0_NOME As String
WsData M0_NOMECOM As String
WsData M0_ENDCOB As String
WsData M0_CIDCOB As String
WsData M0_ESTCOB As String
WsData M0_CEPCOB As String
WsData M0_ENDENT As String
WsData M0_CIDENT As String
WsData M0_ESTENT As String
WsData M0_CEPENT As String
WsData M0_CGC As String
WsData M0_INSC As String
WsData M0_TEL As String
WsData M0_EQUIP As String
WsData M0_SEQUENC As String
WsData M0_DOCSEQ As INTEGER
WsData M0_FAX As String
WsData M0_PRODRUR As String
WsData M0_BAIRCOB As String
WsData M0_BAIRENT As String
WsData M0_COMPCOB As String
WsData M0_COMPENT As String
WsData M0_TPINSC As Integer
WsData M0_CNAE As String
WsData M0_FPAS As String
WsData M0_ACTRAB As String
WsData M0_CODMUN As String
WsData M0_NATJUR As String
WsData M0_DTBASE As String
WsData M0_NUMPROP As Integer
WsData M0_MODEND As String
WsData M0_MODINSC As String
WsData M0_CAUSA As String
WsData M0_INSCANT As String
WsData M0_TEL_IMP As String
WsData M0_FAX_IMP As String
WsData M0_TEL_PO As String
WsData M0_FAX_PO As String
WsData M0_IMP_CON As String
WsData M0_CODZOSE As String
WsData M0_DESZOSE As String
WsData M0_COD_ATV As String
WsData M0_INS_SUF As String
WsData M0_EMERGEN As String
WsData M0_LIBMOD As String
WsData M0_TPESTAB As String
WsData M0_DTAUTOR As date
WsData M0_EMPB2B As String
WsData M0_CAIXA As String
WsData M0_LICENSA As String

Verso 12 39
Programao ADVPL WebService

WsData M0_CORPKEY As String


WsData M0_CHKSUM As Integer
WsData M0_DTVLD As date
WsData M0_PSW As String
WsData M0_CTPSW As String
WsData M0_INTCTRL As String
WsData M0_INSCM As String
WsData M0_NIRE As String
WsData M0_DTRE As date

WsData M0_CNES As String


WsData M0_PSWSTRT As String
WsData M0_DSCCNA As String
WsData M0_ASSPAT1 As String
WsData M0_ASSPAT2 As String
WsData M0_ASSPAT3 As String
WsData M0_SIZEFIL As Integer
WsData M0_LEIAUTE As String
WsData M0_PICTURE As String
WsData M0_STATUS As String
WsData M0_RNTRC As String
WsData M0_DTRNTRC As date
WsData X_MENSAGEM As String
EndWsStruct

WsMethod LISTAEMPRESA WsReceive cCodEmp WsSend aEmpresa WsService CTT


Local cEmp := "99"
Local cFil := "01"
Local aTab := {"SA1"}
Local aRet := {}
Local nDados := 0
RpcSetEnv(cEmp,cFil,,,'FIN','ListEmpresa',aTab)//abre a conexo com o banco e a empresa padro

if cCodEmp != 'Abrir'
::cRet := "Palavra Chave Invalida"
aadd(aEmpresa,WsClassNew("EstruturaEmp"))
aEmpresa[1]:M0_CODIGO := ""
aEmpresa[1]:M0_CODFIL := ""
aEmpresa[1]:M0_FILIAL := ""
aEmpresa[1]:M0_NOME := ""
aEmpresa[1]:M0_NOMECOM := ""
aEmpresa[1]:M0_ENDCOB := ""
aEmpresa[1]:M0_CIDCOB := ""
aEmpresa[1]:M0_ESTCOB := ""
aEmpresa[1]:M0_CEPCOB := ""
aEmpresa[1]:M0_ENDENT := ""
aEmpresa[1]:M0_CIDENT := ""
aEmpresa[1]:M0_ESTENT := ""
aEmpresa[1]:M0_CEPENT := ""
aEmpresa[1]:M0_CGC := ""
aEmpresa[1]:M0_INSC := ""
aEmpresa[1]:M0_TEL := ""

40 Verso 12
Programao ADVPL WebService

aEmpresa[1]:M0_EQUIP := ""
aEmpresa[1]:M0_SEQUENC := ""
aEmpresa[1]:M0_DOCSEQ := 0
aEmpresa[1]:M0_FAX := ""
aEmpresa[1]:M0_PRODRUR := ""
aEmpresa[1]:M0_BAIRCOB := ""
aEmpresa[1]:M0_BAIRENT := ""
aEmpresa[1]:M0_COMPCOB := ""
aEmpresa[1]:M0_COMPENT := ""
aEmpresa[1]:M0_TPINSC := 0
aEmpresa[1]:M0_CNAE := ""
aEmpresa[1]:M0_FPAS := ""
aEmpresa[1]:M0_ACTRAB := ""
aEmpresa[1]:M0_CODMUN := ""
aEmpresa[1]:M0_NATJUR := ""
aEmpresa[1]:M0_DTBASE := ""
aEmpresa[1]:M0_NUMPROP := 0
aEmpresa[1]:M0_MODEND := ""
aEmpresa[1]:M0_MODINSC := ""
aEmpresa[1]:M0_CAUSA := ""
aEmpresa[1]:M0_INSCANT := ""
aEmpresa[1]:M0_TEL_IMP := ""
aEmpresa[1]:M0_FAX_IMP := ""
aEmpresa[1]:M0_TEL_PO := ""
aEmpresa[1]:M0_FAX_PO := ""
aEmpresa[1]:M0_IMP_CON := ""
aEmpresa[1]:M0_CODZOSE := ""
aEmpresa[1]:M0_DESZOSE := ""
aEmpresa[1]:M0_COD_ATV := ""
aEmpresa[1]:M0_INS_SUF := ""
aEmpresa[1]:M0_EMERGEN := ""
aEmpresa[1]:M0_LIBMOD := ""
aEmpresa[1]:M0_TPESTAB := ""
aEmpresa[1]:M0_DTAUTOR := STOD("")
aEmpresa[1]:M0_EMPB2B := ""
aEmpresa[1]:M0_CAIXA := ""
aEmpresa[1]:M0_LICENSA := ""
aEmpresa[1]:M0_CORPKEY := ""
aEmpresa[1]:M0_CHKSUM := 0
aEmpresa[1]:M0_DTVLD := STOD("")
aEmpresa[1]:M0_PSW := ""
aEmpresa[1]:M0_CTPSW := ""
aEmpresa[1]:M0_INTCTRL := ""
aEmpresa[1]:M0_INSCM := ""
aEmpresa[1]:M0_NIRE := ""
aEmpresa[1]:M0_DTRE := STOD("")
aEmpresa[1]:M0_CNES := ""
aEmpresa[1]:M0_PSWSTRT := ""
aEmpresa[1]:M0_DSCCNA := ""
aEmpresa[1]:M0_ASSPAT1 := ""
aEmpresa[1]:M0_ASSPAT2 := ""
aEmpresa[1]:M0_ASSPAT3 := ""

Verso 12 41
Programao ADVPL WebService

aEmpresa[1]:M0_SIZEFIL := 0
aEmpresa[1]:M0_LEIAUTE := ""
aEmpresa[1]:M0_PICTURE := ""
aEmpresa[1]:M0_STATUS := ""
aEmpresa[1]:M0_RNTRC := ""
aEmpresa[1]:M0_DTRNTRC := STOD("")
aEmpresa[1]:X_MENSAGEM := ::cRet
Return .t.
endif

aRet := SM0->(GETAREA())

WHILE SM0->(!EOF())
nDados += 1
aadd(aEmpresa,WsClassNew("EstruturaEmp"))
aEmpresa[nDados]:M0_CODIGO := SM0->M0_CODIGO
aEmpresa[nDados]:M0_CODFIL := SM0->M0_CODFIL
aEmpresa[nDados]:M0_FILIAL := SM0->M0_FILIAL
aEmpresa[nDados]:M0_NOME := SM0->M0_NOME
aEmpresa[nDados]:M0_NOMECOM := SM0->M0_NOMECOM
aEmpresa[nDados]:M0_ENDCOB := SM0->M0_ENDCOB
aEmpresa[nDados]:M0_CIDCOB := SM0->M0_CIDCOB
aEmpresa[nDados]:M0_ESTCOB := SM0->M0_ESTCOB
aEmpresa[nDados]:M0_CEPCOB := SM0->M0_CEPCOB
aEmpresa[nDados]:M0_ENDENT := SM0->M0_ENDENT
aEmpresa[nDados]:M0_CIDENT := SM0->M0_CIDENT
aEmpresa[nDados]:M0_ESTENT := SM0->M0_ESTENT
aEmpresa[nDados]:M0_CEPENT := SM0->M0_CEPENT
aEmpresa[nDados]:M0_CGC := SM0->M0_CGC
aEmpresa[nDados]:M0_INSC := SM0->M0_INSC
aEmpresa[nDados]:M0_TEL := SM0->M0_TEL
aEmpresa[nDados]:M0_EQUIP := SM0->M0_EQUIP
aEmpresa[nDados]:M0_SEQUENC := SM0->M0_SEQUENC
aEmpresa[nDados]:M0_DOCSEQ := SM0->M0_DOCSEQ
aEmpresa[nDados]:M0_FAX := SM0->M0_FAX
aEmpresa[nDados]:M0_PRODRUR := SM0->M0_PRODRUR
aEmpresa[nDados]:M0_BAIRCOB := SM0->M0_BAIRCOB
aEmpresa[nDados]:M0_BAIRENT := SM0->M0_BAIRENT
aEmpresa[nDados]:M0_COMPCOB := SM0->M0_COMPCOB
aEmpresa[nDados]:M0_COMPENT := SM0->M0_COMPENT
aEmpresa[nDados]:M0_TPINSC := SM0->M0_TPINSC
aEmpresa[nDados]:M0_CNAE := SM0->M0_CNAE
aEmpresa[nDados]:M0_FPAS := SM0->M0_FPAS
aEmpresa[nDados]:M0_ACTRAB := SM0->M0_ACTRAB
aEmpresa[nDados]:M0_CODMUN := SM0->M0_CODMUN
aEmpresa[nDados]:M0_NATJUR := SM0->M0_NATJUR
aEmpresa[nDados]:M0_DTBASE := SM0->M0_DTBASE
aEmpresa[nDados]:M0_NUMPROP := SM0->M0_NUMPROP
aEmpresa[nDados]:M0_MODEND := SM0->M0_MODEND
aEmpresa[nDados]:M0_MODINSC := SM0->M0_MODINSC
aEmpresa[nDados]:M0_CAUSA := SM0->M0_CAUSA
aEmpresa[nDados]:M0_INSCANT := SM0->M0_INSCANT

42 Verso 12
Programao ADVPL WebService

aEmpresa[nDados]:M0_TEL_IMP := SM0->M0_TEL_IMP
aEmpresa[nDados]:M0_FAX_IMP := SM0->M0_FAX_IMP
aEmpresa[nDados]:M0_TEL_PO := SM0->M0_TEL_PO
aEmpresa[nDados]:M0_FAX_PO := SM0->M0_FAX_PO
aEmpresa[nDados]:M0_IMP_CON := SM0->M0_IMP_CON
aEmpresa[nDados]:M0_CODZOSE := SM0->M0_CODZOSE
aEmpresa[nDados]:M0_DESZOSE := SM0->M0_DESZOSE
aEmpresa[nDados]:M0_COD_ATV := SM0->M0_COD_ATV
aEmpresa[nDados]:M0_INS_SUF := SM0->M0_INS_SUF
aEmpresa[nDados]:M0_EMERGEN := SM0->M0_EMERGEN
aEmpresa[nDados]:M0_LIBMOD := SM0->M0_LIBMOD
aEmpresa[nDados]:M0_TPESTAB := SM0->M0_TPESTAB
aEmpresa[nDados]:M0_DTAUTOR := SM0->M0_DTAUTOR
aEmpresa[nDados]:M0_EMPB2B := SM0->M0_EMPB2B
aEmpresa[nDados]:M0_CAIXA := SM0->M0_CAIXA
aEmpresa[nDados]:M0_LICENSA := SM0->M0_LICENSA
aEmpresa[nDados]:M0_CORPKEY := SM0->M0_CORPKEY
aEmpresa[nDados]:M0_CHKSUM := SM0->M0_CHKSUM
aEmpresa[nDados]:M0_DTVLD := SM0->M0_DTVLD
aEmpresa[nDados]:M0_PSW := SM0->M0_PSW
aEmpresa[nDados]:M0_CTPSW := SM0->M0_CTPSW
aEmpresa[nDados]:M0_INTCTRL := SM0->M0_INTCTRL
aEmpresa[nDados]:M0_INSCM := SM0->M0_INSCM
aEmpresa[nDados]:M0_NIRE := SM0->M0_NIRE
aEmpresa[nDados]:M0_DTRE := SM0->M0_DTRE
aEmpresa[nDados]:M0_CNES := SM0->M0_CNES
aEmpresa[nDados]:M0_PSWSTRT := SM0->M0_PSWSTRT
aEmpresa[nDados]:M0_DSCCNA := SM0->M0_DSCCNA
aEmpresa[nDados]:M0_ASSPAT1 := SM0->M0_ASSPAT1
aEmpresa[nDados]:M0_ASSPAT2 := SM0->M0_ASSPAT2
aEmpresa[nDados]:M0_ASSPAT3 := SM0->M0_ASSPAT3
aEmpresa[nDados]:M0_SIZEFIL := SM0->M0_SIZEFIL
aEmpresa[nDados]:M0_LEIAUTE := SM0->M0_LEIAUTE
aEmpresa[nDados]:M0_PICTURE := SM0->M0_PICTURE
aEmpresa[nDados]:M0_STATUS := SM0->M0_STATUS
aEmpresa[nDados]:M0_RNTRC := SM0->M0_RNTRC
aEmpresa[nDados]:M0_DTRNTRC := SM0->M0_DTRNTRC
aEmpresa[nDados]:X_MENSAGEM := "Sucesso "+strzero(nDados,2)
SM0->(DBSKIP())
END

RESTAREA(aRet)

Verso 12 43
Programao ADVPL WebService

2. Criamos o WebService Chamado CTT

No primeiro momento, veremos o cdigo da declarao do WebService:

WsService CTT description "Treinamento do WebService para o Curso CTT"


Wsdata cCodEmp as String // cdigo da empresa
Wsdata aEmpresa as array of EstruturaEmp // estrutura inteira do sigamat.emp
Wsdata cRet as String // Mensagem de Retorno
WsMethod LISTAEMPRESA DESCRIPTION "APRESENTA TODOS OS DADOS DO SIGAMAT.EMP DO
CLIENTE"
EndWsservice

Este cdigo apresenta a criao do WebService chamado CTT apresentando a Descrio "Treinamento do WebService
para o Curso CTT".

Criao das variveis:

Wsdata cCodEmp as String // cdigo da empresa


Wsdata aEmpresa as array of EstruturaEmp // estrutura inteira do sigamat.emp
Wsdata cRet as String // Mensagem de Retorno

Podemos observar que a varivel AEMPRESA ser um array com a estrutura definida pelo mtodo wsstruct:

WsStruct EstruturaEmp
WsData M0_CODIGO As String
WsData M0_CODFIL As String
WsData M0_FILIAL As String
WsData M0_NOME As String
WsData M0_NOMECOM As String
WsData M0_ENDCOB As String
WsData M0_CIDCOB As String
WsData M0_ESTCOB As String
WsData M0_CEPCOB As String
WsData M0_ENDENT As String
WsData M0_CIDENT As String
WsData M0_ESTENT As String
WsData M0_CEPENT As String
WsData M0_CGC As String
WsData M0_INSC As String
WsData M0_TEL As String
WsData M0_EQUIP As String
WsData M0_SEQUENC As String
WsData M0_DOCSEQ As INTEGER
WsData M0_FAX As String
WsData M0_PRODRUR As String
WsData M0_BAIRCOB As String
WsData M0_BAIRENT As String
WsData M0_COMPCOB As String
WsData M0_COMPENT As String
WsData M0_TPINSC As Integer
WsData M0_CNAE As String

44 Verso 12
Programao ADVPL WebService

WsData M0_FPAS As String


WsData M0_ACTRAB As String
WsData M0_CODMUN As String
WsData M0_NATJUR As String
WsData M0_DTBASE As String
WsData M0_NUMPROP As Integer
WsData M0_MODEND As String
WsData M0_MODINSC As String
WsData M0_CAUSA As String
WsData M0_INSCANT As String
WsData M0_TEL_IMP As String
WsData M0_FAX_IMP As String
WsData M0_TEL_PO As String
WsData M0_FAX_PO As String
WsData M0_IMP_CON As String
WsData M0_CODZOSE As String
WsData M0_DESZOSE As String
WsData M0_COD_ATV As String
WsData M0_INS_SUF As String
WsData M0_EMERGEN As String
WsData M0_LIBMOD As String
WsData M0_TPESTAB As String
WsData M0_DTAUTOR As date
WsData M0_EMPB2B As String
WsData M0_CAIXA As String
WsData M0_LICENSA As String
WsData M0_CORPKEY As String
WsData M0_CHKSUM As Integer
WsData M0_DTVLD As date
WsData M0_PSW As String
WsData M0_CTPSW As String
WsData M0_INTCTRL As String
WsData M0_INSCM As String
WsData M0_NIRE As String
WsData M0_DTRE As date
WsData M0_CNES As String
WsData M0_PSWSTRT As String
WsData M0_DSCCNA As String
WsData M0_ASSPAT1 As String
WsData M0_ASSPAT2 As String
WsData M0_ASSPAT3 As String
WsData M0_SIZEFIL As Integer
WsData M0_LEIAUTE As String
WsData M0_PICTURE As String
WsData M0_STATUS As String
WsData M0_RNTRC As String
WsData M0_DTRNTRC As date
WsData X_MENSAGEM As String
EndWsStruct

Nesse Mtodo, esto sendo apresentados todos campos do Sigamat.emp. Por fim, ser criado um array e cada vetor
desse array ser o campo apresentado como varivel na estrutura.

Verso 12 45
Programao ADVPL WebService

Essa estrutura ir montar um XML com o nome de cada varivel:

<aEmpresa>
<M0_CODIGO>01</M0_CODIGO>
Etc...
</aEmpresa>

Logo abaixo, foi criado o mtodo de listar empresa, um servio que ir ler o sigamat e apresentar quantas empresas
temos no sigamat.emp para o cliente

WsMethod LISTAEMPRESA DESCRIPTION "APRESENTA TODOS OS DADOS DO SIGAMAT.EMP DO CLIENTE"

2.1 Foi criado o Mtodo, disponibilizando o servio proposto de apresentar as empresas:

WsMethod LISTAEMPRESA WsReceive cCodEmp WsSend aEmpresa WsService CTT

Local cEmp := "99"


Local cFil := "01"
Local aTab := {"SA1"}
Local aRet := {}
Local nDados := 0
RpcSetEnv(cEmp,cFil,,,'FIN','ListEmpresa',aTab)//abre a conexo com o banco e a empresa padro

if cCodEmp != 'Abrir'
::cRet := "Palavra Chave Invalida"
aadd(aEmpresa,WsClassNew("EstruturaEmp"))

A apresentao deste mtodo segue a seguinte regra:

WsReceive cCodEmp: estou recebendo um cdigo

WsSend aEmpresa: Estou devolvendo um array com dados

WsService CTT: Estou utilizando os mtodos e variveis do WebService CTT

Aps validar a informao da chave cCodEmp que definimos, dever ser aberto o sistema que analisa se a palavra
est ou no correta.

Caso no esteja correta, ele entra no IF alimenta a varivel ::cRet com a frase Palavra Chave Invlida.

Cria o Array aEmpresa com a estrutura definida anteriormente aadd(aEmpresa,WsClassNew("EstruturaEmp")). Aps


isso, o Array ficara delimitado a somente essas colunas,sendo obrigatrio o seu preenchimento.

2.2 Se a palavra chave estiver correta, o sistema abre a tabela de empresa SM0 Sigamat.emp e comea a
fazer um loop correndo todos os registros encontrados nessa tabela.

WHILE SM0->(!EOF())
nDados += 1
aadd(aEmpresa,WsClassNew("EstruturaEmp"))

46 Verso 12
Programao ADVPL WebService

aEmpresa[nDados]:M0_CODIGO := SM0->M0_CODIGO
aEmpresa[nDados]:M0_CODFIL := SM0->M0_CODFIL
aEmpresa[nDados]:M0_FILIAL := SM0->M0_FILIAL
aEmpresa[nDados]:M0_NOME := SM0->M0_NOME
aEmpresa[nDados]:M0_NOMECOM := SM0->M0_NOMECOM
aEmpresa[nDados]:M0_ENDCOB := SM0->M0_ENDCOB
aEmpresa[nDados]:M0_CIDCOB := SM0->M0_CIDCOB
aEmpresa[nDados]:M0_ESTCOB := SM0->M0_ESTCOB
aEmpresa[nDados]:M0_CEPCOB := SM0->M0_CEPCOB
aEmpresa[nDados]:M0_ENDENT := SM0->M0_ENDENT
aEmpresa[nDados]:M0_CIDENT := SM0->M0_CIDENT
aEmpresa[nDados]:M0_ESTENT := SM0->M0_ESTENT
aEmpresa[nDados]:M0_CEPENT := SM0->M0_CEPENT
aEmpresa[nDados]:M0_CGC := SM0->M0_CGC
aEmpresa[nDados]:M0_INSC := SM0->M0_INSC
aEmpresa[nDados]:M0_TEL := SM0->M0_TEL
aEmpresa[nDados]:M0_EQUIP := SM0->M0_EQUIP
aEmpresa[nDados]:M0_SEQUENC := SM0->M0_SEQUENC
aEmpresa[nDados]:M0_DOCSEQ := SM0->M0_DOCSEQ
aEmpresa[nDados]:M0_FAX := SM0->M0_FAX
aEmpresa[nDados]:M0_PRODRUR := SM0->M0_PRODRUR
aEmpresa[nDados]:M0_BAIRCOB := SM0->M0_BAIRCOB
aEmpresa[nDados]:M0_BAIRENT := SM0->M0_BAIRENT
aEmpresa[nDados]:M0_COMPCOB := SM0->M0_COMPCOB
aEmpresa[nDados]:M0_COMPENT := SM0->M0_COMPENT
aEmpresa[nDados]:M0_TPINSC := SM0->M0_TPINSC
aEmpresa[nDados]:M0_CNAE := SM0->M0_CNAE
aEmpresa[nDados]:M0_FPAS := SM0->M0_FPAS
aEmpresa[nDados]:M0_ACTRAB := SM0->M0_ACTRAB
aEmpresa[nDados]:M0_CODMUN := SM0->M0_CODMUN
aEmpresa[nDados]:M0_NATJUR := SM0->M0_NATJUR
aEmpresa[nDados]:M0_DTBASE := SM0->M0_DTBASE
aEmpresa[nDados]:M0_NUMPROP := SM0->M0_NUMPROP
aEmpresa[nDados]:M0_MODEND := SM0->M0_MODEND
aEmpresa[nDados]:M0_MODINSC := SM0->M0_MODINSC
aEmpresa[nDados]:M0_CAUSA := SM0->M0_CAUSA
aEmpresa[nDados]:M0_INSCANT := SM0->M0_INSCANT
aEmpresa[nDados]:M0_TEL_IMP := SM0->M0_TEL_IMP
aEmpresa[nDados]:M0_FAX_IMP := SM0->M0_FAX_IMP
aEmpresa[nDados]:M0_TEL_PO := SM0->M0_TEL_PO
aEmpresa[nDados]:M0_FAX_PO := SM0->M0_FAX_PO
aEmpresa[nDados]:M0_IMP_CON := SM0->M0_IMP_CON
aEmpresa[nDados]:M0_CODZOSE := SM0->M0_CODZOSE
aEmpresa[nDados]:M0_DESZOSE := SM0->M0_DESZOSE
aEmpresa[nDados]:M0_COD_ATV := SM0->M0_COD_ATV
aEmpresa[nDados]:M0_INS_SUF := SM0->M0_INS_SUF
aEmpresa[nDados]:M0_EMERGEN := SM0->M0_EMERGEN
aEmpresa[nDados]:M0_LIBMOD := SM0->M0_LIBMOD
aEmpresa[nDados]:M0_TPESTAB := SM0->M0_TPESTAB
aEmpresa[nDados]:M0_DTAUTOR := SM0->M0_DTAUTOR
aEmpresa[nDados]:M0_EMPB2B := SM0->M0_EMPB2B
aEmpresa[nDados]:M0_CAIXA := SM0->M0_CAIXA

Verso 12 47
Programao ADVPL WebService

aEmpresa[nDados]:M0_LICENSA := SM0->M0_LICENSA
aEmpresa[nDados]:M0_CORPKEY := SM0->M0_CORPKEY
aEmpresa[nDados]:M0_CHKSUM := SM0->M0_CHKSUM
aEmpresa[nDados]:M0_DTVLD := SM0->M0_DTVLD
aEmpresa[nDados]:M0_PSW := SM0->M0_PSW
aEmpresa[nDados]:M0_CTPSW := SM0->M0_CTPSW
aEmpresa[nDados]:M0_INTCTRL := SM0->M0_INTCTRL
aEmpresa[nDados]:M0_INSCM := SM0->M0_INSCM
aEmpresa[nDados]:M0_NIRE := SM0->M0_NIRE
aEmpresa[nDados]:M0_DTRE := SM0->M0_DTRE
aEmpresa[nDados]:M0_CNES := SM0->M0_CNES
aEmpresa[nDados]:M0_PSWSTRT := SM0->M0_PSWSTRT
aEmpresa[nDados]:M0_DSCCNA := SM0->M0_DSCCNA
aEmpresa[nDados]:M0_ASSPAT1 := SM0->M0_ASSPAT1
aEmpresa[nDados]:M0_ASSPAT2 := SM0->M0_ASSPAT2
aEmpresa[nDados]:M0_ASSPAT3 := SM0->M0_ASSPAT3
aEmpresa[nDados]:M0_SIZEFIL := SM0->M0_SIZEFIL
aEmpresa[nDados]:M0_LEIAUTE := SM0->M0_LEIAUTE
aEmpresa[nDados]:M0_PICTURE := SM0->M0_PICTURE
aEmpresa[nDados]:M0_STATUS := SM0->M0_STATUS
aEmpresa[nDados]:M0_RNTRC := SM0->M0_RNTRC
aEmpresa[nDados]:M0_DTRNTRC := SM0->M0_DTRNTRC
aEmpresa[nDados]:X_MENSAGEM := "Sucesso "+strzero(nDados,2)
SM0->(DBSKIP())
END

48 Verso 12
Programao ADVPL WebService

Verso 12 49
Programao ADVPL WebService

Exerccio

1. Crie um WebService buscando os dados da tabela de clientes com a parametrizao de quantos


registros devem ser apresentados.

3. Agora, iremos criar um outro WebService para gravar clientes na empresa desejada. Para isso, devemos criar
a estrutura que ir receber os dados, retornar, posteriormente, erros encontrados na estrutura enviada para o
WebService e executar a gravao.

3.1 Vamos analisar o cdigo fonte:

WSMETHOD GRAVACLIENTE WSRECEIVE ACLIENTE,CCPF,_cEmp,_cFil WSSEND CREGSA1 WSSERVICE


CTT
Local cEmp := _cEmp
Local cFil := _cFil
Local aTab := {"SA1"}
Local cPdCpf := ""
Local aDat := {}
Local aSa1Stru := {}
Local aComplem := {}
Local cCodigo := ""
Local cLoja := ""
Local NOPC := 3
Local bQuery := {|X| Iif(Select(X) > 0, (X)->(dbCloseArea()), Nil),;

50 Verso 12
Programao ADVPL WebService

dbUseArea(.T.,"TOPCONN",TCGENQRY(,,cQuery),X,.F.,.T.),;
WSMETHOD GRAVACLIENTE WSRECEIVE ACLIENTE,CCPF,_cEmp,_cFil WSSEND CREGSA1 WSSERVICE
CTT
Local cEmp := _cEmp
Local cFil := _cFil
Local aTab := {"SA1"}
Local cPdCpf := ""
Local aDat := {}
Local aSa1Stru := {}
Local aComplem := {}
Local cCodigo := ""
Local cLoja := ""
Local NOPC := 3
Local bQuery := {|X| Iif(Select(X) > 0, (X)->(dbCloseArea()), Nil),;
dbUseArea(.T.,"TOPCONN",TCGENQRY(,,cQuery),X,.F.,.T.),;
dbSelectArea(X),;
(X)->(dbGoTop())}
Private lMsErroauto := .f.
Private lMsHelpAuto := .f.
Private lautoErrNoFile := .T.
Podemos observer que definimos 4 variveis que iremos receber do client
ACLIENTE Estrutura criada dos dados necessaries para receber do cliente a informao para ser gravada
no Protheus
CCPF variavel do CPF do cliente para analise se ja existe na base de dados, caso exista ser atualizado
com os dados novos
_cEmp - Empresa que o cliente deve ser inserido
_cFil Filial da empresa que o cliente deve ser inserido

Declarao
WSDATA ACLIENTE AS CLIENTES // ESTRUTURA DE DADOS RECEBIDOS DO CLIENTE
WsData _cEmp as String
WsData _cFil as String
WSDATA CREGSA1 AS string // RETORNO DA MENSAGEM DO EXECAUTO
WSDATA CCPF AS string // VARIAVEL PARA RECEBER O CPF DO CLIENTE
// "CONFERENCIA SE JA EXISTE""

Criao da estrutura
WsStruct CLIENTES
WsData A1_COD as String
WsData A1_LOJA as String
WsData A1_NOME as String
WsData A1_NREDUZ as String
WsData A1_END as String
WsData A1_MUN as String
WsData A1_CGC as String
WsData A1_INSCRM as String
WsData A1_EMAIL as String
WsData A1_PAIS as String
WsData A1_ATIVO as String
WsData A1_CODPAIS as String
WsData A1_SISTORI as String
WsData A1_PESSOA as String

Verso 12 51
Programao ADVPL WebService

WsData A1_TIPO as String


WsData A1_ESTADO as String
WsData A1_EST as String
WsData A1_COD_MUN as String
WsData A1_ENDNUM as String
WsData A1_BAIRRO as String
WsData A1_CEP as String
EndWsStruct

Rotina para abrir a empresa e filial juntamente com as tabelas desejadas:

RpcSetEnv(cEmp,cFil,,,'FIN','ListEmpresa',aTab) //abre a conexo com o banco e a empresa padro

4. Esta parte do cdigo apresenta a anlise de importao, que possui uma regra de alimentar a varivel
::ACLIENTE utilizando WsClassNew (funo de criao de uma estrutura existente no WebService).

cPdCpf := tamsx3("A1_CGC")[1]

//--Cria estrutura de retorno


::ACLIENTE := WsClassNew( 'CLIENTES' )

DBSELECTAREA("SA1")
SA1->(DBSETORDER(3))

IF SA1->(DBSEEK(XFILIAL("SA1")+PADR(CCPF,cPdCpf)))
NOPC := 4
cCodigo := SA1->A1_COD
cLoja := SA1->A1_LOJA
ENDIF
//
//iniciando a gravao do cadastro do cliente
//
AADD(aSa1Stru,{'A1_COD', "C",6,0})
AADD(aSa1Stru,{'A1_LOJA', "C",2,0})
AADD(aSa1Stru,{'A1_NOME', "C",50,0})
AADD(aSa1Stru,{'A1_NREDUZ', "C",40,0})
AADD(aSa1Stru,{'A1_END', "C",50,0})
AADD(aSa1Stru,{'A1_MUN', "C",10,0})
AADD(aSa1Stru,{'A1_COD_MUN', "C",10,0})
AADD(aSa1Stru,{'A1_PESSOA', "C",10,0})
AADD(aSa1Stru,{'A1_CGC', "C",20,0})
AADD(aSa1Stru,{'A1_INSCRM', "C",30,0})
AADD(aSa1Stru,{'A1_EMAIL', "C",50,0})
AADD(aSa1Stru,{'A1_ATIVO', "C",50,0})
AADD(aSa1Stru,{'A1_CODPAIS', "C",50,0})
AADD(aSa1Stru,{'A1_PAIS', "C",50,0})
AADD(aSa1Stru,{'A1_SISTORI', "C",60,0})
AADD(aSa1Stru,{'A1_TIPO', "C",60,0})
AADD(aSa1Stru,{'A1_ESTADO', "C",60,0})
AADD(aSa1Stru,{'A1_EST', "C",60,0})
AADD(aSa1Stru,{'A1_ENDNUM', "C",60,0})
AADD(aSa1Stru,{'A1_BAIRRO', "C",60,0})

52 Verso 12
Programao ADVPL WebService

AADD(aSa1Stru,{'A1_CEP', "C",60,0})

//

//Analisa se existe outros campos obrigatorio que no estava na estrutura
//campo adicionado posteriormente a sua criao do web services
//

SX3->(DBSETORDER(1))
SX3->(DBSEEK("SA1"))
WHILE SX3->(!EOF()) .AND. SX3->X3_ARQUIVO == "SA1"
IF aScan(aSa1Stru,{|X| alltrim(x[1]) == alltrim(SX3->X3_CAMPO)})=0 .AND. X3OBRIGAT(SX3-
>X3_CAMPO) //ANALISA SE E OBRIGATORIO E SE NO ESTA NA LISTA
AADD(aComplem,{alltrim(SX3->X3_CAMPO),SX3->X3_TIPO, SX3->X3_TAMANHO, SX3-
>X3_DECIMAL}) // CAMPO ADICIONADO
ENDIF
SX3->(DBSKIP())
END
//
//Regra de gravao do Array Recebido
//

aEval(aSa1Stru,{|x| ;
aadd(aDat,{ x[1],;
iif(valtype(&('ACLIENTE:'+x[1]))!="U",&('ACLIENTE:'+x[1]),;
iif(x[2]=='C',CRIAVAR(x[1]),;
iif(x[2]=='D',DATE(),;
iif(x[2]=='N',1,;
iif(x[2]=='L',.F.," "))))) ,;
nil });
})

//

//Tratamento para os campos que passaram a ser obrigatorios apos a criao do WebService
//

aEval(aComplem,{|x| aadd(aDat,{ x[1],CRIAVAR(x[1]),nil }) })

4.1 Esta parte do cdigo fonte captura a posio do array onde esta o cdigo do cliente e sua respectiva loja para
poder adicionar o novo cdigo, buscando pela rotina padro do GETSXENUM() .Caso o cdigo do cliente ou
sua loja sejam alterados, sero adicionados no array, para poder atualizar o registro.
Aps esta parte o sistema localiza o numero do cdigo do municpio utilizando a query e no final analisa os
campos que estiverem vazios, executando as informaes contidas na estrutura do sx3 X3_RELACAO
(Inicializador Padro).

//

//Regra de identificao dos campos para adicionar informaes proprias do Sistema
//

Verso 12 53
Programao ADVPL WebService

nA1COD := aScan(adat,{|x| alltrim(x[1])== 'A1_COD'})


nA1LOJ := aScan(adat,{|x| alltrim(x[1])== 'A1_LOJA'})
if nA1COD>0
IF NOPC ==3
cCodigo := GETSXENUM("SA1","A1_COD")
CONFIRMSX8()
cLoja := CRIAVAR("A1_LOJA")
ENDIF
ADAT[nA1COD][2] := cCodigo
ADAT[nA1LOJ][2] := cLoja
ENDIF

nA1FILI := aScan(adat,{|x| alltrim(x[1])== 'A1_FILIAL'})


if nA1FILI>0
ADAT[nA1FILI][2] := XFILIAL('SA1')
ENDIF

nA1CGC := aScan(adat,{|x| alltrim(x[1])== 'A1_CGC'})


if nA1CGC>0
ADAT[nA1CGC][2] := CCPF
ENDIF

nA1EST := aScan(adat,{|x| alltrim(x[1])== 'A1_EST'})


nA1MUN := aScan(adat,{|x| alltrim(x[1])== 'A1_MUN'})
nA1CDMUN := aScan(adat,{|x| alltrim(x[1])== 'A1_COD_MUN'})
if nA1CDMUN>0

cQuery := "SELECT A.CC2_CODMUN FROM "+RETSQLNAME("CC2")+" A WHERE A.CC2_FILIAL =


'"+xFilial("CC2")+"' AND A.CC2_EST = '"+alltrim(ADAT[nA1EST][2])+"' AND A.CC2_MUN =
'"+alltrim(ADAT[nA1MUN][2])+"' and D_E_L_E_T_ = ' '"
X := "TMP"
CONOUT(cQuery)
Eval(bQuery,"TMP")
ADAT[nA1CDMUN][2]:= TMP->CC2_CODMUN
// A1_EST := alltrim(ADAT[nA1EST][2])
ENDIF

nA1CPAIS := aScan(adat,{|x| alltrim(x[1])== 'A1_CODPAIS'})


nA1PAIS := aScan(adat,{|x| alltrim(x[1])== 'A1_PAIS'})
if nA1CPAIS>0 .AND. nA1PAIS>0
ADAT[nA1CPAIS][2] :=
posicione("CCH",2,XFILIAL("CCH")+UPPER(ADAT[nA1PAIS][2]),"CCH_PAIS")
ENDIF

nA1PAIS := aScan(adat,{|x| alltrim(x[1])== 'A1_PAIS'})


if nA1PAIS>0
ADAT[nA1PAIS][2] :=
posicione("SYA",2,XFILIAL("SYA")+UPPER(ADAT[nA1PAIS][2]),"YA_CODGI")
PRIVATE M->A1_PAIS := ADAT[nA1PAIS][2]
ENDIF

SX3->(DBSETORDER(2))

54 Verso 12
Programao ADVPL WebService

For nFor := 1 to len(aDat)


if empty(aDat[nFor][2])
SX3->(DBSEEK(aDat[nFor][1]))
aDat[nFor][2] := &(SX3->X3_RELACAO)
endif
Next nFor

5. A parte informada abaixo representa a normalizao dos dados apresentados pelo client, quando o sistema ir
fazer a converso de dados para o sucesso da gravao. Caso os campos apresentados no estejam na
estrutura do sx3, o sistema ir limpar a varivel DAT para poder executar o EXECAUTO sem ERRO.

//
//Normalizando os Dados
//
aDeletar := {}
For nFor2 := 1 to len(adat)
if VALTYPE(adat[nFor2])<> "U"
nLin := aScan(aSa1Stru,{|x| alltrim(x[1]) == alltrim(adat[nFor2][1])})
if nLin<= 0 .OR. EMPTY(adat[nFor2][2])
aadd(aDeletar,nFor2)
else
if valtype(adat[nFor2][2]) != aSa1Stru[nLin][2]
if empty(adat[nFor2][2])
do case
case aSa1Stru[nLin][2] == 'D'
adat[nFor2][2] := stod('')
case aSa1Stru[nLin][2] == 'N'
adat[nFor2][2] := 0
case aSa1Stru[nLin][2] == 'C'
adat[nFor2][2] := padr(" ",TAMSX3(adat[nFor2][1])[1])
case aSa1Stru[nLin][2] == 'L'
adat[nFor2][2] := .F.
case aSa1Stru[nLin][2] == 'M'
adat[nFor2][2] := " "
endcase
else
do case
case aSa1Stru[nLin][2] == 'D'
adat[nFor2][2] :=
iif(empty(stod(adat[nFor2][2])),ctod(adat[nFor2][2]),stod(adat[nFor2][2]))
case aSa1Stru[nLin][2] == 'N'
adat[nFor2][2] := VAL(adat[nFor2][2])
case aSa1Stru[nLin][2] == 'C'
adat[nFor2][2] := cValtochar(adat[nFor2][2])
case aSa1Stru[nLin][2] == 'L'
adat[nFor2][2] :=
iif(upper(adat[nFor2][2])=='.F.',.f.,.t.)
case aSa1Stru[nLin][2] == 'M'
adat[nFor2][2] := cValtochar(adat[nFor2][2])
endcase
endif
ELSE

Verso 12 55
Programao ADVPL WebService

IF valtype(adat[nFor2][2]) == 'C'
adat[nFor2][2] := PADR(adat[nFor2][2],TAMSX3(adat[nFor2][1])[1])
ENDIF
endif
endif
endif
Next nfor2
//VARINFO('ADAT',ADAT)
FOR nFor2 := len(aDeletar) to 1 step -1
adel(aDat,aDeletar[nFor2])
next nFor2
//VARINFO('ADAT',ADAT)

aDat := asize(aDat,len(aDat)-len(aDeletar))
DBSELECTAREA("SA1")
nQtdDel := 0

6. E por fim a gravao dos dados recebidos pelo client na execuo do EXECAUTO.
Podemos ver que foi definida a funo BeginTran() que garante que, se as rotinas apresentarem algum tipo de
erro,o sistema no grave os dados.
A execuo do MSEXECAUTO para a funo MATA030 faz a gravao da varivel aDat preenchida
anteriormente e sua opo de gravao NOPC:
nOpc = 3 Incluso
nOpc = 4 Alterao
nOpc = 5 Excluso

Aps o execauto, verifica-se se a rotina pado gerou algum tipo de erro, alimentando a varivel lMsErroauto.Caso a
informao contida nela for verdadeira, ocorre a execuo da funo DisarmTransaction() que representa o rollback
das informaes gravadas pela metade. Para a captura da mensagem de erro, usamos a funo GETAUTOGRLOG()
em que fizemos o tratamento para ser apresentada em uma string.

Se a varivel for falsa, o sistema executa a funo EndTran(), que encerra a gravao, gravando todos os dados
informados e apresenta a informao de SUCESSO.

BeginTran()
//VARINFO('aDat',aDat)
//
//gravao de dados do Cliente
//
MSEXECAUTO( {|X,Y| MATA030(X,Y) },adat,NOPC)
IF lMsErroauto
//
//disarma a transao
//
nPx := 0
DisarmTransaction()
aAutoErro := GETAUTOGRLOG()
cMsg := ""
IF LEN(aAutoErro)>=2
cCpox := '- '+alltrim(substr(aAutoErro[1],at('_',aAutoErro[1])-2,10))
nPx := aScan(aAutoErro,{|W| cCpox$W })

56 Verso 12
Programao ADVPL WebService

if nPx<=0
nPx := aScan(aAutoErro,{|W| '< -- '$W })
endif
ENDIF
nTotV := iif(len(aAutoErro)>20,20,len(aAutoErro))
For nFor1 := 1 to nTotV
if !empty(alltrim(STRTRAN(STRTRAN(aAutoErro[nFor1],"'",'"'),'---','')))
cMsg +=
U_TIRACENTO(alltrim(STRTRAN(STRTRAN(aAutoErro[nFor1],"'",'"'),'---','')))+CRLF
endif
nExt nfor1
if nPx>0
cMsg += U_TIRACENTO(alltrim(STRTRAN(STRTRAN(aAutoErro[nPx],"'",'"'),'---
','')))+CRLF
endif
::CREGSA1:= "ERRO AO GRAVAR O CLIENTE:"+CRLF+cMsg
ELSE
EndTran()
::CREGSA1:= "SUCESSO CODIGO DO CLIENTE:"+cCodigo
ENDIF

RETURN .T.

No ato da execuo, o sistema apresenta a informao no console o XML gerado para o WebService.

Verso 12 57
Programao ADVPL WebService

Exerccio

1. Crie um client buscando do endereo do WebService da totvs endereo (endereo da totvs


webservice) e alimente a sua base de dados com os dados desse client distribuido pela Totvs
tabela SA1.

58 Verso 12
Programao ADVPL WebService

13. APNDICES

13.1. GUIA DE REFERNCIA RPIDA: Funes e Erros apresentado pelo


WebServices
Neste guia de referncia rpida, sero descritas as funes bsicas da linguagem e seus respectivos ERROS do
ADVPL/WebService.

14. GETWSCERROR - Recuperao de informaes


Utilizada no desenvolvimento de uma aplicao 'Client' de WebServices, atravs desta funo possvel recuperar as
informaes pertinentes uma ocorrncia de erro de processamento de um mtodo 'Client', aps a execuo do
mesmo.

Caso a execuo de um mtodo 'Client' de Web Services retorne .F., deve ser utilizada a funo GetWSCError(), para
identificar a origem da ocorrncia. Durante a execuo de um mtodo 'Client' de WebServices, so possveis
ocorrncias de erro das seguintes naturezas, em momentos especficos:

1. Antes do pacote 'SOAP',com os parmetros e dados pertinentes requisio, ser enviado.

Durante a montagem do pacote SOAP, antes do envio dos parmetros do mtodo solicitados ao servidor, realizada
uma verificao naconsistncia do(s) parmetro(s) a serem enviados, tais como a obrigatoriedade do parmetro e o tipo
Advpl com o qual o parmetro foi alimentado. Se e somente se os parmetros informados forem vlidos, o pacote
SOAP montado postado no servidor de WebServices.

2. Ao postar o pacote 'SOAP' para o respectivo WebService.

Ao postar o pacote, caso o host do Web Service utilizado ou o servidor referente ao mesmo no tenham sido
localizados ou no estejam no ar.

3. Aps o envio do pacote e obteno do devido retorno do Server.

Uma vez enviado ao Server, a interface client entra em modo 'stand-by', aguardando por um pacote de retorno SOAP
do Server. Aps a postagem, caso o pacote devolvido no esteja em conformidade com a declarao do servio, ou o
servidor tenha devolvido um html ao invs de um xml 'SOAP'.

4. Erro Interno de execuo: Qualquer ocorrncia de erro fatal, seja antes ou depois do envio da requisio, cuja
origem no seja tratada ou prevista pelas rotinas 'Client' do Servio, como por exemplo um retorno de um
pacote XML com erro de sintaxe ou estruturalmente invlido.

Sintaxe:
GETWSCERROR - Recuperao de informaes ( [ nInfo ] ) --> xErrorInfo

Retorno:
xErrorInfo(qualquer)
Retorna a informao do erro solicitada atravs do parmetro nInfo . Caso nInfo seja 1 , 2 ou 3 , o retorno do
tipo String . Caso seja tipo 4 , ser retornado um Objeto XML.

Verso 12 59
Programao ADVPL WebService

Parmetros:

Nome Tipo Descrio Default Obrigatrio Referncia


nInfo especifica qual informao pertinente
ao erro deve ser retornada, podendo ser:

1 - Retorna uma String contendo o


Resumo do Erro COMPLETO
(DEFAULT)

Array 2 = Retorna uma String contendo o


nInfo of soap:fault_code , caso disponvel .
Record
3 = Retorna uma String contendo o
soap:fault_String , caso disponvel .

4 = Retorna um Objeto XML


contendo os nodes completos com as
informaes do erro , apenas caso o
erro seja um soap_Fault.

15. WSCERR000 / WSDL no suportado. Existe mais de um servio declarado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Por definio, um WSDL deve conter apenas um servio declarado, com um ou mais mtodos.
Caso seja identificado mais de um servio no mesmo WSDL, no momento da gerao do cdigo-fonte, o processo
abortado, o WSDL considerado invlido, e o cdigo-fonte client no gerado.

16. WSCERR001 / No h SOAP:BINDINGS para a gerao do Servio


Ocorre durante a gerao do cdigo-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.

17. WSCERR003 / [XXX / YYY] Enumeration no suportado


Esta ocorrncia de erro existe no momento da gerao de um cdigo-fonte de WebServices 'Client', utilizando o
TOTVS | Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas
pelos mtodos do servio. Quando encontrada uma estrutura bsica (SimpleType), onde foi especificado um
'enumeration' (lista de parmetros vlidos pr-determinada), so suportados os seguintes tipos bsicos de parmetros,
listados abaixo:

STRING
FLOAT
DOUBLE
DECIMAL
INT

60 Verso 12
Programao ADVPL WebService

INTEGER
LONG
UNSIGNEDINT
UNSIGNEDLONG

Caso o WSDL contenha um 'enumeration', utilizando um tipo de dado diferente dos declarados acima, o processo de
gerao de fonte abortado com a ocorrncia de erro acima, onde o 'enumeration' no suportado identificado em
<XXX> e <YYY>, correspondendo ao nome do parmetro e tipo utilizado, respectivamente.

18. WSCERR004 / NO IMPLEMENTADO ( 001<X> / <N> / WSDLTYPE_NAME )


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio,at que todas as estruturas utilizadas sejam processadas.

Caso, neste processamento, uma estrutura contenha um determinado elemento que aponte para uma outra estrutura, e
esta no seja encontrada no WSDL ( ocorrncia <X> = A ), ou seja encontrada - porm registrada no como uma
estrutura (complextype)- ( ocorrncia <X> = B ), o WSDL considerado invlido, e o processo de gerao abortado
com a mensagem acima, identificando a estrutura pendente em <WSDLTYPE_NAME>.

19. WSCERR006 / WSDL invlido ou no suportado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio,at que todas as estruturas utilizadas sejam processadas.

Quando, dentro deste processamento, um parmetro de primeiro nvel (message) do WSDL for especificado sem nome,
o WSDL considerado invlido, e o processo de gerao abortado com a mensagem acima.

20. WSCERR007 / WSDL invlido ou no suportado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio,at que todas as estruturas utilizadas sejam processadas.

Quando, dentro deste processamento, um parmetro de primeiro nvel (message) do WSDL for especificado sem
definio de tipo, o WSDL considerado invlido, e o processo de gerao abortado com a mensagem acima.

21. WSCERR008 / Retorno NULLPARAM invlido


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio,at que todas as estruturas utilizadas sejam processadas.

Se, neste processamento, um parmetro de retorno do WSDL seja identificado como 'retorno nulo', o WSDL
considerado invlido, e o processo de gerao abortado com a mensagem acima.

Verso 12 61
Programao ADVPL WebService

22. WSCERR009 / INTERNAL ERROR (X)


Esta uma ocorrncia de erro interna do 'engine' de gerao de cdigo-fonte AdvPL, no reproduzida at o momento.
No momento de processamento de um WSDL, os parmetros e mensagens especificadas no WSDL so identificados
internamente como parmetros de entrada , parmetro de sada , ou entrada e sada. Caso, aps a anlise inicial de
parmetros, algum parmetro no seja enquadrado nestas definies, o processamento de gerao abortado com a
ocorrncia acima.

23. WSCERR010/[STRUCT_TYPE]Estrutura / Tipo incompleto


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Dentro deste processamento, caso uma estrutura complexa no contenha a especificao de seus elementos internos
e a mesma no contenha nenhuma referncia ao SCHEMA ou outra estrutura, o WSDL considerado invlido, e o
processo de gerao abortado com a mensagem acima, informando em [STRUCT_TYPE], o nome da estrutura
incompleta.

24. WSCERR011 / Retorno NULLPARAM invlido


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Neste processamento, se um parmetro de retorno do WSDL for identificado como 'retorno nulo', o WSDL
considerado invlido, e o processo de gerao abortado com a mensagem acima.

Importante

Esta ocorrncia semelhante ocorrncia WSCERR008, porm esta ocorrncia (011) refere-se
uma sub-estrutura do servio , e a primeira (008) refere-se um parmetro/estrutura de
primeiro nvel do servio.

25. WSCERR012 / INTERNAL ERROR (X)


Esta uma ocorrncia de erro interna do 'engine' de gerao de cdigo-fonte AdvPL, no reproduzida at o momento.
Quando do processamento de um WSDL, os parmetros e mensagens especificadas no WSDL so identificados
internamente como parmetros de entrada , parmetro de sada , ou entrada e sada. Caso, aps a anlise inicial de
parmetros, algum parmetro no seja enquadrado nestas definies, o processamento de gerao abortado com a
ocorrncia acima.

62 Verso 12
Programao ADVPL WebService

Importante

Esta ocorrncia semelhante WSCERR009, porm esta indica uma falha em outro ponto da
rotina interna de anlise.

26. WSCERR013 / [SOAP_TYPE] UNEXPECTED TYPE


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Quando neste processamento, um parmetro de tipo bsico no se encontrar entre os tipos bsicos suportados pelo
engine 'Client' de WebServices do ERP, a gerao do cdigo-fonte abortada com este erro, indicando em
SOAP_TYPE o tipo no suportado.

27. WSCERR014 / INVALID NULLPARAM INIT


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Neste processamento, para cada propriedade da estrutura do servio so montadas suas rotinas de inicializao. Caso
a rotina de gerao de cdigo-fonte receba a instruo de inicializar a propriedade reservada 'NULLPARAM', o
processamento abortado com esta ocorrncia.

Esta ocorrncia poderia ser causada por uma falha na validao inicial do WSDL, ou pela declarao de uma
propriedade do tipo 'NULLPARAM'; e at o momento no foi reproduzida.

28. WSCERR015 / Node [XXX] as [YYY] on SOAP Response not found.


Esta ocorrncia reproduzida, na utilizao de um cdigo-fonte Client de WebServices, no momento que o client est
desmontando o pacote SOAP retornado pelo servio.

Caso o servio utilize um soap-style RPC, e o node [XXX], correspondente ao retorno esperado do tipo [YYY] no for
encontrado no pacote, o processamento do pacote de retorno abortado com esta ocorrncia.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

29. WSCERR016 / Requisio HTTPS no suportada neste Build. [XXX]


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Quando informada uma URL para buscar a definio do servio (WSDL), utilizando o protocolo
HTTPS, mas a build do ERP atual no suportar o tratamento de Web Services em HTTPS, a gerao do cdigo-fonte
abortada com esta ocorrncia de erro.

Verso 12 63
Programao ADVPL WebService

Para gerar um fonte 'Client' de WebServices, que utilize o protocolo HTTPS, a build do ERP deve ser atualizada.
WSCERR017 / HTTP[S] Requisio retornou [NIL]

Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Quando informada uma URL para buscar a definio do servio (WSDL), utilizando o protocolo
HTTP ou HTTPS; e no foi possvel buscar o link solicitado, o processamento abortado com a ocorrncia acima.

Dentre as possveis causas para esta ocorrncia, podemos considerar :

Sintaxe da URL invlida


Servidor invlido, inexistente, ou DNF no disponvel
Servidor fora do ar

Verifique a URL digitada e teste a requisio da mesma atravs de um navegador, para certificar-se que vlida e que
a definio WSDL est realmente acessvel sob o link informado.

30. WSCERR018 / HTTP[S] Requisio retornou [EMPTY]


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Quando for informada uma URL para buscar a definio do servio (WSDL), utilizando o protocolo
HTTP ou HTTPS; e no foi possvel buscar o link solicitado, o processamento abortado com a ocorrncia acima.

Diferentemente da ocorrncia WSCERR017, esta ocorrncia foi reproduzida quando o servidor de WebServices que
fornece o documento WSDL foi localizado, a requisio foi feita com sucesso, porm o servidor recebeu como retorno
um pacote HTTP incompleto ou invlido.

Verifique a URL digitada, e realize a requisio da mesma atravs de um Web Browser, para certificar-se que a mesma
vlida e que a definio WSDL est realmente publicada e acessvel sob o link informado.

31. WSCERR019 / (XXX) Arquivo no encontrado


Esta ocorrncia de erro reproduzida, quando da gerao de um cdigo-fonte de WebServices 'Client', utilizando o
TOTVS | Development Studio. Quando informada um local para buscar a definio do servio (WSDL) no disco e o
arquivo no for encontrado, o processamento abortado com a ocorrncia acima.

Dentre as possveis causas para esta ocorrncia, podemos considerar :

Diretrio no existente ou invlido.


Arquivo no existente ou invlido.
Falta de permisso de acesso ao arquivo solicitado.

64 Verso 12
Programao ADVPL WebService

32. WSCERR020 / ( XXX / FERROR YYY ) Falha de Abertura.


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Quando for informada uma URL para buscar a definio do servio (WSDL) apontando para um
arquivo no disco, havendo, porm, impossibilidade de acesso ao arquivo.

Dentre as possveis causas para esta ocorrncia, podemos considerar:

Arquivo aberto em modo exclusivo por outra estao.


Falha de permisso/direito de abertura do arquivo.

Verifique as propriedades e direitos do arquivo solicitado e repita a operao.

33. WSCERR021/[INFO] WSDL Parsing [PARSER_WARNING]


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Sendo informada uma URL para buscar a definio do servio (WSDL) aps o documento ser
recuperado, em caso de inconsistncia (considerada pelo parser interno de xml do sistema como uma advertncia (no
documento XML), o WSDL considerado invlido e a gerao do fonte cancelada. Em PARSER_WARNING
discriminada a mensagem de advertncia do parser interno e em [INFO] especificado o documento/operao que
apresentou a inconsistncia.

34. WSCERR022 / [INFO] WSDL Parsing [PARSER_ERROR]


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. Uma URL informada para buscar a definio do servio (WSDL). Aps o documento WSDL ser
recuperado, em caso de inconsistncia considerada pelo parser interno de xml do sistema como erro no documento, o
WSDL considerado invlido e a gerao do fonte cancelada, com esta ocorrncia. Em [PARSER_ERROR]
discriminada a ocorrncia de erro do parser interno; e em [INFO] especificado o documento/operao que apresentou
a inconsistncia.

35. WSCERR023/[xxx] FALHA INESPERADA AO IMPORTAR WSDL


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.
Ao informar uma URL para buscar a definio do servio (WSDL), aps o documento WSDL ser recuperado, h a
etapa de validao XML O erro ocorre se documento retornado constitui um XML sintaticamente vlido, mas o parser
no identifica nenhuma estrutura referente a um documento WSDL.Desta forma, o documento considerado invlido e
a gerao do cdigo-fonte cancelada com esta ocorrncia.

No cabealho da mensagem [xxx], possvel verificar a especificao do documento/operao que apresentou a


inconsistncia.

Verso 12 65
Programao ADVPL WebService

36. WSCERR024 / [MSG_INFO] MESSAGE no encontrada


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Neste processamento, caso uma seo de mensagens (message) seja especificada para uma operao, porm no
seja encontrada no WSDL, o mesmo considerado invlido, e o processo de gerao abortado com a mensagem
acima, identificando a mensagem no encontrada em [MSG_INFO]. Caso a informao [MSG_INFO] estiver vazia, o
documento WSDL no especificou alguma mensagem de parmetro ou retorno na seo <portType> da lista de
mtodos do WSDL.

37. WSCERR025 / [BIND_INFO] Binding no Encontrado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Neste processamento, caso uma seo de amarrao (binding) no seja localizada para uma operao especificada no
WSDL, e a mesma no seja encontrada no WSDL, o mesmo considerado invlido, e o processo de gerao
abortado com a mensagem acima, identificando a mensagem no encontrada em [BIND_INFO].

38. WSCERR026/TARGETNAMESPACE no definido no WSDL


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Quando iniciado este processamento, verificado se o documento WSDL contm a definio do NameSpace de
destino (TargetNameSpace) utilizado. Caso este no seja localizado, o WSDL considerado invlido, e o processo de
gerao abortado com a mensagem acima.

39. WSCERR027/[OPER_INFO] BIND:OPERATION no encontrado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Quando iniciado este processamento, caso uma operao/mtodo do WebService no seja encontrada na seo de
amarrao (binding), o documento WSDL considerado invlido, e o processo de gerao abortado com a
mensagem acima, identificando a operao no encontrada em [OPER_INFO].

66 Verso 12
Programao ADVPL WebService

40. WSCERR028/[PORT_INFO] PortType no Encontrado em aPort


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Neste processamento, caso uma operao/mtodo do WebService no seja encontrada na seo de portas do WSDL
( PortType ), o documento WSDL considerado invlido, e o processo de gerao abortado com a mensagem acima,
identificando a porta no encontrada em [PORT_INFO].

41. WSCERR029/[PORT_INFO]PortType nocontm operaes


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Neste processamento, caso uma operao/mtodo do WebService no contenha a definio das operaes na seo
de portas do servio (PortType), o documento WSDL considerado invlido, e o processo de gerao abortado com a
mensagem acima, identificando a porta sem definio em [PORT_INFO].

42. WSCERR031 / [SCTUCT_NAME] Tipo sem NAMESPACE


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Quando iniciado este processamento, caso uma determinada estrutura seja identificada como sendo externa ao
WSDL atual, referenciada por um IMPORT ou REF ou se a estrutura estiver declarada no WSDL sem o referido
namespace, o WSDL considerado invlido, e o processo de gerao abortado com a mensagem acima,
identificando a estrutura incompleta em [STRUCT_NAME].

43. WSCERR032 / [SHORT_NS] NAMESPACE no encontrado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.
Neste processamento de estruturas pendentes, identificadas como sendo externas ao 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 namespace no encontrado em [SHORT_NS].

44. WSCERR033/[LONG_NS] NameSpace sem Import declarado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Verso 12 67
Programao ADVPL WebService

Complementar ao erro WSCERR032, este reproduzido quando o namespace identificado 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 no encontrado em [LONG_NAMESPACE]

45. WSCERR034/[INFO_NS] NAMESPACE sem LOCATION informado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Complementar ao erro WSCERR033, este ocorre quando a declarao da URL/Location do NameSpace externo no
esteja declarada no <IMPORT...> do WSDL . Neste caso, o documento considerado invlido, e o processo de
gerao abortado com a mensagem acima, identificando o namespace incompleto em [INFO_NS].

46. WSCERR035 / [TYPE] Tipo indefinido


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Quando iniciado o processamento de estruturas pendentes, identificadas como sendo externas ao WSDL atual,
especificadas por um IMPORT ou REF, o namespace da mesma identificado e importado, e todo o WSDL re-
processado. No reprocessamento, caso o parmetro/estrutura pendente no seja encontrado, o WSDL considerado
invlido, e o processo de gerao abortado com a mensagem acima, identificando a estrutura pendente em [TYPE].

47. WSCERR036 / Definio no suportada


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Na validao de estruturas complexas, se a mesma no possuir tipo definido, e no for uma referncia externa ao
WSDL, ela deve ser uma referncia ao prprio SCHEMA. Caso seja especificada qualquer outro tipo de referncia, o
WSDL no suportado, e o processo de gerao abortado com a mensagem acima.

48. WSCERR037 / [TYPE] Estrutura Interna Inesperada


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio. No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos
mtodos do servio, at que todas as estruturas utilizadas sejam processadas.

Na validao de estruturas complexas, caso a mesma tenha passado por todas as interpretaes cabveis a uma
estrutura, e mesmo assim no foi possvel identific-la, o WSDL considerado invlido, e o processo de gerao
abortado com a mensagem acima, identificando a estrutura em [TYPE].

68 Verso 12
Programao ADVPL WebService

49. WSCERR038 / [PARAM] WSDL invlido ou no suportado


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.

No processo de gerao, so analisados todos os parmetros e estruturas utilizadas pelos mtodos do servio, at que
todas as estruturas utilizadas sejam processadas. Quando da validao de estruturas complexas, caso uma estrutura
e/ou parmetro/retorno tenha passado por todas as interpretaes cabveis de uma estrutura, porm no foi possvel
localizar ou identificar adequadamente a estrutura, o WSDL considerado invlido, e o processo de gerao abortado
com a mensagem acima, identificando o parmetro de origem da mesma em [PARAM].

Em termos prticos, este erro singifica que : ou o WSDL fornecido no vlido, ou ento a engine de parser WSDL do
Protheus no reconheceu a estrutura como vlida, isto , no soube lidar com ela para gerar um fonte client AdvPL.

50. WSCERR039 / Unexpected DumpType [X]


Na 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 [X].

Verifique o cdigo-fonte da aplicao e certifique-se de sempre passar um Objeto XML ou Array para a funo
XMLDataSet().

51. WSCERR040 / Unexpected SCHEMA Type [X]


Na utilizao da funo XMLDataSchema, para determinar os dados recebidos por um retorno de um Web Service que
retorna uma referncia ao Schema, se no for enviada uma 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 [X].

Verifique o cdigo-fonte da aplicao e certifique-se de sempre passar um Objeto XML ou Array para a funo
XMLDataSchema().

52. WSCERR041 / [NOTNIL_MESSAGE]


Esta ocorrncia ocorre na utilizao de um cdigo-fonte Client de WebServices, no momento que o client est
desmontando o pacote SOAP retornado pelo servio.
Durante a desmontagem do pacote de retorno de um Web Service, caso algum parmetro obrigatrio do servio no
esteja presente no pacote de retorno, o processamento abortado com a mensagem acima, identificando em
[NOTNIL_MESSAGE] o parmetro/propriedade que no veio preenchida.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravps da funo GetWSCError().

Verso 12 69
Programao ADVPL WebService

53. WSCERR042 / URL LOCATION no especificada


Esta ocorrncia reproduzida, na utilizao de um cdigo-fonte Client de WebServices, antes do envio do pacote
SOAP com o(s) parmetro(s) d ao/mtodo solicitado.

No momento de postar o pacote SOAP de parmetros para um Web Service, verificada a propriedade reservada
_URL do objeto do Servio, que contm a URL para postagem do pacote ao servidor. Caso a mesma esteja vazia, o
processamento abortado com a mensagem acima, antes da postagem dos dados.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravps da funo GetWSCError().

Verifique o cdigo-fonte, e certifique-se que, caso a propriedade _URL esteja sendo redefinida, a mesma no esteja
vazia. Esta propriedade j alimentada automaticamente pelo engine client de webservices, de acordo com as
informaes para postagem obtidas no WSDL utilizado para a gerao do cdigo-fonte client.

54. WSCERR043 / [SOAP_STYLE] SOAPSTYLE Desconhecido


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, antes do envio do pacote SOAP
com o(s) parmetro(s) da ao/mtodo solicitado.

No momento de postagem do pacote SOAP de parmetros para um Web Service, verificado o formato do pacote
SOAP a ser enviado ao client. Esta propriedade definida em fonte, no momento da gerao do fonte-client, e no
deve ser alterada. Caso a mesma seja alterada manualmente, e no esteja num formato vlido, o processamento
abortado com a mensagem acima, antes da postagem dos dados, indicando em [SOAP_STYLE] o soap style invlido
informado..

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravps da funo GetWSCError().

Verifique o cdigo-fonte, e certifique-se que o mesmo no foi alterado automaticamente pelo engine client de
webservices, de acordo com as informaes para postagem obtidas no WSDL utilizado para a gerao do fonte client.

55. WSCERR044 / No foi possvel POST: URL [URP_POST]


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao enviar o pacote SOAP com
o(s) parmetro(s) da ao/mtodo solicitado.

Aps montado o pacote de envio para a solicitao de processamento do servio, este postado no servidor indicado
na URL especfiicada 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_POST].
Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

70 Verso 12
Programao ADVPL WebService

56. WSCERR045 / Retorno VAZIO de POST : URL <URL> [HEADER_RET]


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao enviar o pacote SOAP com
o(s) parmetro(s) d ao/mtodo solicitado.

Aps montado o pacote de envio para a solicitao de processamento do servio, o pacote enviado a URL
discriminada no servio.

Diferentemente da ocorrncia WSCERR014, esta ocorrncia pode ser reproduzida quando o servidor de WebServices
que atendeu requisio foi localizado, a requisio foi feita com sucesso, porm o servidor do sistema recebeu como
retorno um pacote HTTP incompleto ou invlido, ou ocorreu um erro interno no servidor, referenciado no header do
pacote HTTP; nestes casos o processamento abortado com a ocorrncia acima, informando em <URL> o endereo
do servidor onde o dado foi postado, e, se disponvel, em HEADER_RET informado o contedo do Header de Retorno
do HTTP.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

57. WSCERR046 / XML Warning [XML_WARNING] ( POST em <URL> )


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao enviar o pacote SOAP com
o(s) parmetro(s) d ao/mtodo solicitado.

Aps montado e enviado o pacote de envio para a solicitao de processamento do servio, o pacote SOAP retornado
pelo servio analisado para a alimentao dos parmetros AdvPL. Caso seja detectada alguma inconsistncia,
considerada pelo parser interno de xml do sistema como uma advertncia (warning), no documento XML, o pacote
SOAP de retorno considerado invlido, e o processamento abortado com esta ocorrncia, informando em
XML_WARNING a mensagem de advertncia do parser interno; e em <URL> o servidor de WebServices que retornou o
pacote.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

58. WSCERR047 / XML Error [XML_ERROR] ( POST em <URL> )


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao enviar o pacote SOAP com
o(s) parmetro(s) d ao/mtodo solicitado.

Aps montado e enviado o pacote de envio para a solicitao de processamento do servio, o pacote SOAP retornado
pelo servio analisado para a alimentao dos parmetros AdvPL. Caso seja detectada alguma inconsistncia,
considerada pelo parser interno de xml do sistema, como um erro de sintaxe no XML, o pacote SOAP de retorno
considerado invlido, e o processamento abortado com esta ocorrncia, informando em XML_ERROR a mensagem
de erro do parser interno; e em <URL> o servidor de WebServices que retornou o pacote.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError(). Veja mais detalhes na
funo GetWSCError(), pois ela oferece a possibilidade de recuperar os elementos principais de retorno de um pacote
SOAP_FAULT isoladamente.

Verso 12 71
Programao ADVPL WebService

59. WSCERR048 / SOAP FAULT [FAULT_CODE] ( POST em <URL> ) : [FAULT_STRING]


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao enviar o pacote SOAP com
o(s) parmetro(s) d ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, para a alimentao dos parmetros AdvPL, caso o pacote de
retorno contenha uma excesso do tipo SOAP FAULT, isto indica que houve uma falha de processamento do servio
no servidor.

O processamento abortado com esta ocorrncia, informando em [FAULT_CODE] o cdigo da excesso SOAP, em
<URL> o servidor de WebServices que retornou o pacote, e em FAULT_STRING mais detalhes sobre a ocorrncia.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().
WSCERR049 / SOAP RESPONSE (RPC) NOT FOUND.

Esta ocorrncia reproduzida, quando da utilizao de um cdigo-fonte Client de WebServices, ao processar o pacote
SOAP recebido como retorno da ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, para a alimentao dos parmetros AdvPL, caso o servio utilize
um soapStyle = RPC, e o node de resposta no seja encontrado no pacote, o pacote de resposta considerado
invlido, e o processamento abortado com a mensagem acima.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

60. WSCERR050 / SOAP RESPONSE REF <NODE_REF> (RPC) NOT FOUND


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao processar o pacote SOAP
recebido como retorno da ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, para a alimentao dos parmetros AdvPL, caso o servio utilize um
SoapStyle = RPC, e o node de resposta aponte para um 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 no encontrado em <NODE_REF>.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

61. WSCERR051 / SOAP RESPONSE RETURN (RPC) NOT FOUND


Esta ocorrncia reproduzida, na utilizao de um cdigo-fonte Client de WebServices, ao processar o pacote SOAP
recebido como retorno da ao/mtodo solicitado.
Ao analisar o pacote SOAP retornado pelo servio, para a alimentao dos parmetros AdvPL, caso o servio utilize um
soapStyle = RPC, e o node de retorno no aponte para nenhuma referncia, o retorno deve estar dentro do XML, no
nvel do node de resposta . Caso o node de retorno no seja encontrado neste nvel, o pacote de retorno considerado
invlido, e o processamento abortado com a mensagem acima.

72 Verso 12
Programao ADVPL WebService

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

62. WSCERR052 / Enumeration FAILED on [STRUCT_TYPE]


Ocorre na utilizao de um cdigo-fonte Client de WebServices, antes do envio do pacote SOAP com o(s) parmetro(s)
da ao/mtodo solicitado.

Antes da montagem do pacote SOAP, os parmetros do mtodo/ao solicitada do servio so analisados e validados.
Caso um parmetro contiver uma definio de enumeration, obtida no WSDL, e for alimentado pelo cdigo-fonte
client com um valor que no conste na lista de parmetros vlidos, o processamento abortado com a mensagem
acima, identificando o parmetro envolvido em [STRUCT_TYPE].

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

Verifique o cdigo-fonte client gerado em AdvPL, para obter a lista de parmetros vlidos; e certifique-se que o
parmetro especificado est alimentado de forma correta.

63. WSCERR053 / WSRPCGetNode (Object) not found


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao processar o pacote SOAP
recebido como retorno da ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, para a alimentao dos parmetros AdvPL, caso o servio utilize um
soapStyle = RPC. No momento de anlise de um retorno de uma estrutura complexa, se o node correspondente
estrutura no for localizado no pacote de retorno, o mesmo considerado invlido, e o processamento abortado com
a mensagem acima.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

64. WSCERR054 / Binding SOAP no localizado no WSDL


Esta ocorrncia de erro reproduzida na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.

Durante a gerao do cdigo-fonte, uma vez identificado o servio, o gerador de cdigo procura a declarao das
amarraes do servio (BINDINGS) no WSDL. Dentre as amarraes encontradas, apenas so processadas aquelas
que especificam o transporte de dados para o servio no formato SOAP.

Caso no exista nenhuma amarrao no servio, que especifique a utilizao do SOAP, o processo de gerao do
cdigo-fonte client abortado, retornando esta ocorrncia. A infraestrutura Client de WebServices do sistema no
suporta a gerao de fontes-client de servios que no utilizem pacotes XML - SOAP para a troca de informaes.

Verso 12 73
Programao ADVPL WebService

65. WSCERR055 / Invalid Property Type (X) for [PARAM] (Y)


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, antes do envio do pacote SOAP
com o(s) parmetro(s) da ao/mtodo solicitado.

Antes da montagem do pacote SOAP, os parmetros do mtodo/ao solicitada do servio so analisados e validados.
As propriedades da classe, utilizadas como parmetros, devem ser alimentadas com os tipos AdvPL apropriados. Caso
uma determinada propriedade [PARAM] do objeto 'Client' do servio esteja alimentada com um tipo de dado Advpl [X] ,
porm o tipo esperado era [Y], o processamento abortado com a ocorrncia de erro acima.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

Verifique o cdigo-fonte client gerado em AdvPL, e certifique-se que o parmetro especificado est sendo alimentado
de forma correta, com o tipo apropriado.

66. WSCERR056 / Invalid XML-Soap Server Response: soap-envelope not found


Esta ocorrncia reproduzida, na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do
pacote SOAP recebido como retorno da ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, caso o mesmo no contenha um envelope (soap-Envelope) de
resposta, o retorno considerado invlido, e o processamento abortado com a mensagem acima.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

67. WSCERR057 / Invalid XML-Soap Server Response: soap-envelope empty


Esta ocorrncia reproduzida, na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do
pacote SOAP recebido como retorno da ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, caso no seja possvel determinar o prefixo do SOAP Envelope
utilizado, o retorno considerado invlido, e o processamento abortado com a mensagem acima.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

68. WSCERR058 / Invalid XML-Soap Server Response : Invalid soap-envelope


[SOAP_ENV] object as valtype [X]
Esta ocorrncia ocorre na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do pacote
SOAP recebido como retorno da ao/mtodo solicitado.

Ao analisar o pacote SOAP retornado pelo servio, caso o soap-envelope determinado [SOAP_ENV], esperado como
um Objeto, foi recebido com um tipo AdvPL [X]. Isto invalida o pacote soap recebido, sendo o processamento abortado
com a ocorrncia acima.

74 Verso 12
Programao ADVPL WebService

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

69. WSCERR059 / Invalid XML-Soap Server Response: soap-body not found


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do
pacote SOAP recebido como retorno da ao/mtodo solicitado.
Semelhante a ocorrncia WSCERR056, esta ocorrncia indica que no foi possvel determinar o corpo (soap-body) do
pacote SOAP retornado pelo servio, o que invalida o pacote de retorno, sendo o processamento abortado com esta
ocorrncia de erro.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

70. WSCERR060 / Invalid XML-Soap Server Response: soap-body envelope empty


Esta ocorrncia ocorre na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do pacote
SOAP recebido como retorno da ao/mtodo solicitado.
Semelhante a ocorrncia WSCERR057, esta ocorrncia indica que pacote SOAP retornado, no foi possvel determinar
o prefixo do corpo (soap-body) utilizado; o que invalida o pacote de retorno, sendo o processamento abortado com esta
ocorrncia de erro.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

71. WSCERR061 / Invalid XML-Soap Server Response: Invalid soap-body [BODY] object
as valtype [TYPE]
Ocorre na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do pacote SOAP recebido
como retorno da ao/mtodo solicitado.

Semelhante a ocorrncia WSCERR058, esta ocorrncia indica que no SOAP retornado, o corpo (soap-body)
determinado [BODY], esperado como um Objeto, foi recebido como um tipo AdvPL [TYPE], ; o que invalida o pacote de
retorno, sendo o processamento abortado com esta ocorrncia de erro.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

72. WSCERR062 / Invalid XML-Soap Server Response: Unable to determine Soap Prefix
of Envelope [SOAP_ENV]
Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao iniciar o processamento do
pacote SOAP recebido como retorno da ao/mtodo solicitado.

Esta ocorrncia indica que, no SOAP retornado, o envelope (soap-envelope) determinado [SOAP_ENV], no est em
um formato que seja possvel determinar o nome do envelope; o que invalida o pacote de retorno, sendo o
processamento abortado com esta ocorrncia de erro.

Verso 12 75
Programao ADVPL WebService

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

73. WSCERR063 / Argument error : Missing field [NODE] as [TYPE]


Esta ocorrncia ocorre na utilizao de um cdigo-fonte Client de WebServices, ao iniciar a montagem do pacote SOAP
com os parmetros para a chamada do servio.

Esta ocorrncia indica que o parmetro obrigatrio determinado em [NODE], com o tipo [TYPE], no foi alimentado para
a chamada da funo client. Esta ocorrncia invalida a montagem do pacote de envio, abortando o processamento
antes do envio do pacote.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

74. WSCERR064 / Invalid Content-Type return (HTTP_HEAD) from <URL>


Esta ocorrncia reproduzida na utilizao de um cdigo-fonte Client de WebServices, ao processar o pacote SOAP
recebido como retorno da ao/mtodo solicitado. Aps montado e enviado o pacote de envio para a solicitao de
processamento do servio, o pacote SOAP retornado pelo servio analisado para a alimentao dos parmetros
AdvPL.

Esta ocorrncia indica que, o header HTTP de retorno do servio, postado em <URL>, veio com o contedo do
header HTTP retornado pelo servidor, indica o uso de content-type diferente de XML, o que invalida o processamento
do retorno. Um Web Service client sempre espera por um pacote de retorno com um 'Content-type: text/xml' de um
Web Services SERVER.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

Esta ocorrncia normalmente reproduzida, quando um determinado WebService no est mais publicado no endereo
especificado, porm a URL ainda vlida. De modo que, ao receber a requisio, o servidor devolve uma pgina
HTML, com uma mensagem do tipo 'Page not Found'.

75. WSCERR065 / EMPTY Content-Type return (HEADER) from <URL>


Esta ocorrncia ocorre quando se utiliza um cdigo-fonte Client de WebServices ao processar o pacote SOAP recebido
como retorno da ao/mtodo solicitado.

Semelhante a ocorrncia WSCERR064, esta ocorrncia indica que, aps a postagem de um pacote SOAP ao servidor
de destino do WebService, em <URL>, o contedo do header HTTP retornado (HEADER) retornado pelo servidor, no
possua a identificao do Content-Type, o que invalida o processamento de retorno. O client AdvPL sempre espera por
um pacote de resposta com um content-type: text/xml como retorno.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

76 Verso 12
Programao ADVPL WebService

76. WSCERR066 / Invalid INVALID WSDL Content-Type (HTTP_HEAD) from <URL>


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.

Esta ocorrncia indica que, o header HTTP de retorno da requisio do WSDL, solicitado no endereo <URL>, veio
identificando um tipo de documento (content-type) diferente de textp/plain ou text/xml, o que invalida o processamento
do retorno. Um Web Service client sempre espera por um pacote de retorno com um 'Content-type: text/xml' ou
'text/plain', de um Web Services SERVER.

Esta ocorrncia normalmente reproduzida quando um determinado WebService no est mais publicado no endereo
especificado, porm o servio de HTTP ainda est ativo no servidor solicitado. De modo que, ao receber a requisio, o
servidor devolve uma pgina HTML, com uma mensagem do tipo 'Page not Found'.

Alternativa para gerao do client

Caso o WSDL possa ser aberto atravs de um navegador de internet (Internet Explorer, Mozilla Firefox, etc), proceda
da seguinte forma:

Abra a URL do WSDL no navegador de internet.


Salve o documento em um diretrio do RootPath do TOTVS | Application Server.
Gere o client novamente a partir do TOTVS | Development Studio, desta vez colocando no campo
"URL do WebService" o caminho em que o arquivo se encontra no RootPath.
Exemplo: "\arquivo.wsdl".

77. WSCERR067 / EMPTY WSDL Content-Type (HTTP_HEAD) from <URL>


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.

Esta ocorrncia indica que, o header HTTP de retorno do WSDL, solicitado atravs do link <URL>, veio com o contedo
do header HTTP sem a informao do tipo de contedo do documento (content-type). Um documento WSDL deve ser
retornado pelo servidor de WebServices, informando no header HTTP um tipo de documento (content-type) definido
como text/plain ou text/xml.

78. WSCERR068 / NOT XML SOURCE from <URL>


Este erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS | Development Studio.

Esta ocorrncia indica que, o documento retornado pelo servidor de Web Services no se trata de um XML vlido para
ser analizado. O documento WSDL deve sempre iniciar com o node da declarao do XML ( <?XML ...) . Caso no
possua esta informao, o primeiro node deve obrigatoriamente ser a definio do servio ( <DEFINITIONS ). Se o
documento WSDL retornado no atender estes requisitos, o processamento abortado com a mensagem acima.

Verso 12 77
Programao ADVPL WebService

79. WSCERR069 / BYREF [PARAM] WITH NO INPUT ARGUMENT : UNSUPPORTED


WEBSERVICE
Esta ocorrncia de erro reproduzida na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.

No momento da gerao do cdigo-fonte, caso o WSDL retornado informe um mtodo de Web Services, que possua
mais de um parmetro de retorno, isto caracteriza um mtodo que trabalha com parmetros por referncia (BYREF).
Neste caso, aps o cruzamento dos retornos do mtodo com os parmetros, deve restar no mximo um retorno. Caso
mesmo assim, reste mais de um retorno, o WSDL considerado invlido, sendo o processo de gerao abortado com a
mensagem de erro acima, informando em [PARAM] o retorno excedente, que deveria ser localizado nos parmetros.

80. WSCERR070 / Requisio HTTPS no suportada neste BUILD [PROTHEUS_BUILD]


Existe na utilizao de um cdigo-fonte Client de Web Services, antes do envio do pacote SOAP com o(s) parmetro(s)
da ao/mtodo solicitado.

No momento de postar o pacote SOAP de parmetros para um Web Service, verificado se o protocolo em uso o
HTTPS e se o mesmo j suportado pela Build atual do servidor TOTVS | Application Server em uso.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().

Verifique o cdigo-fonte, e certifique-se que, caso a propriedade _URL esteja sendo redefinida, a mesma no esteja
sendo redefinida para um endereo utilizando HTTPS. Caso a propriedade _URL no esteja sendo re-definida, e o
servio solicitado exiga o envio dos dados atravs de HTTPS, a build do servidor TOTVS | Application Server deve ser
atualizado.

81. WSCERR071 / INVALID HTTP HEADER (HTTPHEAD) from <URL>


Esta ocorrncia de erro ocorre na gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |
Development Studio.

Ocorre na gerao de cdigos-fonte AdvPL, caso o servidor informado, acessado via URL, retorne um pacote HTTP,
com um header de retorno que no seja identificado como HTTP, o processo de gerao abortado com a ocorrncia
acima, informando em <httphead> o header informado, e em <url> o endereo informado para a solicitao do WSDL.

Dentre as possveis causas, podemos considerar que a URL informada no corresponde a um servidor HTTP ou de
WEB SERVICES. Para certiticar-se da ocorrncia, abra a URL especificada utilizando um Web Browser.

82. WSCERR072 / HTTP REQUEST ERROR (HEADER) from <URL>


Esta ocorrncia de erro reproduzida na gerao de um cdigo-fonte de Web Services 'Client', utilizando o TOTVS
| Development Studio.

Se d caso o servidor informado, acessado via URL, retorne um pacote HTTP, com um header de retorno HTTP, porm
com um status diferente de 200 (OK). O processo de gerao abortado com a ocorrncia acima, informando em
<HEADER> a primeira linha do cabealho HTTP retornado, e em <url> o endereo informado para a solicitao do
WSDL.

78 Verso 12
Programao ADVPL WebService

Dentre as provveis causas, podemos considerar os status de retorno '403 Forbidden', retornados por proxys que
requerem autenticao ou no permitem o acesso url especificada, o '500 Internal Server Error', que indica uma
ocorrncia interna de erro no servidor, que impossibilitou o retorno do WSDL.

83. WSCERR073 / Build (BUILD) XML Internal Error


Esta ocorrncia reproduzida, na utilizao de um cdigo-fonte Client de Web Services, ao processar o pacote SOAP
recebido como retorno da ao/mtodo solicitado.

O pacote SOAP retornado pelo servio analisado para a alimentao dos parmetros AdvPL. em primeiro momento,
so realizadas as consistncias de cabeaho de protocolo (header) , e em seguida o pacote SOAP desmontado por
um parser interno do TOTVS | Application Server, onde verificada a sintaxe do documento XML ( Veja ocorrncias
WSCERR046 e WSCERR047 ), e a resultante deste processo ser um objeto intermedirio.

Somente se o contedo SOAP retornado pelo servio, contenha um erro estrutural ou sinttico, que no seja detectado
pelo parser interno como um erro ou advertncia, este objeto intermedirio no gerado, o que impossibilita a rotina de
prosseguir o processamento. Esta ocorrncia j foi reproduzida anteriormente, em builds do TOTVS | Application
Server anteriores Dezembro/2003. Em releases posteriores a este, o tratamento dos pacotes de retorno do servio foi
revisado; desde ento esta ocorrncia no mais foi reproduzida.

Esta ocorrncia capturada pelo prprio cdigo-fonte do mtodo, sendo que o mtodo 'Client' chamado retornar .F.
(falso), e a descrio da ocorrncia deve ser recuperada atravs da funo GetWSCError().
Regras para Nomenclatura dos Servios / Estruturas / Dados eMtodos

84. Nomenclatura dos Servios


<Nome_do_servico>

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

85. Nomenclatura de Estruturas


WSSTRUCT
<Nome_da_Estrutura> // Declarao de Estrututras (opcionais)
<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 quando 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 mtodos do servio).

Verso 12 79
Programao ADVPL WebService

86. 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.

*** Restries de uso da instruo ARRAY OF: No permitido o uso da instruo ARRAY OF quando declaramos
dados utilizados para entrada dedados dentro da declarao do servio. Para tal, precisamos criar uma estrutura
intermediria para encapsular o array.

86.1. Tipos de Dados Bsicos

String Dado Advpl do tipo String.


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 eno-inteiros.
Boolean Dado Advpl do Tipo Booleano ( lgico ) .
Dado Advpl do Tipo String Binria , aceitando todos osCaracteres da Tabela ASCII
Base64Binary*
, de CHR(0) a CHR(255)

*** Campos Obrigatrios / Opcionais:

Por default, um campo declarado sem a clusula OPTIONAL 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 parmetrona 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.

80 Verso 12
Programao ADVPL WebService

87. 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 ser
utilizado 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.

Verso 12 81