4D v16.3

WEB SERVICE CALL

Página Inicial

 
4D v16.3
WEB SERVICE CALL

WEB SERVICE CALL 


 

WEB SERVICE CALL ( urlAcesso ; soapAction ; nomeMetodo ; nomeEspaço {; tipoComplexo {; *}} ) 
Parâmetro Tipo   Descrição
urlAcesso  String in Acesso URL ao Webservice
soapAction  String in Conteúdos do campo SOAPAction
nomeMetodo  String in Nome do método
nomeEspaço  String in nomeespaço XML
tipoComplexo  Inteiro longo in Configuração de tipos complexos (tipos simples se omitido)
Operador in Não fechar a conexão

O comando WEB SERVICE CALL se utiliza para chamar um serviço web enviando uma petição HTTP. Esta petição contém a mensagem SOAP criada previamente utilizando o comando WEB SERVICE SET PARAMETER .

Toda chamada posterior ao comando WEB SERVICE SET PARAMETER provocará a criação de uma nova petição. A execução de um comando WEB SERVICE CALL também apaga todo resultado do serviço web chamado anteriormente e o substitui com os novos resultados.

Em urlAcesso, passe a URL completa que permite acessar ao serviço web (não confunda esta URL com a do arquivo WSDL, que descreve o serviço web).

Acesso em modo seguro (SSL)

Se desejar utilizar um serviço web em modo seguro utilizando SSL, passe https:// na frente da URL ao invés de http://. Esta configuração ativa automaticamente a conexão em modo seguro.

Note que este comando pode utilizar um certificado servidor (ver o comando HTTP SET CERTIFICATES FOLDER). Se este certificado não é válido (vencido ou revogado), a variável sistema OK toma o valor e se devolve o erro 901 "Certificado servidor inválido". Pode interceptar este erro utilizando um método de gestão de erros instalado pelo comando ON ERR CALL.

Em soapAction, passe o conteúdo do campo SOAPAction da petição. Este campo contém geralmente o valor “ServiceName#MethodName”.

Em nomMetodo, passe o nome do método remoto (que pertence ao serviço Web) que deseja executar.

Em nomEspaço, passe o espaço do nome XML (namespace) utilizado para a petição SOAP. Para maior informação sobre os nomes de espaços XML, consulte o Manual de Desenho.

O parâmetro opcional tipoComplexo especifica a configuração dos parâmetros web Service enviados ou recebidos (definidos utilizando os comandos  WEB SERVICE SET PARAMETER e WEB SERVICE GET RESULT).

O valor do parâmetro tipoComplexo depende do modo de publicação do serviço web (DOC ou RPC, ver o Manual de Desenho) e seus próprios parâmetros.

Em tipoComplexo, deve passar uma das seguintes constantes, que ficam no tema Serviços Web (Cliente):

Constante Tipo Valor
Web Service dynamic Inteiro longo 0
Web Service manual Inteiro longo 3
Web Service manual in Inteiro longo 1
Web Service manual out Inteiro longo 2

Cada constante corresponde a uma “configuração”. Una configuração representa uma combinação entre o modo de publicação (RPC/DOC) e os tipos de parâmetros (entrada/saída, simples ou complexos) implementado.

Nota: lembre que a característica “entrada” ou “saída” dos parâmetros se avalia desde o ponto de vista do método proxy/serviço web:

  • um parâmetro “entrada” é um valor passado ao método proxy e portanto ao serviço web,
  • um parâmetro “saída” é retornado pelo serviço web e portanto pelo método proxy (geralmente através de $0).

A seguinte tabela mostra todas as configurações possíveis, assim como as constantes correspondentes:

Parâmetros entrada
Parâmetros saídaSimplesComplexo
SimplesWeb Service DynamicWeb Service Manual In
(modo RPC)(modo RPC)
ComplexoWeb Service Manual OutWeb Service Manual
(modo RPC)(modo RPC ou DOC)
As cinco configurações descritas a continuação podem ser implementadas. Em todos os casos, 4D administrará o formato da petição SOAP a enviar ao serviço web além de seu envelope. Você que decide o formato  dos conteúdos da petição de acordo com a configuração utilizada.

Nota: apesar do fato de que os tipos XML são complexos, os arrays de dados são tratados por 4D como tipos simples.

Esta configuração é a mais fácil de utilizar. Neste caso, o parâmetro tipoComplexo contém a constante Web Service Dynamic ou é omitido.

Os parâmetros enviados e as respostas recebidas podem ser manipulados diretamente, sem processamento prévio.

Consulte o exemplo do comando WEB SERVICE GET RESULT

Neste caso, o parâmetro tipoComplexo contém a constante Web Service Manual In. Com esta configuração, deve passar “manualmente” ao serviço Web cada elemento XML fonte na forma de um BLOB, com a ajuda do comando WEB SERVICE SET PARAMETER.

Depende de você formatar o BLOB inicial como um elemento XML válido. Este BLOB deve conter como primeiro elemento o primeiro elemento “filho” do elemento <Body> da petição final.

Exemplo

 C_BLOB($1)
 C_BOOLEAN($0)
 
 SET WEB SERVICE PARAMETER("MeuXMLBlob";$1)
 CALL WEB SERVICE("http://meu.dominio.com/meu_servico";"MinhaActionSoap";"meuMetodo";
 "http://meu.nomespaco.com/";Web Service manual in)
 GET WEB SERVICE RESULT($0;"MinhaVarSaida";*)

