1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Urgente Acessar web service to tipo REST

Discussão em 'Progress 4GL' iniciado por antonioc, Dezembro 3, 2019.

  1. antonioc

    antonioc Membro Participativo

    Boa noite.

    Pessoal, preciso acessar um webservice com um endereco parecido com o que este http abaixo. Sinceramente preciso de algumas dicas, em todo meu tempo de progress nunca precisei fazer uma rotina parecida.

    Alguém pode me dar uma ajuda?

    http://tstportal.zyzny.com.br/portal/viagens.json

    Precisa informar o cnpj e o token. Também devo informar algumas variaveis conforme abaixo.

    {
    "autenticacao": {
    "token": "?"
    },
    "cnpj_cliente": "?", "cnpj_embarcador": "0", "cnpj_transportador": "?", "cnpj_gerenciadora_de_risco": "?", "pedido_cliente": "?", "numero_liberacao": ?, "tipo_de_transporte": 1,
    “rota_codigo_externo”: “”, "observacao": "", "monitorar_retorno": 0,
    "data_previsao_inicio": "00/00/0000 00:00:00",
    "data_previsao_fim": "00/00/0000 00:00:00", "motorista": {
    "nome": "",
    "cpf": ""
    },
    "veiculos": {
    "placa": [""]
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Você já tem algum código ou você está pedindo tudo?
  3. antonioc

    antonioc Membro Participativo

    Bom dia.
    Se tiver um exemplo onde eu digo o portal passando um cnpj e um token, mandando a informação de um campo qualquer(numero de pedido), para mim já estaria de bom tamanho.
    Se um dia nos encontrarmos ai pelas veredas do progress te pago uma coca-cola e fico muito agradecido ehehe.

    É que nunca precisei fazer isto, procurei bastante na internet mas não consegui fazer funcionar nada.

    Obrigado pela ajuda.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Segue um código de exemplo.

    Neste código existem muitos conceitos, então, se tiver dúvida, posta ai.

    Pra rodar, precisa ter os seguinte arquivos no propath, preferencialmente nesta ordem:
    D:\Totvs\OE116\
    gui\netlib\OpenEdge.Net.pl
    D:\Totvs\OE116\tty\netlib\OpenEdge.Net.pl

    Código:
    USING OpenEdge.Net.HTTP.IHttpRequest.
    USING OpenEdge.Net.HTTP.IHttpResponse.
    USING OpenEdge.Net.HTTP.ClientBuilder.
    USING OpenEdge.Net.HTTP.RequestBuilder. 
    USING Progress.Json.ObjectModel.JsonObject.
    USING Progress.Json.ObjectModel.JsonArray.
    USING Progress.Json.ObjectModel.ObjectModelParser.
    USING Progress.Lang.Object.
    USING OpenEdge.Core.WidgetHandle.
    USING OpenEdge.Core.String.
    USING OpenEdge.Net.HTTP.IHttpRequest.
    
    DEFINE VARIABLE oRequest   AS IHttpRequest NO-UNDO.
    DEFINE VARIABLE oResponse  AS IHttpResponse NO-UNDO.
    DEFINE VARIABLE oJson      AS JsonObject NO-UNDO.
    DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
    DEFINE VARIABLE oEntity    AS Object NO-UNDO.
    
    DEF VAR Usuario AS CHAR INIT "usuario".
    DEF VAR Senha   AS CHAR INIT "senha".
    
    DEF TEMP-TABLE ttResposta
             FIELD OK AS LOGICAL
             FIELD mensagem AS CHAR.
    
    DEF TEMP-TABLE ttLogin SERIALIZE-NAME "login"
             FIELD idioma AS CHAR INIT "pt"
             FIELD usuario AS CHAR
             FIELD senha   AS CHAR.
    
    CREATE ttLogin.
    ASSIGN ttLogin.usuario = Usuario
           ttLogin.senha   = Senha.
    
    /* TIPO 1 DE ENTRADA: CONVERSÃO DE TEMP-TABLE */
    oJsonArray = new JsonArray().
    oJsonArray:READ(TEMP-TABLE ttLogin:HANDLE).
    oRequest = RequestBuilder:Post('http://www.meusite.com.br/padrao/login.html',oJsonArray):AcceptJson():Request. 
    
    /* TIPO 2 DE ENTRADA: CRIAÇÃO DO JSON, CAMPO A CAMPO */
    /*oJson = new JsonObject().
    oJson:Add("usuario", Usuario). 
    oJson:Add("senha", Senha). 
    oRequest = RequestBuilder:Post('http://www.meusite.com.br/padrao/login.html',oJson):AcceptJson():Request. */
    
    oResponse = ClientBuilder:Build():Client:Execute(oRequest).
    oEntity = oResponse:Entity.
    
    MESSAGE oResponse:StatusCode SKIP   
            oResponse:StatusReason SKIP
            VIEW-AS ALERT-BOX.
    
    IF oResponse:StatusReason = "OK" THEN DO:
       IF TYPE-OF(oEntity, JsonObject) THEN oJson = CAST(oEntity, JsonObject).
       ELSE DO:
          /*MESSAGE "Formato recebido não foi configurado!" SKIP
                  "Formato esperado: JsonObject"
                  VIEW-AS ALERT-BOX INFO BUTTONS OK.*/
          MESSAGE "Formato esperado: JsonObject" SKIP(1)
                  "INFORMAÇÃO RECEBIDA: " SKIP
                  STRING(oEntity)
                  VIEW-AS ALERT-BOX INFO BUTTONS OK.
          RETURN.
       END.
       
       DEFINE VARIABLE objDataset  AS JsonObject NO-UNDO.
       DEFINE VARIABLE objResposta AS JsonArray  NO-UNDO.
       DEFINE VARIABLE objMensagem AS JsonArray  NO-UNDO.
       DEFINE VARIABLE objErros    AS JsonArray  NO-UNDO.
       DEFINE VARIABLE objSaida    AS JsonArray  NO-UNDO.
       
       /* EXEMPLO DO JSON DE SAÍDA:
           {"dataset": {
              "resposta": [
                       {
                           "ok": true,
                           "mensagem": "Logado com Sucesso!"
                       }
                   ]
               }
           }
       */
    
    DEF VAR myLongchar AS LONGCHAR.
    
       oJSON:Write(myLongchar, TRUE).
       MESSAGE STRING(myLongchar)
           VIEW-AS ALERT-BOX INFO BUTTONS OK.
       
    /* Tratativa do que foi recebido*/
       IF oJSON:has("dataset")       THEN objDataset  = oJSON:GetJsonObject("dataset").
       IF objDataset:has("resposta") THEN objResposta = objDataset:GetJsonArray("resposta").
       IF objDataset:has("msg")      THEN objMensagem = objDataset:GetJsonArray("msg").
       IF objDataset:has("erros")    THEN objErros    = objDataset:GetJsonArray("erros").
       IF objDataset:has("saida")    THEN objSaida    = objDataset:GetJsonArray("saida").
       
       IF objResposta <> ? THEN DO: /* Se existia 'resposta' dentro do dataset */
          TEMP-TABLE ttResposta:READ-JSON("JsonArray",objResposta,"EMPTY"). /* Realiza a leitura do JsonArray pra dentro da temp-table */
          FOR EACH ttResposta NO-LOCK.
              MESSAGE "ok: " + STRING(ttResposta.OK,"Sim/Não") SKIP
                      "mensagem: " + ttResposta.mensagem
                      VIEW-AS ALERT-BOX INFO BUTTONS OK.
          END.
       END.
       
       /*CAST(oEntity, JsonObject):WriteFile('c:\temp\entity.json', true).*/
    END.
    
    
  5. antonioc

    antonioc Membro Participativo

    Boa noite.
    Rafael, eu mandei uma mensagem sobre este tema. Tenho dúvidas.

    Obrigado
  6. af.dums

    af.dums Membro Ativo

    @antonioc , conseguiu resolver? Acho que posso te ajudar, só não consigo disponibilizar um código aqui porque o uso dele é privado por contrato, me chama no skype que te dou uma mão (af.dums)

Compartilhe esta Página