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:
- 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)
-->