Neste caso, o parâmetro tipoComplexo contém a constante Web Service Manual Out. Cada parâmetro de saída será retornado pelo serviço Web na forma do elemento XML armazenado em um BLOB. Recupera este parâmetro utilizando o comando WEB SERVICE GET RESULT.Depois pode analizar o conteúdo do BLOB recebido utilizando os comandos XML de 4D.

Exemplo

 C_BLOB($0)
 C_BOOLEAN($1)
 
 SET WEB SERVICE PARAMETER("MinhaVarEntrada";$1)
 CALL WEB SERVICE("http://meu.dominio.com/meu_serviço";"MinhaAcaoSoap";"meuMetodo";
 "http://meu.nomespaco.com/";Web Service manual out)
 GET WEB SERVICE RESULT($0;"MeuXMLSaida";*)

Neste caso, o parâmetro tipoComplexo contém as constantes Web Service Manual. Cada parâmetro de entrada e de saída deve ser armazenado na forma dos elementos XML nos BLOBs, como foi descrito nas duas configurações anteriores.

  • Exemplo
 C_BLOB($0)
 C_BLOB($1)
 
 SET WEB SERVICE PARAMETER("MeuBlobXMLEntrada";$1)
 CALL WEB SERVICE("http://meu.dominio.com/meu_servico";"MinhaAccionSoap";"meuMetodo";
 "http://meu.nomespaco.com/";Web Service manual)
 GET WEB SERVICE RESULT($0;"MeuXMLSaida";*)

Um método proxy de chamada de um serviço web DOC é similar a um método proxy de chamada de um serviço web RPC utilizando os parâmetros de entrada e de saída complexos

A única diferença entre estas duas configurações é o nivel do conteúdo XML dos parâmetros BLOB passados e recebidos. Desde o ponto de vista de 4D, a construção e o envio da petição SOAP são idênticos.

  • Exemplo
 C_BLOB($0)
 C_BLOB($1)
 
 SET WEB SERVICE PARAMETER("MeuXMLEntrada";$1)
 CALL WEB SERVICE("http://meu.dominio.com/meu_servico";"MinhaActionSoap";"meuMetodo";
 "http://meu.nomespaco.com/";Web Service manual)
 GET WEB SERVICE RESULT($0;"MeuXMLSaida";*)

Nota: no caso dos serviços web DOC, o valor das strings (“MeuXMLEntrada” e “MeuXMLSaída”) passadas como parâmetros não importa, é possível inclusive passar strings vazias"". De fato, estes valores não são utilizados na petição SOAP contida no documento XML. É obrigatório passar estes parâmetros.

Para utilizar um serviço web publicado em modo DOC (ou em modo RPC com tipos complexos), é recomendável proceder desta forma:

  • Gerar o método proxy utilizando o Assistente Client Web Services.
O método proxy será chamado dessa forma: $XMLresultadoBlob:=$DOCproxy_Metodo($XMLparamBlob)

• É bom se acostumar com os conteúdos das petições  SOAP a enviar ao servço web utilizando uma ferramenta de teste online (por exemplo, http://soapclient.com/soaptest.html). Este tipo de ferramenta é utiliza para gerar os formulários de teste HTML, a partir do WSDL do serviço web.

  • Copie o conteúdo XML gerado a partir do primeiro filho de <body>.
  • Escreva o método permitindo localizar os valores reais dos parâmetros no código XML; este código deve estar localizado no BLOB $XMLparamBlob.
  • Para analizar a resposta, pode igualmente utilizar uma ferramenta de teste online, ou utilizar o WSDL que especifica os elementos retornados.

O parâmetro * pode ser utilizado para otimizar chamadas. Quando for passado, o comando não fecha a conexão utilizada pelo processo ao final de sua execução. Neste caso, a próxima chamada a WEB SERVICE CALL reutilizará a mesma conexão se for passa o parâmetro *, etc. Para fechar a conexão, simplesmente execute o comando WEB SERVICE CALL sem o parâmetro *. Este mecanismo pode ser utilizado para acelerar bastante os processos em caso de chamadas sucessivas a vários serviços web no mesmo servidor, especialmente em uma configuração WAN (via Internet, por exemplo). Note que este mecanismo depende do parâmetro “keep-alive” do servidor web. Este parâmetro geralmente define um número máximo de petições através da mesma conexão, e pode até mesmo negar petições. Se as petições WEB SERVICE CALL  seguirem uma atrás da outra na mesma conexão alcançarem este número máximo, ou se as conexões keep-alive não forem permitidas, 4D criará uma nova conexão para cada petição.

Se a petição for corretamente encaminhada, e o Web Service a aceitar, a variável sistema OK assume o valor 1. Do contrário, assume o valor 0 e um erro é devolvido.



Ver também 

WEB SERVICE GET RESULT
WEB SERVICE SET PARAMETER

 
PROPRIEDADES 

Produto: 4D
Tema: Web Services (Client)
Número 778

Este comando modifica a variável sistema OK

 
HISTÓRIA 

Modificado: 4D v11 SQL
Renomear: 4D v13
Modificado: 4D v14

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)