131663252 Web Services Com o Erp Microsiga Protheus

download 131663252 Web Services Com o Erp Microsiga Protheus

of 46

Transcript of 131663252 Web Services Com o Erp Microsiga Protheus

  • Web Services com o ERP Microsiga Protheus Contedo da TOTVS Developer Network revisado em 21/05/2012 que abrange as verses 10 e 11

    Organizado por Armando Lima.

    O ERP Microsiga 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 Client, respectivamente.

    Nos tpicos Guia de referncia dos comandos AdvPL, da linguagem AdvPL, e Funes de WebServices, do

    Framework Microsiga Protheus, 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 apresentados os exemplos de uso das funes e comandos.

    Web Services 'Server'

    01. Web Services 'Server' - Configurao

    Um Web Services 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 Services:

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

    Application Server.

    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.

    Importante: Se estiver utilizando o produto Microsiga Protheus 8.11, deve-se utilizar o assistente de configurao do

    servidor Microsiga Protheus - MP8WIZARD, para instalar e configurar o ambiente de Web Services.

    A seguir, observe um exemplo de como configurar o servidor TOTVS | Application Server para Web Services, utilizando

    a seo [WebServices].

  • Observao: Esta configurao exige que a seo [HTTP] no esteja configurada no TOTVS | Application Server. Pois, essa

    configurao ir internamente habilitar o servio de HTTP e configurar o processo de resposta para o Web Services.

    Exemplo (Configuraes do arquivo appserver.ini)

    [WebServices]

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

    Environment=EnvTeste (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 das requisies.

    NameSpace=http://localhost (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 (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 Microsiga 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.

    Exemplo (Configurao do protocolo)

    [HTTP]

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

    Port=80 (Obrigatrio) - Indica qual a porta que ser utilizada pelo service.

    Path=c:\P10\Http Configurao do host da estao

    localDefaultpage=wsindex.apw (Obrigatrio) - Indica a pgina inicial que ser exibida aps a configurao do service. Essa

    pgina apresenta todos os WebServices habilitados e no habilitados.Ela s exibida se todas as configuraes foram

    efetuadas com sucesso.

    ResponseJob=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 ambiente (environment) do servidor Microsiga Protheus que ir atender aos 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 Services (padro=0).

    PrepareIn=01,01 (Obrigatrio) - Permite especificar qual empresa e filial, do ERP, sero utilizados para a montagem do

    ambiente de processamento das requisies.

    NameSpace=http://localhost/ (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/ (Opcional) - Permite especificar a URL responsvel pelo atendimento s solicitaes de

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

  • Observao: Note que a porta utilizada no exemplo acima foi a 80, a porta mais genrica de todas. Por isso no foi

    necessrio inclu-la nos URLs de localhost. Se fosse utilizada a porta 81, ento a URL seria localhost:81.

    Release 12/08/2010

    Foram criados mais dois parmetros de registro de log de profiler de execuo de processos, para auxiliar na

    identificao de ocorrncias de performance no processamento de requisies, parmetro PROFILE (padro=0) e

    PROFILETIMER (padro=2). Tais parmetros so considerados a partir da atualizao da LIB/Framework AdvPL, AdvPL WSDL

    Server 1.100812, e da atualizao do TOTVS | Application Server com build igual ou superior a 7.00.090818P. Para registro

    detalhado das chamadas de funo por requisio, deve-se atualizar o TOTVS | Application Server para a build igual ou

    superior a 7.00.100812P. Ao habilitar o parmetro PROFILE=1, na configurao do job de Web Services, a partir da prxima

    requisio recebida para processamento por qualquer working thread deste job, caso a mesma permanea em

    processamento mais tempo em segundos do que o configurado no parmetro PROFILETIMER (padro=2), ser criada uma

    pasta chamada WSPROFILER, a partir do RootPath do ambiente em execuo, e dentro dela ser criado um arquivo

    dinamicamente, contendo todos os detalhes de processo chamado e registro de resumo de chamada de funes

    executadas por este processo.

    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 Web Browser (por exemplo, Internet Explorer), e acessar o link http:///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. Se estiver utilizando o sistema Microsiga Protheus 10, 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 em uso no ambiente configurado.

    Atravs dessa janela, possvel obter mais detalhes de cada um dos servios compilados. Pois, 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.

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

  • 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, apresentado 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.

    02. Criando um Web Services 'Server' com o sistema Microsiga Protheus

    Uma vez configurado e habilitado os Web Services, no TOTVS | Application Server, deve-se inicialmente determinar

    os mtodos aos quais o servio se destina para ento determinar os parmetros e retorno de cada mtodos. Aps

    determinar essas informaes, deve-se codificar uma classe especial da linguagem AdvPL, chamada WSService(), que

    constituir o servio.

    No entanto, antes de iniciar a codificao, expressamente recomendado que sejam lidos todos os artigos do

    tpico Aplicaes Server, onde so abordados em detalhes a infraestrutura envolvida com os Web Services, seu

    funcionamento e particularidades de comportamento da classe de Web Services.

  • 03. Regras para codificao de um Web Service

    Viso Geral

    Para codificao de um Web Service, foram criadas na linguagem AdvPL instrues especiais de declarao de

    classes, especficas para Web Services, que suportam nome longos no nome da classe, mtodos e propriedades.

    A utilizao destes comandos exige a declarao da #include totvswebsrv.ch, no incio do cdigo fonte, como

    tambm ateno a alguns pontos e particularidades, comeando pela nomenclatura do servio, estruturas, mtodos e

    propriedades.

    Caractersticas operacionais do ambiente

    muito importante estar atento ao desenvolver os mtodos de Web Services, devido s caractersticas

    operacionais do ambiente de Working Threads utilizado pelo Web Service.

    Ao executar um mtodo do Web Service, o ambiente ser mantido no ar, aguardando uma nova requisio de

    processamento, de qualquer servio ou mtodo de qualquer cliente.

    Deste modo, ao desenvolver um servio, no deve-se deixar abertas as queries utilizadas no mtodo, filtros setados

    em tabelas principais ou configuraes especficas no-padro do ambiente, realizadas para o processamento de um

    mtodo especfico, pois isto pode causar impacto no funcionamento de todos os Web Services compilados e ativos neste

    servidor, com efeitos imprevisveis.

    Nomenclatura dos servios

    O nome de uma classe para Web Service, deve ser iniciada por um caractere alfabtico e deve conter apenas os

    caracteres alfabticos compreendidos entre A e Z, os caracteres numricos compreendidos entre 0 e 9, podendo tambm

    ser utilizado o caracter "_" (underline).

    Um servio no pode ter o nome de uma palavra reservada, da linguagem AdvPL, ou ter o nome igual a um tipo

    bsico de informao.

    Nomenclatura de estruturas

    O nome dado a uma estrutura obedece as mesmas regras da nomenclatura de servios. Ou seja, no pode haver

    uma estrutura com o mesmo nome de um servio declarado.

    Alm disso, importante estar atento ao fato de uma estrutura no estar diretamente ligada ao servio em

    questo, de modo que no pode-se compilar duas estruturas de mesmo nome no mesmo repositrio.

    Uma estrutura constitui um agrupamento de dados, criado como um comando especial (WSSTRUCT) em AdvPL.

    Para isso, deve-se criar de uma estrutura para um servio, quando for necessrio agrupar um conjunto de dados

    bsicos e/ou outras estruturas em um nico tipo de informao, que ser utilizada como parmetro e/ou retorno em um

    ou mais mtodos do servio.

    Nomenclatura das propriedades, parmetros e retorno

    Cada parmetro e retorno de todos os mtodos de um servio, devem ser declarados como uma propriedade da

    classe do servio.

    Para dar nome a estes, so vlidas as mesmas regras da nomenclatura de servios, no podendo haver um dado

    com o mesmo nome de um servio ou estrutura j declarados anteriormente.

  • 04. Tipos bsicos de dados - 'Server'

    Ao escrever um Web Service 'Server', deve-se especificar o tipo de informao de cada parmetro e retorno, em

    conformidade com a especificao SOAP, utilizada nos pacotes XML de troca de dados. So considerados e suportados,

    pelo TOTVS | Application Server, quando da declarao dos parmetros e retorno, os seguintes tipos bsicos:

    Tipo Descrio

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

    Observao:

    Ao declarar uma propriedade como sendo do tipo string, no pode-se especificar a palavra string em letras

    maisculas. A palavra STRING, escrita desta maneira, interpretada pelo pr-compilador, do TOTVS | Application

    Server, como sendo uma constante, ocasionando erro de sintaxe da compilao do Web Service.

    O Tipo de dado Base64Binary tratado automaticamente e de forma transparente no AdvPL, contemplado pelo

    tipo de dado "C" Caractere do AdvPL, que permite contedo binrio. Isto signfica que, quando criamos uma classe

    Server de Web Services, onde usamos um tipo Base64Binary, o WSDL gerado pelo Server informar o uso deste

    tipo de informao, e quando um programa Client enviar um contedo esperado na requisio XML com este tipo

    de informao, a aplicao AdvPL j receber o contedo binario equivalente, sem a necessidade explcita de

    converso. Isto se aplica tambm s interfaces CLIENT de Web Services : O contedo codificado em Base64Binary

    recebido e enviado via protocolo/requisies XML, j chega devidamente convertido para contedo binrio nas

    propriedades do Client em AdvPL.

    O tipo Base64Binary utilizado quando da necessidade de trafegar, por exemplo, contedos binrios, por exemplo

    ima imagem JPEG, GIF, ou outra sequncia de bytes binria, que no devem estar sujeitas a tratamento

    de encoding, acentuao, etc. Deve-se atentar ao limite de string do AdvPL. de 1 MB . Um contedo em String, ao

    ser convertido para BASE64 pode ficar at 25 % maior. Logo, uma string binria com mais de 760 Kb no ser

    suportada para converso em Base64Binary e vice-versa. Lembre-se que o Web Service foi criado originalmente

    para requisies curtas, leves e rpidas. Se existe a necessidade de trafego de grandes quantidades de dados

    binrios de uma vez, existem protocolos mais interessantes, como o FTP por exemplo.

    05. Estruturas - Tipos complexos

    Uma estrutura (tambm conhecida por complex type), constitui um comando especial da linguagem AdvPL,

    chamado WSSTRUCT, criado especificamente para Web Services. Desta forma, deve-se criar uma estrutura quando tiver a

    necessidade de agrupar mais de uma informao, inclundo tipos bsicos e/ou outras estruturas.

    Ao criar um servio que dever receber como parmetro um grupo de informaes definidas como, por exemplo,

    os dados cadastrais de um cliente, deve-se criar uma estrutura para agrupar esses dados. No entanto, vale ressaltar que, a

    declarao de uma estrutura no amarra a mesma ao servio em questo, de modo que a mesma estrutura pode ser

    utilizada para mais de um servio compilado no repositrio.

    Caso a estrutura criada seja especfica para o servio em questo, recomendado que seja dado um nome

    mesma que tenha a ver com o servio ao qual ela pertena, pois no possvel compilar mais de uma estrutura de mesmo

    nome no repositrio.

  • 06. Mtodos 'Server' em AdvPL - Caractersticas

    Definio

    Um mtodo de um Web Service consiste em uma ao que ser disponibilizada no servio. Para isso, damos a ela

    um nome para identificao, declaramos a mesma na estrutura da classe do servio, bem como seus parmetros e

    respectivo retorno.

    Parmetros

    Ao declarar o fonte de um mtodo, o mesmo pode receber um ou mais parmetros, de tipo bsico e/ou estruturas,

    e inclusive pode no receber parmetro algum. Neste caso, devemos especificar que o parmetro recebido ser

    NULLPARAM, ou seja, nenhum parmetro.

    Retorno

    Um mtodo de Web Service deve, obrigatoriamente, tr uma propriedade de retorno. No faz parte da

    especificao de Web Services a criao de um mtodo que no possua retorno.

    Codificando o mtodo em AdvPL

    Como visto anteriormente, tanto os parmetros quanto o retorno de um mtodo de Web Service deve ser

    declarado com um dado da classe (atravs da instruo WSDATA).

    Ao escrever um mtodo de um Web Service, e o mesmo receber uma solicitao de processamento, as

    propriedades declaradas como parmetros do mtodo so alimentadas e o mtodo executado.

    Por tratarem-se de propriedades, o cdigo-fonte AdvPL dever interagir com essas propriedades, prefixando-as

    com '::' (dois pontos seguidos) ou 'self:', sendo isto vlido tanto para os parmetros do mtodo como para a propriedade

    de retorno.

    Dada a existncia de uma LIB de infra-estrutura, que realiza a comunicao, validao, montagem e desmontagem

    de pacotes.

    Ao codificar um mtodo de Web Service existem sempre dois retornos: A propriedade de retorno do mtodo e o

    retorno efetivo do mtodo ao final do processamento.

    O retorno efetivo do mtodo deve ser um valor booleano: Se verdadeiro (.T.), indica LIB que o mtodo foi

    executado com sucesso e, consequentemente, a propriedade de retorno foi alimentada. Logo, o pacote SOAP de retorno

    do mtodo ser montado pela LIB e devolvido, automaticamente, ao client que solicitou a chamada de processamento.

    Caso o retorno efetivo do mtodo seja falso (.F.), indica LIB que, por alguma razo tratada no cdigo-fonte do

    mtodo, no foi possvel a execuo do mtodo. Neste caso, deve-se especificar, antes do retorno, atravs da funo

    SetSoapFault(), a causa da impossibilidade de processamento.

    Exemplo

    1 WSMETHOD GetDate WSRECEIVE NULLPARAM WSSEND Horario WSSERVICE ServerTimeIf

    2 dow(date())=1

    3 SetSoapFault('Mtodo no disponvel','Este servio no funciona aos Domingos.')

    // Seta um soap_fault, informando que este servio no disponvel aos

    domingos

    4 Return .F. Endif // e retorna .F., indicando que o servio no foi processado

    com sucesso.

    5 ::Horario := time() // alimenta a propriedade de retorno

    6 Return .T. // E retorna .T. indicando processamento do mtodo com sucesso

  • Ateno:

    Sempre que o retorno efetivo do mtodo verdadeiro (.T.), a propriedade de retorno deve ser preenchida. Caso

    no seja preenchida, a LIB retornar ao client solicitante um pacote de SOAP Fault, indicando que houve um erro

    no processamento do servio, e registrar um error.log na estao servidora. Alm disso, ser gerado tambm uma

    ocorrncia de erro, caso o mtodo retorne verdadeiro (.T.), porm a funo SetSoapFault() tenha sido chamada

    durante a execuo do mtodo. A ocorrncia gerada : : RETURN .T. WITH SOAP FAULT

    EXCEPTION NOT EMPTY.

    Sempre que o retorno efetivo do mtodo falso (.F.), a funo SetSoapFault() deve ser chamada para que a LIB

    gere um pacote com o motivo do erro para o client que solicitou o mtodo. Caso o retorno efetivo seja falso (.F.), e

    a funo SetSoapFault() no tenha sido chamada, devolvido estao client solicitante do processamento um

    Soap:Fault, com a seguinte ocorrncia de erro: : RETURN .F. WITH SOAP FAULT

    EXCEPTION EMPTY.

    07. Tratamento de erro dos Web Services

    Dada a infraestrutura envolvida no processamento dos Web Services, a rotina de tratamento de erro da aplicao

    Web Services 'Server' prev o tratamento de ocorrncias, desde advertncia de carga dos servios, falhas de inicializao de

    ambiente, passando por erros que invalidam um determinado servio compilado, at as ocorrncias de inconsistncia de

    parmetros de chamada do servio, inconsistncia de retorno, ocorrncias de erro fatal de processamento na aplicao e

    ocorrncias de processamento que no constituam um erro fatal, porm devem retornar um pacote de ocorrncia de erro,

    conhecido por SOAP FAULT.

    Os tratamentos aplicados s ocorrncias reproduzidas no momento da carga do ambiente de Web Services esto

    relacionados no tpico Falhas de Carga dos Servios, e a discriminao da utilizao do Soap Fault est descrita no

    tpico Utilizao do Soap Fault.

    08. Utilizao do SOAP FAULT

    Quando desenvolvemos um servio, e temos a necessidade de retornar ao client solicitante do processamento,

    uma ocorrncia de falha no-fatal de um determinado processamento, deve ser retornado ao mesmo um pacote SOAP,

    que indica a causa da falha. Este pacote, conhecido por 'SOAP FAULT'.

    A rotina de tratamento de erro fatal de execuo do Web Service, quando da ocorrncia de tal, gera

    automaticamente um 'SOAP FAULT' com a descrio resumida da ocorrncia ao client solicitante.

    Dado que, a camada da LIB, responsvel pela interpretao do pacote SOAP recebido pelo servio, j se encarrega

    de validar o formato do pacote e contedos obrigatrios, um Web Service escrito em AdvPL deve, antes de realizar o

    processamento proposto, validar se o contedo dos parmetros est dentro da faixa de dados esperada, e condizentes

    com o esperado, para ento realizar o processamento e retornar ao client solicitante.

    Para inserir as excees de execuo com SOAP FAULT, em um servio 'Server', deve-se utilizar a funo

    SetSoapFaut().

    SOAP FAULTS padro do servidor TOTVS | Application Server de Web Services

    A camada de comunicao da infraestrutura de Web Service realiza, automaticamente, os tratamentos de

    protocolo, formato do pacote SOAP e parmetros obrigatrios. Caso exista alguma inconsistncia na chamada do servio e

  • incorra em alguma destas excees, o servio solicitado no chamado e o servidor TOTVS | Application Server devolve

    automaticamente ao cliente solicitante um SOAP FAULT, indicando o que aconteceu.

    Essas ocorrncias de SOAP FAULT so apresentadas no console, do TOTVS | Application Server, e so armazenadas

    no arquivo error.log do ambiente utilizado.

    SOAP FAULTS padro aps processamento do servio

    A camada de comunicao de infraestrutura de Web Services vlida tambm a montagem do pacote de retorno.

    Caso, exista alguma propriedade de retorno obrigatrio do servio que no esteja alimentada de forma correta, o servidor

    TOTVS | Application Server devolve automaticamente ao client solicitante um SOAP FAULT, indicando que ocorreu um erro

    interno no servidor de Web Services.

    09. Servio de exemplo SERVERTIME

    Inicialmente, o exemplo proposto tem o objetivo de montar um Web Service que retorne o horrio no servidor

    Protheus. Para isso, ser criado um servio com apenas (inicialmente) um mtodo. A este servio, daremos a ele o nome de

    SERVERTIME. E, ao mtodo de buscar o horrio no servidor, daremos o nome de GETSERVERTIME.

    A operao de buscar o horrio atual no servidor no necessita de nenhum parmetro para execuo. Porm, ela

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

    Codificando o servio

    Para codificar um servio, deve-se utilizar o TOTVS | Development Studio, e 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, onde o cdigo fonte exemplo detalhado linha a linha. 1 #INCLUDE TOTVS.CH

    2 #INCLUDE TOTVSWEBSRV.CH

    3

    4 WSSERVICE SERVERTIME

    5 WSDATA Horario as String

    6 WSMETHOD GetServerTime

    7 ENDWSSERVICE

    8

    9 WSMETHOD GetServerTime WSRECEIVE NULLPARAM WSSEND Horario WSSERVICE SERVERTIME

    10 ::Horario := TIME()

    11 Return .T.

    Linha 1 - especificada a utilizao da include TOTVS.CH, contendo as definies dos comando AdvPL e demais

    constantes.

    Linha 2 - especificada a include TOTVSWebSrv.CH, que contm as definies de comandos e constantes utilizados

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

    Services.

    Linha 4 - Com esta instruo, definido o incio da classe do servio principal, ao qual damos o nome de

    SERVERTIME.

    Linha 5 - Dentro da estrutura deste servio, informado que um dos parmetros utilizados chama-se horrio, e

    ser do tipo string.

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

    Linha 7 - Como no so mais necessrias mais propriedades ou mtodos neste servio, a estrutura do servio

    fechada com esta instruo.

  • Linha 9 - Aqui declarado o fonte do mtodo GetServerTime, que no receber parmetro nenhum (mas para

    efeitos de declarao, deve ser informado que ele receber o parmetro NULLPARAM), e informado que seu

    retorno ser o dado Horario (declarado na classe do servio como uma propriedade, do tipo string).

    Linha 10 - atribudo na propriedade ::Horario da classe deste servio, o retorno da funo AdvPL Time(), que

    retorna a hora atual no servidor no formato HH:MM:SS. Observe que, deve-se utilizar "::" para alimentarmos a

    propriedade da classe atual.

    Linha 11 - 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.

    Se voc seguiu as configuraes desse documento, ento voc consegue acessa a pgina de ndices pelo endereo

    http://localhost/wsindex.apw . Isso significa que o servio em questo est sendo executado em ambiente local.

    Testando o servio

    Ao acessar a pgina de ndice, e constatar a existncia do servio, deve-se obter o link atravs do qual o WSDL

    deste servio est sendo fornecido, e utilizarmos de uma ferramenta para gerar um client que possibilite o uso deste

    servio. possvel, inclusive, utilizar o TOTVS | Development Studio para gerar o cdigo-fonte client para testar o servio;

    porm, existe a necessidade de criar uma funo para instanciar a classe client gerada, alimentar os parmetros e testar o

    servio.

    A partir da verso Protheus 8 Server, podemos gerar um cdigo-fonte client desta classe e compil-lo no mesmo

    repositrio do ambiente utilizado pelo Web Service 'Server', que a prpria interface de ndice de servios permitir o teste

    do mesmo.

    O processo de gerao do client ser apresentado no Tpico Aplicaes Client, onde ser possvel implementar o

    consumo desse servio configurado. Mas j que estamos falando de Aplicaes Web Service - Server, vamos concluir todos

    os conceitos referentes ao mesmo para depois darmos sequncia as configuraes.

    10. Falha de carga dos servios

    Neste tpico, abordaremos as mensagens de ocorrncias relacionadas carga dos servios. Durante a inicializao

    do engine, de Web Services, os servios compilados so validados e um ambiente montado por thread para o

    atendimento de solicitaes de processamento. Neste processo, existem ocorrncias relacionadas montagem do

    ambiente, que podem impossibilitar a operao dos Web Services como um todo, e ocorrncias que podem invalidar

    apenas um servio em caso de inconsistncia da declarao do mesmo.

    XXX : Erro de Estrutura : ARRAY OF em parmetro de entrada direto no suportado

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando um parmetro

    [XXX] foi utilizado como parmetro de entrada direto de um Web Services. Porm, o mesmo foi declarado com tratamento

    de "Array Of".

    Observao: No suportado receber diretamente um array como parmetro de um mtodo de Web Services 'Server'.

    Soluo

    Verifique e corrija o cdigo-fonte.

    Crie uma estrutura intermediria para encapsular o parmetro que deve ter tratamento de array.

  • Erro de Estrutura: Estrutura Indefinida

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando uma

    propriedade da classe server foi especificada como sendo uma estrutura, do tipo no bsico, porm a declarao da

    estrutura no foi localizada.

    Soluo

    Verifique e corrija o cdigo-fonte para proceder com a declarao da referida estrutura.

    [XXX] Erro de Estrutura : Nome de Estrutura Invlido - Tipo bsico conflitante

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando o nome de

    uma determinada estrutura [XXX] foi especificada com um nome igual a um tipo bsico de informao.

    Observao: Esta ocorrncia invalida apenas o servio que utiliza a determinada estrutura.

    Soluo

    Verifique e corrija, no cdigo-fonte, a declarao do tipo da estrutura.

    [XXX] : [YYY] : Erro de Mtodo : Estrutura de Entrada no encontrada

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando um

    determinado mtodo [XXX] foi especificado com algum parmetro de entrada [YYY], cuja declarao no foi encontrada

    como uma propriedade no cdigo-fonte construtor do servio.

    Soluo

    Verifique e corrija o cdigo-fonte para declarar o parmetro YYY como uma propriedade da classe XXX.

    [XXX] : [YYY] : Erro de Mtodo : Estrutura de Retorno no encontrada

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando um

    determinado mtodo [XXX] foi especificado com uma estrutura [YYY], cuja declarao no foi encontrada como uma

    propriedade no cdigo-fonte construtor do servio.

    Soluo

    Verifique e corrija o cdigo-fonte para declarar a propriedade YYY como uma propriedade da classe XXX.

    [XXX] : [YYY] : Erro de Mtodo : Estrutura de Retorno no pode ser recebida como parmetro

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando um

    determinado mtodo [XXX] foi declarado para receber uma estrutura [YYY] e retornar a mesma estrutura [YYY]. Isto no

    no suportado pelos Web Services do sistema Microsiga Protheus.

    Soluo

    Verifique e corrija o cdigo-fonte.

    Erro de Mtodo : Mtodo [XXX] do Servio [YYY] no declarado no servio

  • Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando um

    determinado mtodo [XXX], referente ao servio [YYY], foi codificado, porm no foi declarado no construtor do Web

    Service.

    Esta ocorrncia invalida apenas o servio que utiliza a determinada estrutura.

    Soluo

    Verifique e corrija o cdigo-fonte para proceder com a declarao do mtodo no construtor do servio.

    [XXX] Erro de Mtodo : Nome de Mtodo Invlido - Tipo bsico conflitante

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando o nome de um

    determinado mtodo [XXX] foi especificado com um nome igual a um tipo bsico de informao. Esta ocorrncia invalida

    apenas o servio que utiliza o determinado mtodo.

    Soluo

    Verifique e corrija, no cdigo-fonte, a declarao do nome do mtodo.

    Redundncia de Estruturas

    Durante a etapa de validao dos servios, na carga dos Web Services, esta ocorrncia reproduzida quando temos uma

    cadeia de estruturas, compostas por tipos bsicos e outras estruturas, e a declarao das estruturas entre redundncia.

    Por exemplo, declaramos a estrutura , que tem dentro dela uma outra propriedade que do tipo , ou a estrutura

    tm uma propriedade do tipo , e por sua vez tem uma propriedade do tipo .

    Soluo

    Verifique e corrija, no cdigo-fonte, a declarao das estruturas envolvidas.

    WSDL Server ONLOAD ERROR - Falha Interna na Carga do Web Service

    Esta ocorrncia apresentada na tela de ndice dos Web Services (wsindex.apw), quando algum erro fatal ocorre na carga

    dos Web Services. Os detalhes sobre a ocorrncia fatal so exibidas no console, do TOTVS | Application Server, e gravados

    no arquivo error.log, do ambiente em uso.

    11. Ocorrncias de erro fatal e tratamento de erro

    Neste tpico, abordaremos as mensagens de ocorrncias relacionadas erro fatal.As ocorrncias de erro fatal, refere-se

    falhas de carga do engine de Web Services como um todo e ocorrncias de falha de processamento quando da chamada

    para execuo dos servios.Para isso, em cada mensagens discriminaremos um resumo da ocorrncia, sua possvel causa e

    possveis solues.

    AUTOMATIC URLLOCATION FAILED

    Ao configurar um Web Service 'Server', deve-se especificar, atravs da chave URLLOCATION, a URL especfica para o acesso

    aos servios.

  • Quando no definimos esta URL, a LIB de Web Services identifica automaticamente sob qual host o servio foi acessado.

    Esta operao no possvel quando o header HTTP do pacote permite informar uma operao diferente de 'Get' ou

    'POST', ou o servidor do sistema esta executando tambm em uma verso ISAPI, em conjunto com o Microsoft

    (R) Information Service.

    Caso no seja possvel identificar o host sob o qual a chamada foi realizada, o Web Service no processado, e o

    processamento abortado com a ocorrncia de erro acima.

    BUILD [XXX] USING WEBSERVICES HTTPS NOT SUPPORTED

    Quando da carga inicial dos Web Services 'Server', a configurao da chave URLLocation criticada pela LIB. Caso, seja

    especificado que o acesso ser realizado via HTTPS e a build atual do TOTVS | Application Server utilizado ainda no

    suporta a utilizao do Web Service sob o protocolo HTTPS.

    INVALID URLLOCATION [XXX] ON [YYY]

    Quando da configurao do TOTVS | Application Server para Web Services, caso especificada a configurao da chave

    URLLOCATION, na seo Environment, do arquivo de configurao do TOTVS | Application Server, porm a mesma no seja

    especificada com uma sintaxe vlida, o processamento abortado ao subir as Working Threads do servidor, com esta

    ocorrncia de erro fatal, indicando em [XXX] a URL informada e em [YYY] o nome do arquivo de configurao do TOTVS |

    Application Server.

    Uma URL considerada invlida caso a mesma no seja iniciada com 'http://', 'https://', seja finalizada com um caractere

    no alfanumrico, diferente de '/', possua caracteres acentuados ou espaos. Desta forma, so considerados vlidos

    apenas os caracteres alfanumricos e caracteres ':' (dois pontos), '.' (ponto), '/' (barra) e '-' (hfen).

    Observao: Esta validao foi implementada na infraestrutura de Web Services, a partir da verso de infraestrutura

    'ADVPL WSDL Server 1.031209'.

    REQUIRED Return property [X] AS ARRAY OF [Y] IS EMPTY

    Esta ocorrncia de erro reproduzida quando do trmino do processamento de um mtodo de um Web Service, na

    camada da LIB, quando da gerao do pacote 'SOAP' de retorno ao client solicitante do servio.

    Quando da identificao da propriedade [X] de retorno obrigatrio do mtodo, a mesma deveria ser um array AdvPL,

    contendo no mnimo um elemento; porm, o arrray no continha nenhum elemento.

    Soluo

    Verifique o mtodo solicitado e certifique-se que a propriedade de retorno esteja sendo alimentada.

    REQUIRED Return property [X] Type [Y] Unexpected Valtype [Z]

    Esta ocorrncia de erro reproduzida quando do trmino do processamento de um mtodo de um Web Services, na

    camada da LIB, quando da gerao do pacote 'SOAP' de retorno ao client solicitante do servio.

    Quando da identificao da propriedade obrigatria [X] de retorno do mtodo, a mesma deveria ser alimentada com um

    contedo AdvPL do tipo [Y]; porm, ao invs deste, a mesma continha um valor do tipo AdvPL [Z].

    Soluo

  • Verifique o mtodo solicitado e certifique-se que a propriedade de retorno esteja alimentada com um contedo do tipo [Y],

    em conformidade com a declarao da propriedade no servio.

    Return property [X] AS ARRAY Type [Y] Unexpected Valtype [Z]

    Esta ocorrncia de erro, reproduzida quando do trmino do processamento de um mtodo de um Web Services, na

    camada da LIB, quando da gerao do pacote SOAP de retorno ao client solicitante do servio.

    Quando da identificao da propriedade [X] de retorno do mtodo, a mesma deveria ser um array AdvPL, contendo

    elementos do tipo [Y]; porm, ao invs da propriedade ser um do tipo A (array), a mesma continha um valor do tipo AdvPL

    [Z].

    Soluo

    Verifique o mtodo solicitado e certifique-se que a propriedade de retorno esteja alimentada com um array.

    Return property [X] AS OBJECT Type [Y] Unexpected Valtype [Z]

    Esta ocorrncia de erro reproduzida quando do trmino do processamento de um mtodo de um Web Service, na

    camada da LIB, quando da gerao do pacote 'SOAP' de retorno ao client solicitante do servio.

    Quando da identificao da propriedade [X] de retorno do mtodo, a mesma deveria ser uma estrutura (Tipo AdvPL 'O' -

    Objeto) AdvPL, do tipo [Y]; porm, a propriedade de retorno continha um valor do tipo AdvPL [Z].

    Soluo

    Verifique o mtodo solicitado e certifique-se que a propriedade de retorno seja alimentada com a respectiva estrutura, em

    conformidade com a declarao da propriedade da classe de servio.

    Return property [X] Type [Y] Unexpected Valtype [Z]

    Esta ocorrncia de erro reproduzida quando do trmino do processamento de um mtodo de um Web Service, na

    camada da LIB, quando da gerao do pacote 'SOAP' de retorno ao client solicitante do servio.

    Quando da identificao da propriedade [X] de retorno do mtodo, a mesma deveria ser alimentada com um contedo

    AdvPL do tipo [Y]; porm, ao invs deste, a mesma continha um valor do tipo AdvPL [Z].

    Soluo

    Verifique o mtodo solicitado e certifique-se que a propriedade de retorno esteja alimentada com um contedo do tipo [Y],

    em conformidade com a declarao da propriedade no servio.

    UNKNOW ERROR : EMPTY HTTP RETURN

    Quando do processamento de uma requisio de um mtodo de Web Services 'Server', so executadas consistncias de pr

    e ps-processamento. Todas as consistncias internas realizadas tm uma mensagem de retorno. Quando do final da

    execuo do servio, independentemente de ocorrer um processamento com sucesso ou com falha (SOAP Fault),

    verificado se o tratamento efetuado gerou um pacote com a mensagem de retorno.

    Caso esta ocorrncia seja reproduzida, ela indica que ocorreu uma falha no tratada ou uma impossibilidade de gerao do

    pacote de retorno. No entanto, at o momento, esta ocorrncia no foi reproduzida sob nenhuma condio.

  • [SVC] : [METHOD] as [X] : Tipo Inesperado de Retorno do Mtodo

    Esta ocorrncia de erro reproduzida, quando do trmino da execuo de um mtodo de uma classe 'Server' de Web

    Services. A LIB espera um valor booleano (.T. ou .F.) de retorno efetivo do mtodo. Caso o retorno efetivo no seja

    booleano, o processamento abortado com a ocorrncia acima, identificando o servio chamado em [SVC], o mtodo

    [METHOD] e o tipo de retorno efetivo retornando em [X].

    Soluo

    Verifique o cdigo-fonte do mtodo do servio e certifique-se que o retorno efetivo do mtodo seja sempre .T.

    (verdadeiro) ou .F. (falso).

    Exemplos AdvPL

    A seguir so apresentados diversos cdigos-fonte que exemplificam o uso das funes:

    GetWSCError

    GetWSCVer

    GetWSSVer

    SetSoapFault.

    Exemplo de uso da funo GetWSCError

    Neste exemplo, ser ilustrado o tratamento de erro sugerido para uma chamada de um mtodo atravs de um programa 'Client', desenvolvido em AdvPL. 1 #include 'Protheus.ch'

    2 #include 'ApWebSrv.ch'

    3

    4 User Function TstService

    5 Local oService , cSvcError , cSoapFCode ,cSoapFDescr

    6 ClienteoService := WSTeste():New() // Cria uma instncia do servio

    7 If oService:Hello() // Realiza a chamada do mtodo Hello() do servio.

    8 MsgStop('Execuo OK') // Mtodo executado com sucesso.

    9 Else // Caso o mtodo retorne .F. , devemos identificar e tratar a ocorrncia

    10 cSvcError := GetWSCError() // Resumo do erro

    11 cSoapFCode := GetWSCError(2) // Soap Fault Code

    12 cSoapFDescr := GetWSCError(3) // Soap Fault Description

    13 If !empty(cSoapFCode) // Caso a ocorrncia de erro esteja com o fault_code

    preenchido , a mesma teve relao com a chamada do servio.

    14 MsgStop(cSoapFDescr,cSoapFCode)

    15 Else // Caso a ocorrncia no tenha o soap_code preenchido, ela est

    relacionada a uma outra falha, provavelmente local ou interna.

    16 MsgStop(cSvcError,'FALHA INTERNA DE EXECUCAO DO SERVIO')

    17 Endif

    18

    19 EndifoService := NIL

    20

    21 Return

  • Exemplo de uso da funo GetWSCVer

    Neste exemplo, obtemos a verso da Lib 'Cliente' de Web Services compilada no repositrio atual. 1 User Function ShowVersions()

    2 Local cCliVers := GetWSCVer()

    3 MsgStop(cCliVers)

    4 Return

    Exemplo de uso da funo GetWSSVer

    Neste exemplo, obtemos a verso da Lib 'Server' de Web Services compilada no repositrio atual. 1 User Function ShowVersions()

    2 Local cSrvVers := GetWSSVer()

    3 MsgStop(cSrvVers)

    4 Return

    Exemplo de uso da funo SetSoapFault

    Neste exemplo de uso da funo, apresentamos dois exemplos de cdigo-fonte para demonstrar sua utilizao. 1 // ********* Exemplo 01 *********

    2 //(...)

    3 If ::Indice > 1024

    4 SetSoapFault('Argumento Invlido','O ndice no pode ser maior que 1024.')

    5 Return .f.

    6 Endif

    7 //(...)

    8

    9 // ********* Exemplo 02 *********

    10 //(...)

    11 If !File('\extras\modelo.cfg')

    12 SetSoapFault('Servio Indisponvel','',SOAPFAULT_RECEIVER)

    13 Return .f.

    14 Endif

    15 //(...)

    Observaes:

    No exemplo 01, partindo de um mtodo de um Web Services 'Server', caso um parmetro no atenda a faixa de

    dados necessria, o servio retorna ao Client solicitante um Soap-Fault, indicando a ocorrncia de erro.

    No exemplo 02, retornamos um Soap-Fault, indicando que no estava disponvel um recurso no servidor para o

    processamento requisitado. Neste, retornamos que o Fault Code 'SOAPFAULT_RECEIVER', pois o pacote no foi

    processado no por ter algum contedo invlido, mas sim por alguma razo ligada ao ambiente do servidor.

    Por padro, o Fault-Code de um Soap-Fault 'SOAPFAULT_SENDER', o que indica que o servio no foi processado

    por alguma razo ligada ao pacote de dados enviados; e indica ao client que o pacote deve ser remontado para que

    o servio seja executado.

  • Web Services 'Client'

    Aplicaes Protheus 'Client' de Web Services

    Definio de client

    Quando um Web Service 'Server' criado e disponibilizado, junto disponibilizada a definio do servio,

    argumentos, estruturas e retornos (WSDL).

    Para utilizar um Web Service, necessrio montar um programa client que seja capaz de montar um

    'envelope' SOAP com os dados necessrios ao processamento do servio, realizar a chamada e tratar o pacote de retorno

    do servio e suas respectivas excees.

    Embora existam Web Services que podem ser acessados via HTTP direto, apenas passando parmetros via URL,

    o client do Web Services do TOTVS | Application Server tm seu foco e recursos direcionados apenas a servios que

    possuam interface de comunicao que realize POST de pacotes de dados XML, em formato SOAP (a verso 1.1 da

    especificao SOAP foi utilizada como base para implementao do toolkit de Web Services do Microsiga Protheus). O

    TOTVS | Application Server possui ferramentas e infraestrutura incorporadas que permitem esta integrao.

    Gerao do client em AdvPL

    No TOTVS | Development Studio, encontra-se disponvel, no menu Ferramentas, a opo para que, atravs de um

    link para a obteno do documento WSDL de um servio, o TOTVS | Application Server gere automaticamente, em AdvPL,

    uma classe client para a comunicao e utilizao do mesmo.

    Para isso, necessrio obter o endereo internet (URL) do WSDL desejado, criar um novo cdigo-fonte e acessar no

    menu Ferramentas + Gerar Cliente WebServices.... No entanto, para cada servio que se tenha necessidade de gerar um

    cdigo-fonte client, recomenda-se que cada cdigo-fonte client seja gerado em um arquivo independente e exclusivo para

    este fim, e que de forma alguma este cdigo-fonte gerado, pelo assistente, seja alterado.

    Como a especificao SOAP 1.1 foi utilizada como base para a implementao da interface Client de Web Services,

    usar um WSDL fornecido com verso a partir de 1.2 pode no ser suportado na ntegra, gerando ocorrncias desde falha na

    gerao do fonte client em AdvPL, at a gerao ou funcionamento incompletos.

    Em casos especiais, pode ser necessria alguma alterao no cdigo-fonte client gerado, caso necessrio atender

    alguma necessidade especfica da aplicao Server de Web Services no contemplada de modo nativo pela implementao

    de Web Services do TOTVS | Application Server. Neste caso, deve-se tomar muita ateno e documentar o cdigo-fonte,

    pois caso este fonte tenha que ser gerado novamente por qualquer razo, a alterao realizada perdida e, se ainda

    necessria, dever ser realizado novamente no cdigo regerado manualmente.

    Requisitos bsicos para gerao do client em AdvPL

    O processo de gerao do cdigo-fonte disparado atravs do TOTVS | Development Studio, porm,

    o servidor TOTVS | Application Server que buscar o documento WSDL solicitado. De modo que, a estao servidora

    utilizada no ambiente deve ter acesso ao endereo solicitado. importante salientar que, o processo de busca da URL

    informada disparado pelo TOTVS | Development Studio, mas a operao realizada atravs do TOTVS | Application

    Server. Logo, a mquina onde o servio do TOTVS | Application Server est sendo executado deve ter acesso URL

    informada.

    Gerao de fonte client para WSDLs disponibilizados em arquivo

    Existem fornecedores de servios para Web Services que fornecem os arquivos contendo as definies (WSDL) para

    a gerao dos clients. O TOTVS | Development Studio suporta a gerao de fonte client em arquivo. Para tal, deve-se

    disponibilizar o arquivo em uma pasta a partir do RootPath do ambiente (environment) configurado no TOTVS |

  • Development Studio, e informar na caixa de dilogo da URL para a gerao do cdigo-fonte, o path do arquivo, sempre

    iniciado com "\" (barra inversa) , seguido do path e nome do arquivo no servidor a ser utilizado para a gerao.

    Por exemplo, caso o arquivo contendo o WSDL chama-se "meuservico.txt", e ele seja copiado para uma pasta

    chamada "WSDL", que fica a partir do RootPath do ambiente em uso no TOTVS | Development Studio, a URL informada

    no TOTVS | Development Studio para gerar o cdigo-fonte client deve ser "\wsdl\meuservico.txt" . O TOTVS |

    Development Studio no vai criticar a extenso do arquivo, mas sim o contedo do mesmo. Ele deve conter um arquivo

    XML no formato WSDL.

    Gerao de fonte client para WSDLs publicados com autenticao e/ou conexo segura ( HTTPS )

    A engine de conexo client HTTP do TOTVS | Application Server suporta conexo com URLs com HTTPS, inclusive

    para a gerao de fonte client de Web Services. Existem apenas restries quando a URL dos Web Services exigir

    autenticao (usurio e senha) para baixar o WSDL, e/ou seja uma conexo HTTPS que exija um uso de

    certificado client especfico.

    No caso da autenticao, possvel acessar a URL onde o WSDL est publicado atravs de um Web Browser

    (Navegador da Web), fazer a autenticao atravs do Browser, e ao acessar o WSDL, salv-lo em arquivo, copiar para uma

    pasta a partir do RootPath do TOTVS | Application Server, e fazer a gerao do client pelo TOTVS | Development Studio

    informando o arquivo em disco. Este mesmo procedimento tambm pode ser aplicado quando o WSDL est publicado em

    um endereo HTTPS que requer uso de certificado client. Basta conseguir acessar o contedo do WSDL no Web

    Browser, acess-lo em disco, e fazer a gerao a partir do arquivo em disco. Caso o Web Service possua dependncias

    (imports) que estejam publicados, a gerao um pouco mais complicada, pois existe a necessidade de fazer download de

    todos os imports necessrios, e compilar um e apenas um arquivo contendo o WSDL principal com todos os imports para a

    gerao do fonte client ser feita com sucesso.

    Ainda quanto gerao de clients onde o WSDL est publicado com conexo segura (HTTPS) que exija o uso de um

    certificado client especifico, possvel gerar pelo TOTVS | Development Studio, desde que o TOTVS | Application

    Server seja configurado para uso do certificado, como se o certificado fosse utilizado para conexo entre remote e server (

    vide configurao da seo [SSLCONFIGURE] do TOTVS | Application Server). Basta configurar o certificado no TOTVS |

    Application Server, subir o servio, e proceder com a gerao do fonte client pelo TOTVS | Development Studio,

    informando a URL.

    Gerao de client em AdvPL - 1 Passo

    1 Passo - Determinar como obter o WSDL do servio desejado.

    A maioria das definies WSDL, dos servios disponveis na WEB, so acessados atravs de uma URL, em geral

    apontando para o servidor onde o servio est publicado, contendo o nome do servio na URL e um sufixo ?WSDL ou

    .WSDL na URL. No h padro definido para tal, de modo que cada servidor poder disponibilizar (ou no) o WSDL de uma

    maneira diferente. O WSDL de alguns servios restritos como, por exemplo, o servio de busca na base de dados do Google,

    so disponibilizados em arquivo ASCII, enviados por e-mail, aps um cadastro no site e autorizao da empresa para uso do

    servio por ele provido.

    Exemplo

    Neste exemplo, a definio obtida diretamente via HTTP, atravs do link http://localhost/SERVERTIME.apw?WSDL. Mas,

    caso este link seja acessado atravs de um Web Browser (exemplo: Internet Explorer), ser apresentado no browse um

    documento XML correspondente a definio do servio.

  • Gerao de client em AdvPL - 2 Passo

    2 Passo - Gerar o cdigo-fonte AdvPL, do client, usando o assistente do TOTVS Development Studio.

    Ao ser gerado um cdigo-fonte client para um Web Service, este cdigo-fonte conter as definies dos mtodos

    do servio, a(s) estrutura (s) utilizada (s) e a(s) classe(s) intermediria(s) de uso interno para montagem e desmontagem

    da(s) estrutura(s); visando o encapsulamento de todos os tratamentos de envio e recebimento de dados atravs de pacotes

    SOAP.

    O cdigo-fonte gerado atravs do assistente de criao de fonte deve preferencialmente ser gerado e compilado

    em um arquivo exclusivo, destinado nico e exclusivamente a este cdigo.

    E, por tratar-se de uma classe AdvPL gerada a partir da definio de um servio, no deve ser inserida e/ou alterada

    nenhuma das definies geradas pelo assistente, pois as mesmas sero perdidas caso o cdigo-fonte seja gerado

    novamente.

    Procedimento

    Para gerao do cdigo-fonte client, em AdvPL, para utilizar este servio, necessrio criar um novo arquivo .PRX,

    no TOTVS | Development Studio, especificamente para conter as classes deste servio. Para isso, acesso o menu

    Ferramentas + Gerar Cliente WebService.

    Ao clicar nesta opo, ser apresentada uma tela (tipo pop-up).

    No campo URL do WebService, informe a URL de onde o servidor ir obter a definio do Web Service.

    No nosso exemplo, http//localhost/SERVERTIME.apw?WSDL.

    Aps a confirmao, caso o procedimento ocorra com sucesso, na janela de mensagens do TOTVS | Development

    Studio, ser apresentado um texto semelhante ao abaixo:

    Estabelecendo conexo com o server...

    Por favor, aguarde...

    Obtendo descrio do WebService...

    Finalizando conexo com o server...

    OK.

  • E, na janela do novo arquivo criado, dever ser criado um cdigo-fonte semelhante ao apresentado abaixo:

    1 #INCLUDE 'PROTHEUS.CH'

    2 #INCLUDE 'APWEBSRV.CH'

    3

    4 /*==============================================================================

    5 WSDL Location http://localhost/SERVERTIME.apw?WSDL

    6 Gerado em 12/30/02 17:21:29

    7 Observaes Cdigo-fonte gerado por ADVPL WSDL Client 1.021217

    8 Alteraes neste arquivo podem causar funcionamento incorreto

    e sero perdidas caso o cdigo-fonte seja gerado novamente.

    9 ============================================================================= */

    10

    11 /*------------------------------------------------------------------------------

    12 WSDL Service WSSERVERTIME

    13 ----------------------------------------------------------------------------- */

    14

    15 WSCLIENT WSSERVERTIME

    16 WSMETHOD NEW

    17 WSMETHOD GETSERVERTIME

    18 WSDATA _URL AS String

    19 WSDATA cGETSERVERTIMERESULT AS string

    20 ENDWSCLIENT

    21

    22 WSMETHOD NEW WSCLIENT WSSERVERTIME

    23 ::_URL := NIL

    24 ::cGETSERVERTIMERESULT := ''

    25 Return Self

    26

    27 /*------------------------------------------------------------------------------

    28 WSDL Method GETSERVERTIME of Service WSSERVERTIME

    29 ----------------------------------------------------------------------------- */

    30

    31 // Definio do mtodo, que recebe os parmetros de chamada, executa o servio e

    alimenta as propriedades de retorno do mtodo, contendo os encapsulamentos

    necessrios para tratamento de excees.

    32

    33 WSMETHOD GETSERVERTIME WSSEND NULLPARAM WSRECEIVE cGETSERVERTIMERESULT WSCLIENT

    WSSERVERTIME

    34 Local cSoap := '', oXmlRet

    35

    36 BEGIN WSMETHOD DEFAULT

    37 ::_URL := 'http://localhost/SERVERTIME.apw'

    38 cSoap += ''

    39 cSoap += ''

    40 oXmlRet := SvcSoapCall( Self, cSoap,;

    41 'http://localhost/GETSERVERTIME',;

    42 'DOCUMENT','http://localhost/',)

    43 ::cGETSERVERTIMERESULT := xGetInfo ( oXmlRet,

    '_GETSERVERTIMERESPONSE:_GETSERVERTIMERESULT:TEXT', '')

    44 END WSMETHOD

    45

    46 oXmlRet := NIL

    47

    48 Return .T.

    O cdigo-fonte acima constitui uma classe em AdvPL, gerada para realizar a interface com a classe original

    publicada no Server, j realizando os tratamentos adequados para realizar a comunicao via HTTP com o servidor onde o

    servio est publicado. Vale observar que, as linhas em negrito no cdigo-fonte acima, no foram inseridas pelo assistente

    do TOTVS | Development Studio, mas acrescentadas a este documento para fins didticos.

  • O cabealho do cdigo-fonte contm informaes sobre a localizao do WSDL utilizado para a gerao do cdigo-

    fonte, data e hora de gerao e verso do engine de Web Services utilizado. Logo abaixo, a declarao de uma classe

    ?client? de Web Services (WSCLIENT WSSERVERTIME), com o mtodo new() para inicializao das propriedades AdvPL da

    classe . E, em seguida, a declarao do mtodo de busca de Horrio (WSMETHOD GETSERVERTIME), que no envia

    parmetro algum, e retorna o horrio atual do server em :: cGETSERVERTIMERESULT, com todos os tratamentos

    necessrios embutidos.

    Gerao de client em AdvPL - 3 Passo

    3 Passo - Criar um cdigo-fonte que utilize a classe para utilizao do Web Service.

    Neste passo, necessrio criar um novo cdigo-fonte, no TOTVS | Development Studio, e montar uma funo para utilizar a classe de Web Service client e obter o horrio no servidor. 1 #INCLUDE TOTVS.CH

    2

    3 User Function TestClient()

    4

    5 Local oSvc := NIL

    6 oSvc := WSSERVERTIME():New()

    7

    8 If oSvc:GETSERVERTIME()

    9 alert('Horrio no Servidor : ' + oSvc:cGETSERVERTIMERESULT)

    10 Else

    11 alert('Erro de Execuo : ' + GetWSCError())

    12 Endif

    13

    14 Return

    Linha 1 - Declarao da include TOTVS.CH que contm as definies dos comandos AdvPL e demais constantes.

    Linha 3 - Inicia-se a definio da User Function para utilizar o Web Service.

    Linha 4 - Declarao de uma varivel local para conter o objeto do Web Service client.

    Linha 6 - Utilizando-se do servio, a varivel oSvc alimentada com um nova instncia do Web Service client, obtida

    atravs da sintaxe ():New().

    Linha 8 - O mtodo GetServerTime executado a partir do objeto do servio oSrv, sem passar qualquer parmetro.

    O retorno de um mtodo do client pode ser verdadeiro (.T.), se for executado com sucesso, ou falso (.F.), em caso

    de falha de execuo.

    Linha 9 - Caso o servio tenha sido executado com sucesso, o retorno esperado alimentado na propriedade

    cGetServerTimeResult do objeto do servio.

    Linha 11 - Caso contrrio (retorno falso (.F.)), ocorreu alguma falha na chamada do servio, como, por exemplo, o

    servidor no estava no ar, demorou muito para responder (time-out), entre outras. Para recuperar os detalhes da

    ocorrncia de erro, utilize a funo GetWSCError() para retornar uma string com o resumo da ocorrncia.

    Linha 14 - O programa de teste finalizado com um Return.

  • Gerao de client em AdvPL - 4 Passo

    4 Passo - Executar o programa de teste.

    Abra uma nova instncia do TOTVS | SmartClient e execute a funo U_TestClient. Caso o Web Service esteja no ar,

    funcionando e o cdigo-fonte client devidamente compilado e sem erros, o resultado esperado uma janela com o horrio

    do servidor.

    Exemplo

    No ambiente montado para teste, o servidor de Web Service e o client esto no sistema, compilados no mesmo

    Repositrio de Objetos.

    Para fins didticos, possvel simular uma ocorrncia de falha no client ao desabilitar o servidor HTTP do TOTVS |

    Application Server (configurar a chave Enable=0, na seo [HTTP], do arquivo de configurao do TOTVS | Application

    Server), e reiniciar o TOTVS | Application Server e executar o programa client novamente. Com isso, o sistema apresentar

    uma tela semelhante ao exemplo abaixo:

    Gerao de client em AdvPL - 5 Passo

    5 Passo - Obtendo informaes de debug.

    At o 4 passo, vimos um exemplo completo de um client funcionando perfeitamente. Agora, possvel

    verificarmos que, durante o desenvolvimento e testes do client do servio, faam-se necessrias determinadas informaes

    internas as rotinas de execuo do servio no client AdvPL.

    Para isso, foi criada a funo WSDLDbgLevel() que permite definir em tempo de execuo, um nvel de

    detalhamento de informaes adicionais relacionadas ao Web Service; informaes que so apresentadas no console do

    TOTVS | Application Server (caso habilitado).

    Essa funo recebe um nmero como parmetro, sendo:

  • Valor Descrio

    0 (padro) Sem informaes adicionais.

    1 Apenas strings SOAP de retorno do TOTVS | Application Server.

    2 String SOAP de envio e retorno.

    Alm disso, observe na linha 7, do cdigo-fonte do 3 Passo, que a instruo WSDLDbgLevel(2) acrescentada para

    ativar o nvel mais complexo de informaes adicionais e possvel observar no console, do TOTVS | Application Server, as

    mensagens apresentadas durante a execuo do cdigo-fonte de testes do ?client?.

    Deve ser obtido um echo no console do TOTVS | Application Server semelhante ao exemplo abaixo:

    Iniciando Thread (siga0984, AUTOMAN)...

    1 Exemplo

    -------------------------------------------------------------------------------

    SvcSoapCall to http://automan:8000/webservice/SERVERTIME.apw / DOCUMENT

    NameSpace http://automan:8000/webservice/

    SoapAction http://automan:8000/webservice/GETSERVERTIME

    Called from GETSERVERTIME ( 137)

    Called from U_TESTCLIENT ( 10)

    2 Exemplo

    ---------------------------------- SOAPSEND -----------------------------------

    -------------------------------------------------------------------------------

    3 Exemplo

    --------------------------------- POST RETURN ---------------------------------

    10:37:10

    -------------------------------------------------------------------------------

    Fim Thread (siga0984, AUTOMAN) BytesIn 73 BytesOut 75

  • No primeiro exemplo so as mensagens informativas a respeito da chamada do Web Service, informando a URL

    chamada, o estilo SOAP de troca de dados (document), o NameSpace e o SoapAction utilizados. No segundo

    exemplo (SOAPSEND) informa o contedo do pacote Soap que foi enviado (postado) ao Servidor, e no terceiro exemplo

    (POST RETURN) informa o contedo do pacote Soap devolvido pelo Server referente a esta solicitao.

    Quando ocorre um erro qualquer, relacionado execuo do ?client? Web Services, o mtodo chamado retorna .F.,

    e o erro pode ser recuperado atravs da funo GetWSCerror(), vista anteriormente . Para cada exceo prevista

    no ?client?, existe um cdigo de erro correspondente, todos eles prefixados com WSCERR . A maioria das ocorrncias est

    relacionada gerao do Cdigo-fonte do ?client? AdvPL utilizado-se o TOTVS | Development Studio. Todas as ocorrncias

    de exceo tratadas peo Web Services ?client? AdvPL esto relacionadas no Tpico Web Services ?client? ? Cdigos de

    Erro.

    Ocorrncias de erro

    [WSDL no suportado. Existe mais de um servio declarado.]

    Esta ocorrncia de erro reproduzida, quando da gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |

    Development Studio. Por definio, um WSDL deve conter um e apenas um servio declarado, com um ou mais mtodos.

    Caso sejam identificados mais de um servio no mesmo WSDL, no momento da gerao do cdigo-fonte, o processo

    abortado, o WSDL considerado invlido, e o cdigo-fonte client no gerado.

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

    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.

    WSCERR003 / [XXX / YYY] Enumeration no suportado

    Esta ocorrncia de erro reproduzida, quando 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

    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

    e , correspondendo ao nome do parmetro e tipo utilizado, respectivamente.

  • WSCERR004 / NO IMPLEMENTADO ( 001 / / WSDLTYPE_NAME )

    Esta ocorrncia de erro reproduzida, quando da gerao de um cdigo-fonte de WebService '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 deste processamento, uma estrutura contenha um determinado elemento, que aponte para outra estrutura, e

    esta no seja encontrada no WSDL ( ocorrncia = A ), ou seja encontrada - porm registrada no como uma estrutura

    (complextype)- ( ocorrncia = B ), o WSDL considerado invlido, e o processo de gerao abortado com a

    mensagem acima, identificando a estrutura pendente em .

    WSCERR006 / WSDL invlido ou no suportado.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

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

    WSCERR007 / WSDL invlido ou no suportado.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

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

    WSCERR008 / Retorno NULLPARAM invlido.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste 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.

    WSCERR009 / 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.

  • WSCERR010 / [STRUCT_TYPE] Estrutura / Tipo incompleto

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

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

    WSCERR011 / Retorno NULLPARAM invlido.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste 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.

    Observao: Esta ocorrncia semelhante ocorrncia WSCERR008, porm esta ocorrncia (011) refere-se uma

    subestrutura do servio , e a primeira (008) refere-se um parmetro/estrutura de primeiro nvel do servio.

    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.

    Observao: Esta ocorrncia semelhante WSCERR009, porm esta indica uma falha em outro ponto da rotina interna

    de anlise.

    WSCERR013 / [SOAP_TYPE] UNEXPECTED TYPE.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste processamento, um parmetro de tipo bsico no se encontre entre os tipos bsicos suportados

    pelo engine 'Client' de WebServices do ERP, a gerao do cdigo-fonte abortada com esta ocorrncia, indicando em

    SOAP_TYPE o tipo no suportado.

    WSCERR014 / INVALID NULLPARAM INIT

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

  • Quando deste processamento, para cada propriedade da estrutura do servio so montadas as rotinas de inicializao de

    cada uma delas. 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.

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

    Esta ocorrncia reproduzida, quando da 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().

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

    Esta ocorrncia de erro reproduzida, quando da 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;

    porm a build do ERP atual no suporta o tratamento de Web Services em HTTPS, a gerao do cdigo-fonte abortada

    com esta ocorrncia de erro.

    Para gerar um fonte 'Client' de WebServices, que utilize o protocolo HTTPS, a build do ERP deve ser atualizado.

    WSCERR017 / HTTP[S] Requisio retornou [NIL]

    Esta ocorrncia de erro reproduzida, quando da 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 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.

    WSCERR018 / HTTP[S] Requisio retornou [EMPTY]

    Esta ocorrncia de erro reproduzida, quando da 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.

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

    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 uma URL para buscar a definio do servio (WSDL), apontando para um arquivo

    no disco, porm o arquivo no foi 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.

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

    Esta ocorrncia de erro reproduzida, quando da gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |

    Development Studio. Quando informada uma URL para buscar a definio do servio (WSDL), apontando para um arquivo

    no disco; porm houve uma 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.

    WSCERR021 / [INFO] WSDL Parsing [PARSER_WARNING]

    Esta ocorrncia de erro reproduzida, quando da gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |

    Development Studio. Quando informada uma URL para buscar a definio do servio (WSDL), aps o documento WSDL ser

    recuperado, caso seja detectada alguma inconsistncia, considerada pelo parser interno de xml do sistema como uma

    advertncia (warning), no documento XML, o WSDL considerado invlido e a gerao do fonte cancelada, com esta

    ocorrncia. Em PARSER_WARNING discriminada a mensagem de advertncia do parser interno; e em [INFO]

    especificado o documento/operao que apresentou a inconsistncia.

    WSCERR022 / [INFO] WSDL Parsing [PARSER_ERROR]

    Esta ocorrncia de erro reproduzida, quando da gerao de um cdigo-fonte de WebServices 'Client', utilizando o TOTVS |

    Development Studio. Quando informada uma URL para buscar a definio do servio (WSDL), aps o documento WSDL ser

    recuperado, caso seja detectada alguma inconsistncia, considerada pelo parser interno de xml do sistema como erro no

    documento XML, 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.

  • WSCERR023 / [xxx] FALHA INESPERADA AO IMPORTAR WSDL

    Esta ocorrncia reproduzida, ao gerar um cdigo-fonte de Web Services Client, utilizando o TOTVS | Development Studio.

    Ao informar uma URL para buscar a definio do servio (WSDL), aps o documento WSDL ser recuperado, caso tenha

    passado pela etapa de validao XML, onde o documento retornado constitui um XML sintaticamente vlido, 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.

    WSCERR024 / [MSG_INFO] MESSAGE no encontrada.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste processamento, caso uma seo de mensagens (message) seja especificado para uma operao, porm no

    seja encontrado 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 da lista de mtodos do WSDL.

    WSCERR025 / [BIND_INFO] Binding no Encontrado.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste processamento, caso uma seo de amarrao (binding) no seja localizado 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].

    WSCERR026 / TARGETNAMESPACE no definido no WSDL.

    Esta ocorrncia de erro reproduzida, quando 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, 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.

    WSCERR027 / [OPER_INFO] BIND:OPERATION no encontrado.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

  • Quando deste 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].

    WSCERR028 / [PORT_INFO] PortType no Encontrado em aPort.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste 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].

    WSCERR029 / [PORT_INFO] PortType no contm operaes.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste 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].

    WSCERR031 / [SCTUCT_NAME] Tipo sem NAMESPACE.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando deste processamento, caso uma 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 invlido, e o processo de gerao abortado com a mensagem acima, identificando a estrutura incompleta

    em [STRUCT_NAME].

    WSCERR032 / [SHORT_NS] NAMESPACE no encontrado.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando do 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].

  • WSCERR033 / [LONG_NS] NameSpace sem Import declarado

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

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

    WSCERR034 / [INFO_NS] NAMESPACE sem LOCATION informado.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Complementar ao erro WSCERR033, este reproduzido quando a declarao da URL/Location do NameSpace externo no

    esteja declarado no 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].

    WSCERR035 / [TYPE] Tipo indefinido.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando do 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 reprocessado. 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].

    WSCERR036 / Definio no suportada.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas.

    Quando da validao de estruturas complexas, caso a mesma no possua tipo definido, e no seja uma referncia externa

    ao WSDL, ela deve ser uma referncia ao prprio SCHEMA. Caso seja especificado qualquer outro tipo de referncia, o

    WSDL no suportado, e o processo de gerao abortado com a mensagem acima.

    WSCERR037 / [TYPE] Estrutura Interna Inesperada.

    Esta ocorrncia de erro reproduzida, quando 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, at que todas as estruturas utilizadas sejam processadas. Quando da 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].

    WSCERR038 / [PARAM] WSDL invlido ou no suportado.

    Esta ocorrncia de erro reproduzida, quando 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, 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 significa que : OU o WSDL fornecido no vlido, OU 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.

    WSCERR039 /