Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 15 Próxima »

A classe TWsdlManager faz o tratamento para arquivos WSDL (Web Services Description Language). Esta classe implementa métodos para identificação das informações de envio e resposta das operações definidas, além de métodos para envio e recebimento do documento SOAP.

A classe trabalha com 2 tipos de dados: os tipos complexos, que são as seções do XML, e os tipos simples, que são as tags que recebem valor. Por exemplo, numa operação de inserção de clientes, a tag "cliente" é um tipo complexo, pois contém os dados do cliente dentro, e as uma tag "nome" é um tipo simples, pois recebe diretamente um valor (no caso, o nome do cliente).

TWsdlManager irá realizar o parse de um WSDL, seja por uma URL ou por arquivo, e irá disponibilizar 2 listas principais de dados para inserção: uma lista com os tipos simples (através do método SimpleInput) e uma lista de tipos complexos (através do método ComplexInput). A lista de tipos complexos terá somente os tipos complexos que tenham número variável de elementos. Por exemplo, se tiver 2 tipos complexos onde um deles tem mínimo de 1 e máximo de 1, e outro com mínimo de 1 e máximo 2, só o que tem o valor mínimo diferente do valor máximo irá ser listado pelo método ComplexInput.

Caso o método ComplexInput retorne alguma tag, deve-se ser definido a quantidade de vezes que cada uma das tags retornadas irá aparecer no XML final (SOAP). Para isso utiliza-se o método SetComplexOccurs. Caso não seja especificado a quantidade de vezes que a tag irá aparecer, a classe irá considerar a quantidade como 0 (zero).

Uma vez definida a quantidade de vezes que os tipos complexos irão aparecer na mensagem SOAP, aí pode chamar o método SimpleInput, para poder retornar quais são os campos que irão receber valor. Os tipos simples podem ter seus valores definidos através dos métodos SetValue (para 1 valor apenas) ou SetValues (para mais de 1 valor). Para saber a quantidade de valores aceitos pelo tipo simples é só olhar a quantidade mínima e máxima informada no método SimpleInput, índices 3 e 4 de cada tag, respectivamente.

Hierarquia

  • TWsdlManager

Construtores

Propriedades

Métodos

Observações

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

Exemplos

Exemplo 1
User Function Teste()
  Local oWsdl
  Local xRet
  Local aOps := {}, aComplex := {}, aSimple := {}
  
  // Cria o objeto da classe TWsdlManager
  oWsdl := TWsdlManager():New()
  
  // Faz o parse de uma URL
  xRet := oWsdl:ParseURL( "http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL" )
  if xRet == .F.
    conout( "Erro: " + oWsdl:cError )
    Return
  endif
  
  aOps := oWsdl:ListOperations()
  
  if Len( aOps ) == 0
    conout( "Erro: " + oWsdl:cError )
    Return
  endif
  
  varinfo( "", aOps )
  
  // Define a operação
  xRet := oWsdl:SetOperation( "GetCityForecastByZIP" )
  //xRet := oWsdl:SetOperation( aOps[1][1] )
  if xRet == .F.
     conout( "Erro: " + oWsdl:cError )
     Return
  endif
  
  aComplex := oWsdl:ComplexInput()
  varinfo( "", aComplex )
  
  aSimple := oWsdl:SimpleInput()
  varinfo( "", aSimple )
  
  // Define o valor de cada parâmeto necessário
  xRet := oWsdl:SetValue( 0, "90210" )
  //xRet := oWsdl:SetValue( aSimple[1][1], "90210" )
  if xRet == .F.
    conout( "Erro: " + oWsdl:cError )
    Return
  endif
  
  // Exibe a mensagem que será enviada
  conout( oWsdl:GetSoapMsg() )
  
  // Envia a mensagem SOAP ao servidor
  xRet := oWsdl:SendSoapMsg()
  if xRet == .F.
    conout( "Erro: " + oWsdl:cError )
    Return
  endif
  
  // Pega a mensagem de resposta
  conout( oWsdl:GetSoapResponse() )
  
  if xRet == .F.
    conout( "Erro: " + oWsdl:cError )
    Return
  endif
Return

Abrangência

Builds superiores a 121227P.

  • Sem rótulos