Microsiga - Advpl - Web Services Com Protheus
Microsiga - Advpl - Web Services Com Protheus
Microsiga - Advpl - Web Services Com Protheus
Revisão: 27/04/2004
Abrangência
O Protheus, a partir da versão AP7, possui ferramentas nativas e integradas com a LIB
de Infra-Estrutura do ERP, para desenvolvimento de aplicações 'Cliente' e 'Server',
utilizando a tecnologia dos Web Services. Para melhor compreensão do assunto, os
tópicos relacionados a ambos foram didaticamente separados em Aplicações Server e
Aplicações Cliente, respectivamente. Nos tópicos 'Comandos' e 'Funções', são abortadas
respectivamente as diretivas e funções da Lib de Infra-estrutura do ERP
disponibilizadas para o desenvolvimento de ambas as aplicações, Cliente e Server. No
tópico 'Exemplos Advpl', são demonstrados os exemplos 'atômicos' de uso das funções e
comandos.
COMANDOS - ENDWSCLIENT
Revisão: 22/04/2004
Abrangência
Sintaxe
ENDWSCLIENT [ self ]
Parâmetros
Descrição
Através desta instrução, encerra-se a declaração de uma classe 'Client' de Web Services,
iniciada com o statement WSCLIENT.
Abrangência
Sintaxe
ENDWSSERVICE [ self ]
Parâmetros
Descrição
Através desta instrução, encerra-se a declaração de uma classe 'Server' de Web Services,
iniciada com o statement WSSERVICE.
Abrangência
Sintaxe
ENDWSSTRUCT [ self ]
Parâmetros
Descrição
Abrangência
Sintaxe
WSCLIENT cClientName
Parâmetros
Descrição
Através desta instrução, inicia-se a declaração uma classe 'Cliente' de Web Services em
Advpl. Esta instrução de declaração é utilizada exclusivamente quando da geração de
um fonte 'Cliente' de Web Services, através do assistente 'Gerar Cliente WebServices...',
disponível no Protheus IDE.
Abrangência
Sintaxe
Parâmetros
Descrição
Utiliza-se esta instrução para declarar uma propriedade de uma classe para
WebServices, 'Cliente' ou 'Server'.
Uma propriedade obrigatoriamente deve ter definida seu nome e tipo, e opcionalmente
podemos definir que a mesma terá tratamento de array e/ou tratamento opcional.
Abrangência
Versão 7.10
Sintaxe
Parâmetros
Descrição
Abrangência
Sintaxe
Parâmetros
Descrição
A declaração de uma classe 'Server' de Web Services deve têr a seguinte estrutura
básica :
ENDWSSSERVICE
Abrangência
Sintaxe
WSSTRUCT cSructName
Parâmetros
Descrição
Através desta instrução , iniciamos a declaração de uma estrutura , a ser utiilzada por
um Web Service 'Server', em Advpl . Dentro de uma estrutura, devemos apenas
declarar as propriedades que a mesma contém, através da instrução WSDATA.
Devemos finalizar a declaração da estrutura utilizando o comando ENDWSSTRUCT.
Abrangência
#include 'Protheus.ch'
#include 'ApWebSrv.ch'
Else
If !empty(cSoapFCode)
// Caso a ocorrência de erro esteja com o fault_code
preenchido ,
// a mesma teve relação com a chamada do serviço .
MsgStop(cSoapFDescr,cSoapFCode)
Else
// Caso a ocorrência não tenha o soap_code preenchido
// Ela está relacionada a uma outra falha ,
// provavelmente local ou interna.
MsgStop(cSvcError,'FALHA INTERNA DE EXECUCAO DO
SERVIÇO')
Endif
Endif
oService := NIL
Return
Exemplo de uso da função
GETWSCVER
Revisão: 22/04/2004
Abrangência
Abrangência
Abrangência
Exemplo 01
(...)
If ::Indice > 1024
SetSoapFault('Argumento Inválido','O índice não pode ser maior que
1024.')
Return .f.
Endif
(...)
Exemplo 02
(...)
If !File('\extras\modelo.cfg')
SetSoapFault('Serviço Indisponível','',SOAPFAULT_RECEIVER)
Return .f.
Endif
(...)
Funções – GETWSCERROR
Revisão: 22/04/2004
Abrangência
Versão 7.10
Sintaxe
Parâmetros
Retorno
Tipo Descrição
Retorna a informação do erro solicitada através do parâmetro nInfo . Caso
(Qualquer) nInfo seja 1 , 2 ou 3 , o retorno é do tipo String . Caso seja tipo 4 , será
retornado um Objeto XML.
Descrição
Caso a execução de um método 'Client' de Web Services retorne .F., deve ser utilizada a
função GetWSCError(), para identificar a origem da ocorrência. Durante uma operação
de execução de um método 'Client' de WebServices, são possíveis ocorrências de erro
das seguintes naturezas, em momentos específicos :
1 - Antes do pacote 'SOAP',com os parâmetros e dados pertinentes à requisição, ser
enviado.
Durante a montagem do pacote SOAP, para envio dos parâmetros do método solicitado
ào servidor, é realizada uma consistência do(s) parâmetro(s) a serem enviados, tais
como a obrigatoriedade do parâmetro e o tipo Advpl com o qual o parâmetro foi
alimentado. Se e somente se os parâmetros informados sejam válidos, o pacote SOAP
montado é postado no servidor de WebServices.
Uma vez enviado ao Server, a interface client entra em modo 'stand-by', aguardando por
um pacote de retorno SOAP do Server. Após a portagem, caso o pacote devolvido não
esteja em conformidade com a declaração do serviço, ou o servidor devolveu um html
ao invés de um xml 'SOAP'.
4 - Erro Interno de execução : Qualquer ocorrência de erro fatal, seja antes ou depois do
envio da requisição, cuja origem não seja tratada ou prevista pelas rotinas 'Client' do
Serviço, como por exemplo um retorno de um pacote XML com erro de sintaxe ou
estruturalmente inválido .
Funções – GETWSCVER
Revisão: 22/04/2004
Abrangência
Sintaxe
Retorno
Tipo Descrição
cVersion corresponde à versão do Build da Lib 'Cliente' de WebServices,
Caracter
copmpilada no repositório em uso atualmente.
Descrição
Abrangência
Sintaxe
Retorno
Tipo Descrição
cVersion corresponde à versão do Build da Lib 'Server' de WebServices,
Caracter
compilada no repositório em uso atualmente.
Descrição
Abrangência
Sintaxe
SETSOAPFAULT ( < cError > , < cString > , [ nFCode ] , [ cFactor ] , [ cFDetail ] ) -->
.T.
Parâmetros
Retorno
Tipo Descrição
Lógico Esta função sempre retorna .T. (true)
Descrição
Dentre as razões pelas quais este tratamento é utilizado, podemos citar ocorrências
relacionadas a validade dos dados, recebidos no pacote de parametros enviados pelo
'Cliente', como parâmetros invalidos ou fora da faixa de dados permitida pela rotina, ou
ocorrências relacionadas ao 'Server', como a falta de um determinado recurso no server
para o processamento, como uma falha de acesso a base de dados, ou qualquer outra
razão implementada no serviço.
Abrangência
Versão 8.11
Sintaxe
Parâmetros
Retorno
Tipo Descrição
Data Retorna a data identificada na String cDateTime
Descrição
A partir de uma string Advpl, contendo uma data no formato 'soap' DateTime, a função
SoapDtGetD() retorna a data correspondente em Advpl, como um conteúdo do tipo 'D'
Date.
Funções – SOAPDTGETT
Revisão: 22/04/2004
Abrangência
Versão 8.11
Sintaxe
Parâmetros
Retorno
Tipo Descrição
Caracter Retorna o horário identificado, no formato HH:MM:SS
Descrição
A partir de uma string Advpl, contendo uma data no formato 'soap' DateTime, a função
SoapDtGetD() retorna o horário correspondente em Advpl, como um conteúdo do tipo
'C' Character, no formato HH:MM:SS
Funções – SOAPDTMOUNT
Revisão: 22/04/2004
Abrangência
Versão 8.11
Sintaxe
Parâmetros
Retorno
Tipo Descrição
String 'SOAP', correspondendo à Data e Horários especificados, no
Caracter
formato DATETIME.
Descrição
Abrangência
Sintaxe
Parâmetros
Retorno
Tipo Descrição
A função retorna uma referência à uma nova instância da estrutura passada
Objeto como parâmetro.
Caso a estrutura não exista, a função retornará NIL.
Descrição
Através da função WSClassNew(), é possível criar uma nova instância de uma estrutura
(WSSTRUCT) de WebServices, criada para ser utilizada como uma estrutura 'Server'. A
utilização desta instução, para criar instâmcias de uma estrutura usada numa aplicação
'Server' de WebServices em AdvPl, evida a necessidade de criação de um método
'NEW' para cada estrutura.
Observação : Embora seja possível, não se deve utilizar esta instrução para inicializar
uma estrutura criada em um fonte 'Client' em Advpl; pois as estruturas client possuem
as definições do método NEW() de cada uma, com as devidas inicializações de
parâmetros inetrentes ao serviço.
Funções – WSDLDBGLEVEL
Revisão: 22/04/2004
Abrangência
Sintaxe
Parâmetros
Retorno
Tipo Descrição
(NULO) Esta função sempre retorna NIL
Descrição
Observações
Abrangência
Abrangência
Observação : Esta configuração exige que a seção HTTP não esteja configurada no
servidor Protheus. Esta configuração irá internamente habilitar o serviço de HTTP e
configurar o processo de resposta para WebServices.
[WEBSERVICES]
Uma vez habilitada a configuração para Web Services, obtemos o acesso a uma
interface HTTP de consulta ao índice de serviços publicados. Para tal, basta re-iniciar o
servidor Protheus após a configuração ser realizada, abrir um Web Browser ( por
exemplo, o Internet Explorer ), e acessar o link http://<servidor>/wsindex.apw . No caso
do exemplo de configuração acima, basta digitarmos http://localhost/wsindex.apw , e
nos será apresentada a interface de consulta áo índice dos serviços.
Por exemplo, caso o host configuradi para os wehservices fio o host local (localhost) ,
devemos acessar o link http://localhost/wsindex.apw . Utilizando o Protheus8, será
mostrada uma tela semelhante à vista abaixo:
Cada serviço ativo é um link para uma página, onde são mostrados todos os métodos do
serviço, e onde é apresentado também um link através do qual o servidor Protheus
fornecerá a descrição do serviço (WSDL). Logo abaixo é mostrado o exemplo da tela de
detalhes do serviço CFGTABLE.
O Link para a obtenção do WSDL encontra-se acima em 'CFGTABLE.apw?WSDL'.
Basta clicar neste link , que uma nova janela do Browser será aberta, mostrando o
documento WSDL deste serviço.
Cada método do serviço disponibilizado também é um link, para uma página onde são
mostrados os exemplos de pacotes SOAP que este método especificamente espera para
recepção de parâmetros, e o modelo do pacote de retorno do serviço.
Caso o fonte-Client Advpl deste serviço seja gerado e esteja compilado no repositório
atual, a inteface de consulta habilita a funcionalidade de teste do WebService, através da
interface http, mostrando no final da tela o botão "testar". Ao clicar neste, é montada
uma tela em HTML para que os parâmetros do serviço sejam preenchidos. Após os
parâmetros preenchidos e submetidos, o pacote de retorno do serviço e seu respectivo
status é retornado no Browse.
02. Criando um WebService 'Server' com
o Protheus
Revisão: 23/04/2004
Abrangência
Porém, antes de partir para a codificação, é fortemente recomendado que sejam lidos os
documentos deste tópico, onde são abortados em detalhes a infra-estrutura envolvida
com os WebServices, seu funcionamento e as particularidades de comportamento da
classe de WebServices.
03. Regras para codificação de um
WebService
Revisão: 30/04/2004
Abrangência
Visão Geral
O nome de uma classe para WebServices, deve ser iniciado por um caractere alfabético,
e deve conter apenas os caracteres alfabéticos compreendidos entre A e Z, os caracteres
numéricos compreendidos entre 0 e 9, podendo também ser utilizado o caracter “_”
(underline ) . Um serviço não pode ter um nome de uma palavra reservada Advpl, e não
pode ter o nome igual a um tipo básico de informação.
Nomenclatura de Estruturas
Abrangência
Observações
Abrangência
Definição de Estrutura
Uma estrutura ( também conhecida por Complex Type ), constitui uma classe especial
do Advpl, chamada WSSTRUCT, criada especificamente para WebServices. Devemos
criar uma estrutura quando temos a necessidade de agrupar mais de uma informação,
incluindo tipos básicos e/ou outras estruturas.
Abrangência
Definição
Parâmetros
Retorno
Caso o retorno efetivo do método seja .F. (False), isto indica à LIB que, por alguma
razão tratada no fonte do método, não foi possível a execução do método. Neste caso,
devemos especificar, antes do retorno, através da função SetSoapFault(), a causa da
impossibilidade de processamento.
Exemplo
If dow(date())=1
// Seta um soap_fault, informando que este serviço não é disponível aos domingos
SetSoapFault('Metodo não disponível','Este serviço não funciona aos Domingos.')
// e retorna .F., indicando que o serviço não foi processado com sucesso.
Return .f.
Endif
Atenção :
Abrangência
Abrangência
Dado que, a camada da lib, responsável pela interpretação do pacote SOAP recebido
pelo serviço, já se encarrega de validar o formato do pacote e conteúdos obrigatórios,
um Web Service escrito em Advpl deve, antes de realizar o processamento proposto,
validar se o conteúdo dos parâmetros está dentro da faixa de dados esperada, e
condizentes com o esperado; para então realizar o processamento e retornar ào client
solicitante.
Abrangência
Codificando o Serviço
Para codificar um serviço, devemos utilizar o Protheus IDE, e criar um novo arquivo de
programa, e nele escrever o serviço. A numeração disposta à esquerda do código-fonte
é meramente ilustrativa, não devendo ser digitada. Ela é utilizada mais abaixo, onde este
código é detalhado linha a linha.
1 #INCLUDE 'PROTHEUS.CH'
2 #INCLUDE 'APWEBSRV.CH'
3
4 WSSERVICE SERVERTIME
5 WSDATA Horario as String
6 WSMETHOD GetServerTime
7 ENDWSSERVICE
8
9 WSMETHOD GetServerTime WSRECEIVE NULLPARAM WSSEND Horario
WSSERVICE SERVERINFO
10 ::Horario := TIME()
11 Return .T.
Após compilado o serviço, deve ser acessada novamente a página de índice de serviços
(wsindex.apw), e verificar se o novo serviço compilado lá se encontra.
Testando o Serviço
A partir da versão Protheus 8, podemos apenas gerar um fonte 'Client' desta classe, e
compilá-lo no mesmo repositório do ambiente utilizado pelo WebServices 'Server', que
a própria interface de Índice de Serviços irá permitir o teste do mesmo.
Falhas de Carga dos Serviços
Revisão: 06/05/2004
Abrangência
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando um parâmetro [XXX] foi utilizado como parâmetro de entrada
direto de um WebService, porém o mesmo foi declarado com tratamento de 'Array Of'.
Não é suportado receber diretamente um array como parâmetro de um método de
WebServices 'Server'.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando uma propriedade da classe server foi especificado como sendo uma
estrutura ( tipo não-básico), porém a declaração da estrutura não foi localizada.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando o nome de uma determinada estrutura [XXX] foi especificado com
um nome igual a um tipo básico de informação. Esta ocorrência invalida apenas o
serviço que utiliza a determinada estrutura.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando um determinado método [XXX] foi especificado com algum
parâmetro de entrada [YYY], cuja declaração não foi encontrada como uma propriedade
no fonte construtor do serviço.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando um determinado método [XXX] foi especificado com uma estrutura
[YYY], cuja declaração não foi encontrada como uma propriedade no fonte construtor
do serviço.
Abrangência
[XXX] : [YYY] : Erro de Método : Estrutura de Retorno não pode ser recebida como
parâmetro.
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando um determinado método [XXX] foi declarado para receber uma
estrutura [YYY] e retornar a mesma estrutura [YYY] . Isto não é suportado pelos
WebServices do Protheus.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando um determinado método [XXX], referente ào serviço [YYY], foi
codificado, porém não foi declarado no construtur do Web Service. Esta ocorrência
invalida apenas o serviço que utiliza a determinada estrutura.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando o nome de uma determinada método [XXX] foi especificado com
um nome igual a um tipo básico de informação. Esta ocorrência invalida apenas o
serviço que utiliza o determinado método.
Abrangência
Durante a etapa de validação dos serviços, na carga dos WebServices, esta ocorrência é
reproduzida quando temos uma cadeia de estruturas, compostas por tipos básicos e
outras estruturas, e a declaração das estruturas entre em redundância. Por exemplo,
declaramos a estrutura <A>, que tem dentro dela uma outra propriedade que é do tipo
<A>, ou a estrutura <A> têm uma propriedade de tipo <B>, e <B> por sua vez tem uma
propriedade do Tipo <A>.
Abrangência
Abrangência
Quando não definimos esta URL, a lib de WebServices identifica automaticamente sob
qual host o serviço foi acessado. Esta operação não é possível quando o header HTTP
do pacote informe uma operação diferente de "GET" ou "POST", ou o servidor Protheus
está sendo execudado em sua versão ISAPI, em conjunto com o Microsoft (R)
Information Service.
Caso não seja possível identificar o host sob o qual a chamada foi realizada, o
WebService não é processado, e o processamento é abortado com a ocorrência de erro
acima.
Ocorrências de Erro Fatal - BUILD [XXX]
USING WEBSERVICES HTTPS NOT
SUPPORTED
Revisão: 22/04/2004
Abrangência
Abrangência
Uma url é considerada inválida, caso ela não seja iniciada com 'http://' ou 'https://', seja
finalizada com um caractere não-alfanumérico ou diferente de '/', ou possua caracteres
acentuados ou espaços. São considerados válidos apenas caracteres alfanuméricos, e os
caracteres ':' (dois pontos), '.' (ponto), '/' (barra) e '-' (hífen).
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Caso esta ocorrência seja reproduzida, ela indica que ocorreu uma falha não tratada, ou
uma impossibilidade de geração do pacote de retorno. Até o momento, esta ocorrência
não foi reproduzida sob nenhuma condição.
Ocorrências de Erro Fatal - [SVC] :
[METHOD] as [X] : Tipo Inesperado de
Ret..
Revisão: 06/05/2004
Abrangência
Abrangência
Definição de Client
Embora existam Web Services que podem ser acessados via Http “direto”, apenas
passando parâmetros via URL, o ‘client’ de Web Services do Protheus têm seu foco e
recursos direcionados apenas a serviços que possuam interface de comunicação que
realize POST de pacotes de dados XML em formato SOAP. O Protheus possui
ferramentas e infra-estrutura incorporadas que permitem esta integração.
Para tal, basta obtermos o endereço internet ( URL ) do WSDL desejado, criar um novo
arquivo-fonte, e acessar o menu 'Ferramentas -> Gerar Cliente WebServices...'. Para
cada serviço que se tenha a necessidade de geração de um fonte client, recomenda-se
fortemente que cada fonte client seja gerado em um arquivo independente e exclusivo
para este fim, e que de forma alguma este fonte gerado pelo assistente seja alterado.
Abrangência
A maioria das definições WSDL dos serviços disponiveis na WEB são acessados
através de uma URL, em geral apontando para o servidor onde o serviço está publicado,
contendo o nome do serviço na url e um sufixo ?WSDL ou .WSDL na Url. Nâo há
padrão definido para tal, de modo que cada servidor pode disponibilizar ( ou não ) o
WSDL de uma maneira diferente . O WSDL de alguns serviços restritos ( como por
exemplo o serviço de busca na base de dados do Google ) são disponibilizados em
arquivo ASCII, enviados por e-mail, apos um cadastro no site e autorização da empresa
para o uso do serviço por ele provido.
Abrangência
Ao ser gerado um fonte ‘client’ para um Web Service, este fonte conterá as
definições dos metodos do serviço, a(s) estrutura(s) utilizada(s) no mesmo, e a(s)
classe(s) intermediária(s) de uso interno para montagem e desmontagem da(s)
estrutura(s) ; visando o encapsulamento de todos os tratamentos de envio e recebimento
de dados através de pacotes SOAP.
Para geração do fonte ‘client’ em Advpl para utilizar este serviço, é necessário
criar um novo arquivo .PRX no IDE, especificamente para conter as classes deste
serviço . Então, deve ser acessado o menu “Ferramentas”, opção “Gerar Ciente
Webservices” . Neste momento, será mostrado na tela um pop-up semelhante ao
mostrado abaixo :
No campo de entrada de dados, deve ser digitada a URL de onde o servidor irá
obter a definição do WebSErvice. ( no nosso caso,
http://localhost/SERVERTIME.apw?WSDL ) . Após a confirmação da janela acima,
caso o processamento ocorra com suicesso, na janela de mensagens do Ide será
mostrado um texto semelhante ao abaixo :
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'APWEBSRV.CH'
/* -------------------------------------------------------------------------------
WSDL Service WSSERVERTIME
------------------------------------------------------------------------------- */
--- declaração da Classe ‘client’ do WebService, com metodos e propriedades utilizadas ---
WSCLIENT WSSERVERTIME
WSMETHOD NEW
WSMETHOD GETSERVERTIME
ENDWSCLIENT
/* -------------------------------------------------------------------------------
WSDL Method GETSERVERTIME of Service WSSERVERTIME
------------------------------------------------------------------------------- */
--- Definição do método, que recebe os parâmetros de chamada, executa o serviço e alimenta
as propriedades de retorno do metodo, contendo os encapsulamentos necessários para
tratamento de excessões ---
BEGIN WSMETHOD
END WSMETHOD
oXmlRet := NIL
Return .T.
O fonte acima constitui uma Classe em Advpl, gerada para realizar a interface
com a classe original publicada no Server, já realizando os tratamentos adequados para
realizar a comunicação via http com o servidor onde o serviço está publicado. Vale
obvervar que, as linhas em negrito no fonte acima nâo foram inseridas pelo assistente do
IDE, mas acrescentadas a este documento para fins didáticos.
Abrangência
Passo 3 : Criar um fonte que utilize esta classe para utilização do WebService.
Agora, é necessário criar um novo arquivo no IDE, e montar uma função para
utilizar a classe de Web Services ‘client’ para obter o horário no servidor.
1 #INCLUDE 'PROTHEUS.CH'
2
3 User Function TestClient()
4 Local oSvc := NIL
5
6 oSvc := WSSERVERTIME():New()
7
8 If oSvc:GETSERVERTIME()
9 alert('Horário no Servidor : '+ oSvc:cGETSERVERTIMERESULT)
10 Else
11 alert('Erro de Execução : '+GetWSCError())
12 Endif
13
14 Return
Abrangência
Abrangência
xmlns='http://automan:8000/webservice/'><GETSERVERTIMERESULT>10:37:1
0</GETSERVE
RTIMERESULT></GETSERVERTIMERESPONSE></soap:Body></soap:Envelope
>
-------------------------------------------------------------------------------
Fim Thread (siga0984, AUTOMAN) BytesIn 73 BytesOut 75
Abrangência
Até o momento, são suportadas as gerações de código Advpl para WebServices 'Client',
que utilizam os tipos básicos de dados listados abaixo. Para permitir a manipulação de
cada tipo, utilizando variáveis Advpl, são utilizados os tipos básicos do Advpl para
tratar simultaneamente mais de um tipo de dado dos pacotes 'SOAP' dos WebServices.
Os tipos abaixo são disponibilizados em Advpl através de uma variável de tipo 'N'
Numérica
INT
INTEGER
BYTE
FLOAT
DOUBLE
UNSIGNEDLONG
UNSIGNEDINT
DECIMAL
LONG
Os tipo abaixo é disponibilizado em Advpl através de uma variável de tipo 'D' Data
DATE
Os tipos abaixo são disponibilizados em Advpl através de uma variável de tipo 'C'
Character
STRING
DATETIME
CHAR (**)
BASE64BINARY
Os tipo abaixo é disponibilizado em Advpl através de uma variável de tipo 'L' Logica
BOOLEAN
WSCERR000 / WSDL não suportado.
Existe mais de ..
Revisão: 22/04/2004
Abrangência
Versão 8.11
Abrangência
Versão 8.11
Abrangência
Versão 8.11
STRING
FLOAT
DOUBLE
DECIMAL
INT
INTEGER
LONG
UNSIGNEDINT
UNSIGNEDLONG
Abrangência
Versão 8.11
Abrangência
Versão 8.11
Abrangência
Versão 8.11
Esta é uma ocorrência de erro interna do 'engine' de geração de código-fonte Advpl, não
reproduzida até o momento. Quando do processamento de um WSDL, os parâmetros e
mensagens especificadas no WSDL são identificados internamente como parâmetros de
entrada , parâmetro de saída , ou entrada e saida. Caso, após a análise inicial de
parâmetros, algum parâmetro não seja enquadrado nestas definições, o processamento
de geração é abortado com a ocorrência acima.
WSCERR010 / [STRUCT_TYPE]
Estrutura / Tipo inc ...
Revisão: 22/04/2004
Abrangência
Versão 8.11
Abrangência
Versão 8.11
Abrangência
Esta é uma ocorrência de erro interna do 'engine' de geração de código-fonte Advpl, não
reproduzida até o momento. Quando do processamento de um WSDL, os parâmetros e
mensagens especificadas no WSDL são identificados internamente como parâmetros de
entrada , parâmetro de saída , ou entrada e saida. Caso, após a análise inicial de
parâmetros, algum parâmetro não seja enquadrado nestas definições, o processamento
de geração é abortado com a ocorrência acima.
Abrangência
Esta ocorrência poderia ser causada por uma falha na validação inicial do WSDL, ou
pela declaração de uma propriedade do tipo 'NULLPARAM'; e até o momento não foi
reproduzida.
WSCERR015 / Node [XXX] as [YYY] on
SOAP Resp ...
Revisão: 28/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERR016 / Requisição HTTPS não
suportada ...
Revisão: 28/04/2004
Abrangência
Para gerar um fonte 'Client' de WebServices, que utilize o protocolo HTTPS, o Build do
Protheus deve ser atualizado.
WSCERR017 / HTTP[S] Retuisição
retornou [NIL]
Revisão: 28/04/2004
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Quando deste processamento, caso uma seção de asmarração ( binding ) não seja
localizado para uma operação especificada no WSDL, e a mesma não seja encontrada
no WSDL, o mesmo é considerado inválido, e o processo de geração é abortado com a
mensagem acima, identificando a mensagem não encontrada em [BIND_INFO].
WSCERR026 / TARGETNAMESPACE
não definido no WSDL.
Revisão: 28/04/2004
Abrangência
Abrangência
Quando deste processamento, caso uma operação / método do WebService não seja
encontrada na seção de amarração ( binding ), o documento WSDL é considerado
inválido, e o processo de geração é abortado com a mensagem acima, identificando a
operação não encontrada em [OPER_INFO].
WSCERR028 / [PORT_INFO] PortType
não Encontrado ..
Revisão: 28/04/2004
Abrangência
Quando deste processamento, caso uma operação / método do WebService não seja
encontrada na seção de portas do WSDL ( PortType ), o documento WSDL é
considerado inválido, e o processo de geração é abortado com a mensagem acima,
identificando a porta não encontrada em [PORT_INFO].
WSCERR029 / [PORT_INFO] PortType
não contém oper..
Revisão: 28/04/2004
Abrangência
Abrangência
Quando deste processamento, caso ima determinada estrutura seja identificada como
sendo externa ao WSDL atual, referenciada por um IMPORT ou REF; se a estrutura
estiver declarada no WSDL sem o referido namespace, o WSDL é considerado inválido,
e o processo de geração é abortado com a mensagem acima, identificando a estrutura
incompleta em [STRUCT_NAME]
WSCERR032 / [SHORT_NS]
NAMESPACE não encontrado.
Revisão: 28/04/2004
Abrangência
Abrangência
Abrangência
Abrangência
Abrangência
Quando da validação de estruturas complexas, caso a mesma não possua tipo definido, e
não seja uma referência externa ao WSDL, ela deve ser uma referência ao próprio
SCHEMA. Caso seja especificada qualquer outro tipo de referência, o WSDL não é
suportado, e o processo de geração é abortado com a mensagem acima.
WSCERR037 / [TYPE] Estrutura
Interna Inesperada.
Revisão: 28/04/2004
Abrangência
Quando da validação de estruturas complexas, caso a mesma tenha passado por todas as
interpretações cabíveis a uma estrutura, e mesmo assim não foi possível identificá-la, o
WSDL é considerado inválido, e o processo de geração é abortado com a mensagem
acima, identificando a estrutura em [TYPE].
WSCERR038 / [PARAM] WSDL
inválido ou não suportado
Revisão: 28/04/2004
Abrangência
Quando da validação de estruturas complexas, caso a mesma tenha passado por todas as
interpretações cabiveis de uma estrutura, porém seu nome interno não foi declarado, o
WSDL é considerado inválido, e o processo de geração é abortado com a mensagem
acima, identificando o parâmetro de origem da mesma em [PARAM].
WSCERR039 / Unexpected DumpType
[X]
Revisão: 28/04/2004
Abrangência
Abrangência
Abrangência
WSCERR041 / [NOTNIL_MESSAGE]
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERR042 / URL LOCATION não
especificada.
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERR045 / Retorno VAZIO de POST
: URL <URL> ...
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERR046 / XML Warning
[XML_WARNING] ( POST em ..
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERR047 / XML Error
[XML_ERROR] ( POST em ...
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError(). Veja maiores detalhes na função GetWSCError(), pois
ela oferece a possibilidade de recuperar os elementos principais de retorno de um pacote
SOAP_FAULT isoladamente.
WSCERR048 / SOAP FAULT
[FAULT_CODE] ( POST em ...
Revisão: 29/04/2004
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, para a alimentação dos parâmetros
Advpl, caso o pacote de retorno contenha uma excessão do tipo SOAP FAULT, isto
indica que houve uma falha de processamento do serviço no servidor.
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERR049 / SOAP RESPONSE
(RPC) NOT FOUND.
Revisão: 29/04/2004
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, para a alimentação dos parâmetros
Advpl, caso o serviço utilize um soapStyle = RPC, e o node de resposta não seja
encontrado no pacote, o pacote de resposta é considerado inválido, e o processamento é
abortado com a mensagem acima.
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR050 / SOAP RESPONSE REF
<NODE_REF> (RPC) ...
Revisão: 29/04/2004
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, para a alimentação dos parâmetros
Advpl, caso o serviço utilize um soapStyle = RPC, e o node de resposta aponte para un
outro node via referência, e este novo node não seja encontrado no pacote, o pacote é
considerado inválido e o processamento é abortado com a mensagem acima, mostrando
o identificador de referência nao encontrado em <NODE_REF>
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR051 / SOAP RESPONSE
RETURN (RPC) NOT FOUND.
Revisão: 29/04/2004
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, para a alimentação dos parâmetros
Advpl, caso o serviço utilize um soapStyle = RPC, e o node de retorno não aponte para
nenhuma referência, o retorno deve estar dentro do XML, no nível do node de resposta .
Caso o node de retorno não seja encontrado neste nível, o pacote de retorno é
considerado inválido, e o processamento é abortado com a mensagem acima .
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR052 / Enumeration FAILED on
[STRUCT_TYPE]
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
Verifique o código-fonte client gerado em advpl, para obter a lista de parâmetros válido;
e certifique-se que o parâmetro especificado está alimentado de forma correta.
WSCERR053 / WSRPCGetNode
(Object) not found.
Revisão: 29/04/2004
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, para a alimentação dos parâmetros
Advpl, caso o serviço utilize um soapStyle = RPC, no momento de análise de um
retorno de uma estrutura complexa, caso o node correspondente a estrutura não seja
localizado no pacote de retorno, o mesmo é considerado inválido, e o processamento é
abortado com a mensagem acima.
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR054 / Binding SOAP não
localizado no WSDL.
Revisão: 29/04/2004
Abrangência
Durante a geração do fonte, uma vez identificado o serviço, o gerador de código procura
a declaração das amarrações do serviço (BINDINGS) no WSDL. Dentre as amarrações
encontradas, apenas são processadas aquelas que especificam o transporte de dados para
o serviço no formato SOAP.
Caso não exista nenhuma amarração no serviço, que especifique a utilização do SOAP,
o processo de geração do fonte ‘client’ é abortado, retornando esta ocorrência . A infra-
estrutura Client de WebServices do Protheus não suporta a geração de fontes-client de
serviços que não utilizem pacotes XML - SOAP para a troca de informações.
WSCERR055 / Invalid Property Type
(X) for [PARAM]
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, caso o mesmo não contenha um
envelope ( soap-Envelope ) de resposta, o retorno é considerado invpalido, e o
processamento é abortado com a mensagem acima .
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR057 / Invalid XML-Soap
Server Response : ...
Revisão: 29/04/2004
Abrangência
Ao analizar o pacote SOAP retornado pelo serviço, caso não seja possível determinar o
prefixo do SOAP Envelope utilizado, o retorno é considerado inválido, e o
processamento é abortado com a mensagem acima .
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR058 / Invalid XML-Soap
Server Response : ...
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR059 / Invalid XML-Soap
Server Response : ...
Revisão: 29/04/2004
Abrangência
Semelhante a ocorrência WSCERR056, esta ocorrência indica que não foi possível
deterrminar o corpo (soap-body) do pacote SOAP retornado pelo serviço; o que invalida
o pacote de retorno, sendo o processamento abortado com esta ocorrência de erro.
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR060 / Invalid XML-Soap
Server Response : ...
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR061 / Invalid XML-Soap
Server Response : ...
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR062 / Invalid XML-Soap
Server Response : ...
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR063 / Argument error : Missing
field [NODE]
Revisão: 29/04/2004
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR064 / Invalid Content-Type
return (HTTP_HEAD
Revisão: 29/04/2004
Abrangência
Esta ocorrência indica que, o header HTTP de retorno do serviço, postado em <URL>,
veio com o conteúdo 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 ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada através da
função GetWSCError()
WSCERR066 / Invalid INVALID WSDL
Content-Type (...
Revisão: 29/04/2004
Abrangência
Abrangência
Esta ocorrência indica que, o header HTTP de retorno do WSDL, solicitado através do
link <URL>, veio com o conteúdo do header HTTP sem a informação do tipo de
conteúdo 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
WSCERR068 / NOT XML SOURCE
from <URL>
Revisão: 29/04/2004
Abrangência
Esta ocorrência indica que, o documento retornado pelo servidor de webservices não se
trata de um XML válido para ser analizado. O documento WSDL deve sempre iniciar
com o node da declaração do XML ( <?XML ...) . Caso não possua esta informação, o
primeiro node deve obrigatoriamente ser a definição do serviço ( <DEFINITIONS ). Se
o documento WSDL retornado não atender à estes requisitos, o processamento é
abortado com a mensagem acima.
WSCERR069 / BYREF [PARAM] WITH
NO INPUT ARGUMENT :
Revisão: 29/04/2004
Abrangência
Abrangência
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
Abrangência
Quando da geração de Códigos fonte Advpl, caso o servidor informado, acessado via
URL, retorne um pacote HTTP, com um header de retorno que não seja identificado
como HTTP, o processo de geração é abortado com a ocorrência acima, informando em
<httphead> o header informado, e em <url> o endereço informado para a solicitação
do WSDL.
Dentre as possíveis causas, podemos considerar que a URL informada não corresponde
a um servidor HTTP ou de WEB SERVICES. Para certiticar-se da ocorrência, abra a
URL especificada utilizando um Web Browser.
WSCERR072 / HTTP REQUEST
ERROR (HEADER) from <URL>
Revisão: 29/04/2004
Abrangência
Quando da geração de Códigos fonte Advpl, caso o servidor informado, acessado via
URL, retorne um pacote HTTP, com um header de retorno HTTP, porém com um satus
diferente de 200 (OK) , o processo de geração é abortado com a ocorrência acima,
informando em <HEADER> a primeira linha do cabeçalho HTTP retornado, e em <url>
o endereço informado para a solicitação do WSDL.
Abrangência
O pacote SOAP retornado pelo serviço é analizado para a alimentação dos parâmetros
Advpl. em primeiro momento, são realizadas as consistências de cabeçaçho de
protocolo (header) , e em seguida o pacote SOAP é desmontado por um parser interno
do Protheus, onde é verificada a sintaxe do documento XML ( Veja ocorrências
WSCERR046 e WSCERR047 ), e a resultante deste processo será um objeto
intermediário.
Se e somente se, o conteúdo SOAP retornado pelo serviço, contenha um erro estrutural
ou sintático, que não seja detectado pelo parser interno como um erro ou
advertência, este objeto intermediário não é gerado, o que impossibilita a rotina de
prosseguir o processamento. Esta ocorrência já foi reproduzida anteriormente, em builds
do Protheus anteriores à Dezembro/2003. Em releases posteriores a este, o tratamento
dos pacotes de retorno do serviço foi revisado; desde então esta ocorrência não mais foi
reproduzida.
Esta ocorrência é capturada pelo próprio fonte do método, sendo que o método 'Client'
chamado retornará .F. (falso), e a descrição da ocorrência deve ser recuperada atravpés
da função GetWSCError()
WSCERRINT /
[ERROR_DESCRIPTION]
Revisão: 29/04/2004
Abrangência
WSCERRINT / [ERROR_DESCRIPTION]
Se, e somente se, o tratamento de erro for acionado por uma ocorrência inesperada, em
algum ponto do processamento do método da classe Client, a descrição da ocorrência de
erro é capturada, e mostrada em <ERROR_DESCRIPTION> , e a ocorrência é
prefixada com o código WSCERRINT ( Web Services Client Internal Error )
Abrangência
'Fonte Client' : Código fonte Advpl, gerado pela ferramenta do IDE 'Gerar Cliente
WebServices...', a partir de uma definição WSDL publicada em um servidor HTTP ou
disponibilizada em um arquivo .WSDL.