Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

  • Através do método SimpleInput, a classe irá disponibilizar uma lista com os elementos que serão definidos na mensagem SOAP que será enviada. A lista possui o nome dos elementos e o id interno deles. Logo, para definir o valor de um elemento utiliza-se o id do mesmo. Mas é possível também definir o valor passando o nome do elemento, fazendo com que a classe procure o mesmo, seja o primeiro encontrado (métodos SetFirst ou SetFirstArray) ou de acordo com os elementos pai (métodos SetValPar ou SetValParArray), e defina seu valor.
  • WSDL - Web Services Description Language (Linguagem para descrição de web services) é uma linguagem baseada em XML para descrição dos serviços, operações e métodos de um web service. O documento gerado a partir do documento WSDL é no formato SOAP. Para mais informações sobre WSDL acesse o endereço: http://www.w3.org/TR/wsdl.
  • SOAP - Simple Object Access Protocol (Protocolo Simples de Acesso a Objetos) é um protocolo baseado em XML para troca de informações estruturadas em plataforma descentralizada e distribuída, normalmente web services. Para mais informações acesse: http://www.w3.org/TR/soap/.
  • Para saber como habilitar e configurar o módulo no Protheus, acesse: https://tdn.totvs.com/display/public/PROT/Configurar+Portais+e+Webservices
  • Para obter mais informações dos modelos regulamentados pela W3C - World Wide Web Consortium, acesso o endereço: http://www.w3c.org.
  • Alguns endereços com tutoriais sobre as tecnologias envolvidas podem ser acessados em http://www.w3schools.com/ e http://www.tutorialspoint.com/.

...

Exemplo 1.A - Cria um WebService Agenda com elementos complexoselemento complexo

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
#include "protheus.ch"
#include "apwebsrv.ch"
 
WSSTRUCT Contato
  WSDATA Nome AS String
  WSDATA Telefone AS String OPTIONAL
ENDWSSTRUCT
 
WSSTRUCT Contatos
  WSDATA Registros AS ARRAY OF Contato
ENDWSSTRUCT
 
WSSERVICE Agenda
  WSDATA _status AS Boolean
  WSDATA _dados AS Contatos
  WSMETHOD InsereContatos
  WSMETHOD ListaContatos
ENDWSSERVICE
 
WSMETHOD InsereContatos WSRECEIVE _dados WSSEND _status WSSERVICE Agenda
  Local nI

  // Exibe os dados recebidos. Eles seriam inseridos em umuma tabela de numum banco de dados.
  for nI := 1 to Len( ::_dados:Registros )
    conout( "Registro " + cValToChar( nI ) )
    conout( "Nome: " + ::_dados:Registros[nI]:Nome )
    conout( "Telefone: " + IIf( Empty( ::_dados:Registros[nI]:Telefone ), "Nao tem", ::_dados:Registros[nI]:Telefone ) + CRLF )
  next nI
   
  // Devove um status informando que a operação foi feita com sucesso. Esse status será devolvido na mensagem SOAP de resposta a esse método.
  ::_status := .T.
   
// Retorna que a operação foi feita com sucesso para a camada do Protheus. 
Return .T.
 
WSMETHOD ListaContatos WSRECEIVE NULLPARAM WSSEND _dados WSSERVICE Agenda
  Local nDay := dow( date() )
  Local oNewContato

  if nDay == 1 .Or. nDay == 7
    SetSoapFault( "Metodo não disponível", "Este serviço não funciona no fim de semana." )
     
    return .F.
  endif
   
  // Os dados de retorno seriam pegos do banco de dados.
  // Para esse exemplo iremos popular o retorno com dados fixos.
   
  // Cria a instância de retorno ( WSDATA _dados AS Contatos )
  ::_dados := WSClassNew( "Contatos" )
   
  // inicializa a propriedade da estrutura de retorno
  // WSDATA Registros AS ARRAY OF Contato
   
  ::_dados:Registros := {}
   
  // Cria e alimenta uma nova instancia do Contato
  oNewContato :=  WSClassNew( "Contato" )
  oNewContato:Nome := "Fulano"
  oNewContato:Telefone := "98765"
  AAdd( ::_dados:Registros, oNewContato )
   
  // Cria e alimenta uma nova instancia do Contato
  oNewContato :=  WSClassNew( "Contato" )
  oNewContato:Nome := "Ciclano"
  oNewContato:Telefone := "95678"
  AAdd( ::_dados:Registros, oNewContato )

  varInfo("listaContatos", ::_dados:Registros)
   
// Retorna que a operação foi feita com sucesso para a camada do Protheus. 
Return .T.

...