quarta-feira, 11 de maio de 2016

Advpl Web Service - Parte 2



Fala galera!

No post anterior (veja aqui) nós configuramos e habilitamos no Protheus um novo web service. Hoje nós iremos fazer uma pequena aplicação, onde será apresentado alguns dados do cliente em nossa consulta.

Criaremos um novo fonte no Developer Studio e vamos nomeá-lo como WSCLIENTE. Então adicionaremos as seguintes bibliotecas:

#include "protheus.ch"
#include "totvswebsrv.ch"
#include "apwebsrv.ch"

*Sem estas bibliotecas não será possível executar o programa. 

Agora iremos criar nosso web service e seu nome será WSBUSCLI. Nosso web service terá os seguintes propriedades e método:

WSSERVICE WSBUSCLI
 WSDATA Codigo as String
 WSDATA DadosCliente as Cliente
 
 WSMETHOD GetCliente DESCRIPTION "Busca cliente por código"
ENDWSSERVICE"

Começamos nossa declaração de classe web service utilizando o WSSERVICE. Dentro dela declaramos os métodos (WSMETHOD) e as propriedades (WSDATA).

  • WSMETHOD: inicia a declaração de um método em uma classe de web service;
  • WSDATA: declara uma propriedade de uma classe Web Service.

Na nossa classe teremos uma propriedade Codigo do tipo String, uma propriedade DadosCliente do tipo Cliente (veremos isso logo abaixo) e um método GetCliente.
Lembre-se de encerrar a declaração da classe com ENDWSSERVICE.

A nossa propriedade DadosCliente é um tipo Soap que declaramos do tipo Cliente. Veja o código abaixo:

WSSTRUCT Cliente
 WSDATA Nome as String     
 WSDATA Endereco as String
 WSDATA Bairro as String
 WSDATA Municipio as String
 WSDATA Estado as String 
ENDWSSTRUCT

Nessa estrutura (WSSTRUCT) chamada Cliente, possui propriedades que serão enviadas após a requisição do cliente. Definimos o retorno como Nome, Endereco, Bairro, Municipio e Estado. Todos estes do tipo String.

Agora vamos falar do nosso método. O método recebe, no nosso caso, o código do cliente e retorna o DadosCliente. Vejam o código:

WSMETHOD GetCliente WSRECEIVE Codigo WSSEND DadosCliente WSSERVICE WSBUSCLI
 
 dbSelectArea("SA1")
 SA1->(dbSetOrder(1))
 SA1->(dbGoTop())    
 while !SA1->(EOF()) .and. allTrim(SA1->A1_COD) = allTrim(Codigo)
  ::DadosCliente:Nome := allTrim(SA1->A1_NOME)
        ::DadosCliente:Endereco := allTrim(SA1->A1_END)
        ::DadosCliente:Bairro := allTrim(SA1->A1_BAIRRO)        
        ::DadosCliente:Municipio := allTrim(SA1->A1_MUN)
        ::DadosCliente:Estado := allTrim(SA1->A1_EST)
        SA1->(dbSkip())
 endDo                
 
Return .T.

O código é auto-explicativo, onde acessamos a tabela SA1, definimos qual índice será realizada a busca, posicionamos no registro que possui o campo SA1->A1_COD igual ao código recebido e adicionamos as informações obtidas em cada propriedade de DadosCliente. Ao final da execução, o web service enviará estes dados ao requisitante.

Agora vamos testar nosso código, mas como faremos isso? Muito simples, para que possamos testar, precisamos gerar o client do nosso web service. Então acesse a url do seu web service e pesquise pelo nome que você definiu a ele, em nosso caso WSBUSCLI.

Listagem de métodos disponíveis


Clique sobre ele e outra página será aberta com mais informações desse web service, inclusive mostrando qual(is) método(s) temos disponíveis para uso. Ao lado desse página na parte superior esquerda temos um link, onde nós copiaremos (botão direito do mouse).

Link do método que será utilizado

Após copiar o link, vá até o Developer Studio e crie um novo arquivo. Com esse novo arquivo aberto, vá até o menu em Ferramentas > Gerar novo cliente WebServices.

Gerando o client do web service

Será solicitado uma url, então você insere a que foi copiado no passo anterior. Após clicar em Ok, um novo código aparecerá. então escolha uma pasta de sua preferência e salve este código. Não há necessidade de alterar ou modificá-lo.

Assim que compilar o sistema, podemos testar nosso web service.
Acesse o link do web service, pesquise por WSBUSCLI e clique sobre o método que criamos (GETCLIENTE). Abrirá uma nova página onde teremos o formato de requisição e resposta do SOAP.

Tela de visualização de requisição e resposta SOAP

Clique em testar, então outra página será apresentada, nela existirá um campo solicitando o código do cliente. Este código será enviado ao web service que retornará os dados do cliente pesquisado.

Página de teste


Abaixo temos a resposta do nosso web service:

Resposta da requisição ao método

Bom galera, acho que é só isso rsrs
O post ficou um pouco extenso, mas acredito que ajudará muito quem precisará testar alguns web services em seu ambiente de teste ou até para quem precisa utilizar esta facilidade em ambiente de produção.

Acesse nosso GitHub e visualize esse e outros fontes.

Até mais!

:)
Renan Rodrigues Ramos Desenvolvedor

Sou desenvolvedor, amo desenvolvimento de software, músico e apaixonado por filmes e seriados.