Progress – Consumindo um Webservice público


851 visualizações

 

Trabalhar com webservices dentro do Progress OpenEdge é uma coisa extremamente fácil porque na maioria das vezes não importa em que ou como a webservice é implementada, o importante é ter as operações funcionando corretamente.

Desta forma resolvi procurar uma webservice que eu pudesse acessar e compartilhar de maneira pratica e rápida, então aqui vai uma “mini calculadora” em Progress, open source e o melhor de tudo, feita em 10 minutos!

Começo esta dica informando que se você procura uma webservice para treinar seus conhecimentos, você pode encontrar no site http://www.xmethods.net que guarda um número considerável de webservices públicas para utilização, conversores de pdf, localização geográfica e afins também estão disponíveis entre e treine bastante.

Neste teste vou utilizar uma que converte números inteiros para números romanos e vice versa, utilizarei somente o primeiro tipo de conversão com a seguinte webservice:

http://www.xmethods.net/ve2/ViewListing.po?key=uuid:BF3EFCDD-FCD4-8867-3AAC-068985E7CB89

Em seguida abrimos o Proenv e retiramos toda a documentação da WebService com o comando:

 SQL |  Copiar código |? 
1
bprowsdldoc http://www.xmethods.net/ve2/ViewListing.po?KEY=uuid:BF3EFCDD−FCD4−8867−3AAC−068985E7CB89 c:\temp

 

Assim que a documentação for para a pasta de destino “C:\temp” abra o arquivo index.html e comece a brincadeira, abrindo o AppBuilder crie um novo projeto do tipo Window e adicione:

Window

  • 2 buttons
  • 1 Fill-in
  • 1 Editor
  • 1 Text

Deixe-o com a seguinte aparência:

Nas Definitions utilize o seguinte código:

 SQL |  Copiar código |? 
01
/*------------------------------------------------------------------------
02
 File: ConvertIntToRoman
03
 Description: Consumir uma WebService que converte numeros inteiros para
04
numeros romanos
05
 Input Parameters:      
06
 Output Parameters:      
07
 Author: Projetos e TI
08
 Created: http://projetoseti.com.br
09
------------------------------------------------------------------------*/
10
/*          This .W file was created with the Progress AppBuilder.      */
11
/*----------------------------------------------------------------------*/
12
 
13
/* Create an unnamed pool to store all the widgets created
14
by this procedure. This is a good default which assures
15
that this procedure's triggers and internal procedures
16
will execute in this procedure's storage, and that proper
17
cleanup will occur on deletion of the procedure. */
18
 
19
CREATE WIDGET-POOL.
20
 
21
/* ***************************  Definitions  ************************** */
22
/* Parameters Definitions ---                                           */
23
 
24
DEFINE VARIABLE hWebService AS HANDLE NO-UNDO.
25
DEFINE VARIABLE hIRoman AS HANDLE NO-UNDO.
26
 
27
/* Local Variable Definitions ---                                       */

Estes “DEFINES” serão utilizados pelo programa para conexão com a webservice, vamos agora implementar a Trigger do botão btn-calcula:

 SQL |  Copiar código |? 
01
/*-----------------------------------------------------------------------------------
02
Purpose: Calcular e converter os numeros digitados na fill-in-1, executar a
03
procedure dentro da WebService e retornal um valor do tipo Char para o objeto EDITOR-1.
04
 
05
Notes:   Projetos e TI http://projetoseti.com.br
06
 
07
 -----------------------------------------------------------------------------------*/
08
 
09
DO:
10
 
11
DEFINE VARIABLE INT AS INTEGER NO-UNDO. /* Int é uma variável de entrada própria da Webservice */
12
DEFINE VARIABLE return1 AS CHARACTER NO-UNDO. /* return1 é uma variável de saída própria da Webservice */
13
 
14
/* Essa condição de laço é assumida assim que algum número é digitado na fill-in */
15
 
16
IF FILL-IN-1:SCREEN-VALUE <> "0" OR FILL-IN-1:SCREEN-VALUE <> "" THEN
17
 
18
 DO:
19
 ASSIGN INT = INT(FILL-IN-1:SCREEN-VALUE).        /* A fill-in recebe os dados digitados */
20
 
21
 RUN IntToRoman IN hIRoman(INPUT INT, OUTPUT return1).    /* A procedure interna da webservice é chamada */
22
 
23
 ASSIGN EDITOR-1:SCREEN-VALUE = return1.        /* O EDITOR-1 recebe a resposta da webservice */
24
 END.
25
END.

 

Uma instrução else não será implementada uma vez que nosso interesse é receber um resultado desde que se tenha digitado algum número.

Implementaremos agora a procedure de conexão com a webservice, nomeie-a para pi-conecta, e o código deve ficar assim:


 SQL |  Copiar código |? 
01
/*-----------------------------------------------------------------------------------
02
Purpose: Consumir uma WebService que converte numeros inteiros para numeros romanos
03
Parameters:  
04
Notes:   Projetos e TI http://projetoseti.com.br
05
-----------------------------------------------------------------------------------*/
06
 
07
CREATE SERVER hWebService. /* variavel definida no nosso bloco "Definitions"  */
08
hWebService:CONNECT("-WSDL 'http://www.ebob42.com/cgi-bin/Romulan.exe/wsdl/IRoman'"). /* A conexão com o webservice */
09
 
10
RUN IRoman SET hIRoman ON hWebService. /* a handle de conexão */
11
 
12
MESSAGE "Webservice conectado"
13
 VIEW-AS ALERT-BOX INFO BUTTONS OK.  /* A mensagem de conexão, se ela aparecer você já está conectado! */
14
 
15
END PROCEDURE.

Agora depois de tudo isso como rodar o programa? É simples, vá na trigger do botão btn-conecta e coloque a informação:

 SQL |  Copiar código |? 
1
DO:
2
 
3
RUN pi-conecta.
4
 
5
END.

E rode seu programa, após se conectar a primeira tela que aparecerá será a da mensagem de conexão na procedure pi-conecta como exibida a baixo:

Em seguida realize um teste com até 10 dígitos como exibido à seguir, se tudo der certo seu conversor já estará pronto:

Deixo aqui os arquivos compactados com tudo que foi utilizado, abraços e até a próxima!

Arquivo – ConvertIntToRoman (6)

Sobre Coimbra

Rodrigo Coimbra já escreveu 137 artigos no portal.

Administrador e fundador do site Projetos e TI. Técnico em manutenção desde 2000, graduado em Sistemas Informatizados Internet e Redes em 2005. Entusiasta de Sistemas Operacionais, principalmente OS/2 Warp, mantendo e colaborando no site OS/2 Warp Diário de bordo, Trabalha como Analista Desenvolvedor no ramo de B2B e e-Procurement, é estudioso de Wordpress e é pós graduado em Gerenciamento de Projetos. Sigam-me os Geeks @coimbrarodrigo. E veja nossos RSS no @projetoseti.

-->

Interaja

Qual a soma entre:
3 + 1