SOAP Lite – Consumindo WebServices SOAP com o Magic xpa 4.x

Vejamos a seguir nesta publicação, como consumir um webServices SOAP no Magic xpa 4.x usando a instrução: Invoke Web Service Lite.

São várias as opções que temos disponíveis no Magic xpa 4.x para o consumo de webServices SOAP, a partir de um WSDL existente:

 

  • Invoke WS Lite
  • WCF Client
  • HTTP Post Operation
  • Apache AXIS2

 

Neste post, vamos abordar e exemplificar a opção 1: Consumo de WS SOAP com o Invoke Web Service Lite.

(em outras publicações falaremos das demais opções)

 

Esta (SOAP Lite) é uma opção multi plataforma: serve tanto para o SO Windows, quanto para o SO Linux.

Mas antes, vamos abordar as “pré-condições” para utilização deste recurso.

 

Pré-Requisitos

Não há nenhum pré-requisito para esta funcionalidade. Este é um recurso nativo das bibliotecas que vem junto ao produto, e não requer instalação e configuração de frameworks adicionais.

Esta opção é simples e eficiente, mas não é para 100% dos casos (necessidades). Alguns sites podem requerer um acesso mais elaborado em termos de segurança ou outros protocolos (com certificado digital por exemplo). Para cenários assim, as outras opções com WCF ou AXIS2 são a solução.

 

Consumindo o Serviço Web

 

Neste exemplo vamos utilizar o https://www.dataaccess.com/webservicesserver/TextCasing.wso?WSDL, método InvertStringCase:

*Nota: Este WS simples recebe um texto como argumento e inverte suas letras maiúsculas em minúsculas, e vice-versa.

 

Aqui, trata-se programação pura em Magic xpa apenas.

Primeiro, precisaremos ter 4 variáveis (virtuais) para esta chamada:

 

Serão 2 Blobs/ANSI para conter as mensagens de ‘Request‘ e ‘Response(em xml), 1 Logical para saber se a chamada teve sucesso e 1 Alpha para obter detalhes do erro ocorrido, caso ocorra algum.

Em seguida, escolhemos o comando Invoke Web Service Lite em alguns do handlers da tarefa/programa e informamos ao assistente o WSDL do serviço (que pode ser uma URL ou um arquivo em disco).

 

Ao clicar “Ok“, serão apresentados os métodos disponíveis (localizados) nesse descritor de serviços:

 

Escolhemos o que nos interessa (InvertStringCase) e clicamos “Select“.

Após, ao executar o ZOOM (F5) neste mesmo comando, vamos configurar o seu “Retorno“:

 

Serão 3 das 4 variáveis mencionadas:

  • Blob = para receber o xml retornado do serviço (ex: ws-Response)
  • Logical = para receber o status TRUE/FALSE do sucesso da chamada
  • Alpha = para receber os detalhes do erro na chamada, caso ocorra algum

Em seguida, ao executar o ZOOM (F5) no parâmetro “Arguments” deste mesmo comando, vamos configurar o seu “Envio“:

  • Blob = com o xml a ser enviado serviço (ex: ws-Request)

 

Com estas etapas, a chamada em si ao serviço web está concluída. Mas vamos ver dois pontos importantes (e essenciais) ainda:

  • Como montar o xml de envio?
  • Como ler o xml de retorno?

 

Existe mais de uma forma de fazermos isso. Mas aqui neste exemplo vamos fazer via XML DataSources, que é a habilidade do Magic xpa 4.x em manipular documentos xml como se fossem tabelas de dados (Data Sources).

Nos passos acima, quando selecionamos o método do WSDL a utilizar, nessa hora foram gerados 2 schemas (XSDs) na pasta %EngineDir%SoapClientModules\SOAPLITE:

 

Um arquivo “In” descrevendo o XML a ser enviado, e um arquivo “Out” descrevendo o XML que será recebido.

*Nota: Esta pasta %EngineDir%\SoapClientModules\SOAPLITE não precisa ser levada para o ambiente do Magic xpa Runtime, que vai executar este projeto. Mas sem problemas se quiser levar.

 

Com estes 2 schemas (XSDs) nós devemos criar as definições das ‘tabelas xmls’ no Repositório de Tabelas (SHIFT+F2), através da ferramenta do Magic xpa Studio chamada Get Definition (F9):

 

Importante destacar que:

  • Na definição com base no XSD “In“, pedimos ao assistente para gerar também o programa modelo “Create“.
  • Na definição com base no XSD “Out“, pedimos ao assistente para gerar também o programa modelo “Scan“.

 

O programa “Create” tem (como sugere o seu nome) o propósito de criar dados no XML.

 

Ele é um ‘Batch/Modify‘ com finalização definida como ‘Yes/After‘, e tem um Link Create que adiciona dados na tabela recém definida com base no XSD “In“.

Ele também tem um parâmetro Blob, associado ao XML Source Var do Link.

Isso significa que: ele vai rodar uma vez, adicionar um registro nesta tabela, executar as instruções que possam existir no Record Prefix ou Record Suffix e ao final, transformar os registros desta tabela em um documento XML, guardado dentro desta variável/parâmetro Blob.

Por isso, no RS deste programa vamos preencher o campo “sAString” com o valor: ‘magic SOFTWARE brasil’

 

Já o programa “Scan“, tem o propósito de ler dados do XML.

Ele é um ‘Batch/Query‘ com finalização definida como ‘No/After‘, e tem um Main Source que lê dados da tabela recém definida com base no XSD “Out“.

Ele também tem um parâmetro Blob, associado ao XML Source Var do Main Source.

Isso significa que: ele vai transformar o conteúdo da variável/parâmetro Blob em registros desta tabela, e executar as instruções que possam existir no Record Prefix ou Record Suffix.

 

Tendo completado estas etapas, podemos concluir o consumo do webService.

 

Antes de executar o Invoke Web Service Lite., chamamos o programa “Create” passando o Blob ws-Request como argumento por referência.

Isso vai criar o documento de envio.

 

Depois de executar o Invoke Web Service Lite., chamamos o programa “Scan” passando o Blob ws-Response como argumento.

Isso vai converter o documento de retorno em registro da tabela.

 

Executando esta sequência de ações, e consultando os dados das 2 tabelas XML, teremos este resultado:

 

Baixe deste endereço um projeto exemplo com o Magic xpa 4.7, usando o Invoke Web Service Lite.

 

Manoel Frederico Silva – Gerente de Tecnologia e Evangelista MAGIC – Magic Brasil
Manoel Frederico Silva – Evangelista MAGIC – Magic Brasil

 

Para receber os artigos do Blog Magic Brasil em primeira mão no seu email, registre-se aqui

2 comentários

  1. Boa tarde
    Estou tentando replicar o exemplo que você apresenta, mas me dá um erro quando tento inserir a URL para a conexão (URL invalid-URL Error).
    Você poderia me dizer se algo semelhante aconteceu com alguém e como eles resolveram, seria muito útil.
    obrigada

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *