1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Duvida RESTful: Desenvolver WebAPI em Progress

Discussão em 'Progress 4GL' iniciado por rafael.andrade, Junho 18, 2018.

  1. ueluis

    ueluis Membro Participativo

    acredito que dê para criar um tuto sim, só preciso saber de qual parte seria interessante exemplo: a partir de um wsdl progress eu ler com php?
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Eu acho que seria legal completo pois pode ser que haja pessoas com dúvidas em partes diferentes
  3. ueluis

    ueluis Membro Participativo

    Pessoal boa tarde,

    partindo do pré suposto que será necessário uma licença full na maquina para o proxygen.

    configurei o webservice utilizando este pdf.

    http://download.psdn.com/media/architect_video/RIA/WebServices_Notes.pdf

    Com ele voce conseguira configurar um webservice na maquina integrado com toncat.
    Nas ultimas paginas tem um exemplo de publicação de um serviço wsdl porém o teste é realizado em um Editor Progress.

    Utilizei este site para treinar a programação e entender a lógica, tem uma lista de webservice publicado para vc brincar.

    Progress Web Services Adapter

    http://wstraining.progress.com/wsa/wsa1/wsdl?

    Abaixo um exemplo em progress de conexão com o serviço:
    http://wstraining.progress.com/wsa/wsa1/wsdl?targetURI=urn:OpenEdgeServices:NewCoService

    utilizando a procedure ValidateCustomer que recebe um numero iCustNum e retorna o custname do serviço.
    obs: exemplo bruto sem qualquer tratativa pois o objetivo é entender o funcionamento

    Código:
    DEF VAR hServer AS HANDLE NO-UNDO.
    DEF VAR hPortType AS HANDLE NO-UNDO.
    DEF VAR lreturn AS LOGICAL NO-UNDO.
    DEF VAR iCustNum AS INTEGER.
    DEF VAR CCustName AS CHAR.
    
    CREATE SERVER hServer.
      lReturn = hServer:CONNECT("-WSDL http://wstraining.progress.com/wsa/wsa1/wsdl?targetURI=urn:OpenEdgeServices:NewCoService -Port NewCoServiceObj").
    
      IF lReturn = NO THEN DO:
      MESSAGE
      "Could not connect to WebService server"
      VIEW-AS ALERT-BOX INFO BUTTONS OK.
      APPLY "CLOSE":U TO THIS-PROCEDURE.
      RETURN.
      END.
      RUN NewCoServiceObj SET hPortType ON SERVER hServer.
    
    ASSIGN
      iCustNum = 5. /*insira qualquer numero para ver a mudança*/
    
      RUN ValidateCustomer IN hPortType (INPUT iCustNum, OUTPUT cCustName)
      NO-ERROR.
    
      DISP ccustName FORMAT "x(36)".
      
    Agora temos o mesmo acesso Através da biblioteca Nusoap
    Que pode ser obtida através do link:
    https://sourceforge.net/projects/nusoap/files/latest/download

    obs: no php não precisei informar a porta de serviço wsdl "NewCoServiceObj"

    Código:
    <?php
      // include classes NuSOAP
    require_once("lib/nusoap.php");
    //parametros de conexão
    $opts = array(
      'http' => array( 'user_agent' => 'PHPSoapClient' )
      );
    
    $context = stream_context_create($opts);
    $soapContext = array(
      'stream_context' => $context,
      'cache_wsdl' => WSDL_CACHE_NONE
      );
    //instanciando objeto
    $soapClient = new SoapClient('http://wstraining.progress.com/wsa/wsa1/wsdl?targetURI=urn:OpenEdgeServices:NewCoService', $soapContext);
    
    if($soapClient){
      echo "SoapClient Conectado <p>";
      $iCustNum = 5;
      $parameters = array('iCustNum' => $iCustNum);
      $resultado = $soapClient->ValidateCustomer($parameters); 
      echo '<table border="1" bordercolor="#008000"> <tr><td>iCustNum</td><td>CustName</td></tr>';
      echo '<tr><td>'.$iCustNum.'</td><td>';
      print_r($resultado);
      echo '</td></tr></table>';  
    }else{
    echo "SoapClient Não Conectado";
    }
    ?>
    
    espero que ajude!
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Maravilha...vlw

    E como o webspeed fica conectado nos bancos de dados?
  5. ueluis

    ueluis Membro Participativo

    no appservice tem a opção srvrStartupParam: que vc coloca os parametros para subir os bancos (-pf,-param (usuario e senha dos bancos), -p que chama os alias dos bancos.
    de um modo geral temos o appservice subindo os bancos e gerenciando as solicitações vindo do wsa integrado ao tomcat.
  6. fdantas

    fdantas Administrator Moderador

    Onde este tópico chegou

    A pergunta original, de 2018, era se dá para montar um serviço REST em Progress usando só arquivo procedural, sem classes.

    O tópico acabou seguindo por outro caminho, que é o que interessa a quem chega aqui: o ueluis conseguiu publicar uma rotina Progress como serviço e consumir do PHP, usando WSA integrado ao Tomcat. O detalhe mais útil ficou na última mensagem, de 13/09/2018, e é o tipo de coisa que não está em tutorial nenhum:

    • No AppServer, a opção srvrStartupParam é onde entram os parâmetros de conexão dos bancos — -pf, -param com usuário e senha, e -p chamando os alias.
    • O arranjo que funcionou: o AppServer sobe os bancos e atende as solicitações que chegam do WSA integrado ao Tomcat.

    Um tutorial ficou prometido e nunca veio

    Em setembro de 2018 combinamos aqui um passo a passo completo da configuração. O tópico parou antes disso.

    Fica o convite aberto: se alguém montou WSA + Tomcat depois disso e tem as anotações, o registro seria muito útil. Este tópico continua recebendo visita todo mês, e a parte de configuração é justamente onde todo mundo trava.

Compartilhe esta Página