Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

Objetivo

O objetivo deste documento é auxiliar o usuário a criar um “script” para consumo de API Rest, que fornece dados de cotação de moeda, gravando-os em uma tabela personalizada, chamada “U_COTACAOMOEDAS”.

Criando a tabela personalizada “U_COTACAOMOEDAS”

Será necessário utilizar o Person para criar a tabela “U_COTACAOMOEDAS”. Caso exista alguma dúvida sobre o funcionamento do Person, a documentação a seguir deverá ser consultada. /wiki/spaces/TD/pages/1991213070  

Estrutura da tabela

Abaixo é descrita a estrutura da tabela personalizada, a qual receberá os dados da cotação

Nome da tabela: U_COTACAOMOEDAS

Descrição: Tabela para cotação cotação de moedas

 

Coluna

MOEDABASE

Descrição completa/reduzida

Moeda Base

Dica para usuário

Moeda a ser convertida

Tipo da coluna

Texto

Tamanho máximo

10 caracteres 

Coluna

MOEDADESEJADA

Descrição completa/reduzida

Moeda desejada

Dica para usuário

Moeda desejada para o cálculo da moeda base

Tipo da coluna

Texto

Tamanho máximo

10 caracteres 

Coluna

NOMECONVERSAO

Descrição completa/reduzida

Descrição

Dica para usuário

Descrição da conversão

Tipo da coluna

Texto

Tamanho máximo

50 caracteres 

Coluna

VALORMAXIMO

Descrição completa/reduzida

Valor máximo

Dica para usuário

Valor máximo da moeda na data

Tipo da coluna

Número

Quantidade casas inteiras / decimal

4 / 4

 

 

Coluna

VALORMINIMO

Descrição completa/reduzida

Valor mínimo

Dica para usuário

Valor mínimo da moeda na data

Tipo da coluna

Número

Quantidade casas inteiras / decimal

4 / 4

 

 

Coluna

PCTVARIACAO

Descrição completa/reduzida

Porcentagem de Variação / Variação

Dica para usuário

Porcentagem de Variação

Tipo da coluna

Número

Quantidade casas inteiras / decimal

3 / 4

 

 

Coluna

PRECOCOMPRA

Descrição completa/reduzida

Preço de compra

Dica para usuário

Preço pago na compra da moeda

Tipo da coluna

Número

Quantidade casas inteiras / decimal

4 / 4

 

 

Coluna

PRECOVENDA

Descrição completa/reduzida

Preço de venda

Dica para usuário

Preço de venda da moeda

Tipo da coluna

Número

Quantidade casas inteiras / decimal

4 / 4

 

 

Coluna

VARIACAO

Descrição completa/reduzida

Variação

Dica para usuário

Valor da variação de preços

Tipo da coluna

Número

Quantidade casas inteiras / decimal

4 / 4

 

 

Coluna

DATACOTACAO

Descrição completa/reduzida

Data da cotação

Dica para usuário

Data na qual a cotação foi feita

Tipo da coluna

Data e hora

Após criação da tabela, a mesma deverá ficar parecida com a figura abaixo:

Criando o “script” no aplicativo gerente Viasoft3C

Para iniciar o editor do VsScripter, no evento “Ao Iniciar Inclusão”, clicar no menu “Eventos via Script” e, em seguida, no submenu “Ao Iniciar Inclusão”, conforme imagem abaixo:

Inicialmente, a tela de edição do VsScripter será mostrada apenas com a “unit” uPrinc, conforme abaixo: 

Entendendo o código do “script”

Código da “unit” uPrinc (copiar/digitar na unit uPrinc mostrada acima):

uses
   // dá acesso ao conteúdo "unit" uPesquisaCotacao
   uPesquisaCotacao;

var
  // reserva espaço na memória para um objeto com o nome form que
  // herdará todas as características do formulário TfrmPesquisaCotacao
  form : TfrmPesquisaCotacao;

begin
  // início do ciclo de vida do "script"
  try

    // cria, efetivamente, um objeto com o nome form que herdará todas as
    // características do formulário TfrmPesquisaCotacao
    form := TfrmPesquisaCotacao.Create(nil);

    // monitora o status do objeto "form". Assim, quando as operações
    // finalizarem e o ModalResult do formulário for mrOk, o ciclo de vida
    // do "script" será finalizado. Qualquer ação que seja pretendida após o
    // final do "script", como mensagens ao operador, devem ser colocadas
    // entre o begin e o end logo abaixo
    if form.ShowModal = mrOk then
    begin
    end;

  // final do ciclo de vida do "script"
  finally

    // libera o objeto "form" da memória, destruindo todos os dados e objetos
    // criados nele.
    form.Free;
  end;
end;

Ao final, a “unit” uPrinc deve ficar parecida ao mostrado na figura abaixo: 

Criando o formulário “frmPesquisaCotacao”

Para criar um novo formulário, acessar o menu “File” e em seguida o submenu “New Form”, ou clicando no botão “New form”, que é representado por um formulário em branco com uma estrela amarela na parte superior esquerda. 

O novo formulário precisará de três componentes, listados abaixo: 

Componente

Novo nome

Caption / Text

TButton

btnProcessar

&Pesquisar

TLabel

lblEscolherCotacao

Escolher cotação

TComboBox

cboEscolherCotacao

Escolher cotação

Os componentes visuais ficam na barra a direita, chamada “Tool Palette”. Selecionar um componente por vez, clicando, segurando o botão do mouse e arrastando o componente para o formulário. Assim, repetir para todos os componentes.

As propriedades “Name”, “Caption” e “Text” são propriedades que podem ser alteradas na barra a esquerda, chamada “Object Inspector. Essas alterações devem ser feitas uma por uma, em cada componente. Ou seja, selecionar um componente e alterar suas propriedades “Name”, “Caption” e “Text”, um componente por vez.

 A propriedade “Caption” pertence aos componentes “TButton” e “TLabel”. No caso do componente “TComboBox”, a propriedade “Text” é que deve ser mudada.

 Além disso, os itens do “TComboBox”, na propriedade “Items” são: USD-BRL, EUR-BRL, USD-BRLT e BTC-BRL;

 O “layout” do formulário deve ficar parecido com o abaixo, embora o usuário seja livre para fazer da sua maneira:

Para salvar os trabalhos feitos até agora, pressionar o ícone que presenta dois “disquetes” pretos ou a combinação “CTRL+SHIFT+S”.

O novo formulário “frmPesquisaCotacao” é a parte gráfica do projeto do “script”. Quando for solicitado um nome de sua “unit”, que é a parte dos códigos do “script” em si, salvar com o nome “uPesquisaCotacao”.

Com a tecla “F12” é possível mudar entre os modos de “Design” (“layout” gráfico e colocação de componentes) e “Code” que é parte e programação.

Pressionar “F12” para mudar para o modo de programação do “script”. O código abaixo deve ser copiado/digitado na área de programação:

Código da “unit” uPesquisaCotacao:  

{$FORM TfrmPesquisaCotacao, uPesquisaCotacao.sfm}

uses
  uVsHttpRequest, IdSSLOpenSSL, uLkJson, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, VsMask, System;

var
  http: TVsHttp;
  SSL1 : TIdSSLIOHandlerSocketOpenSSL
  cUrl : String;
  obj : TlkJSONobject;

Function buscarMoedas(moedas: String):String;
begin
  http := TVsHttp.Create;
  cUrl := Format('https://economia.awesomeapi.com.br/%s', [moedas]);

  //somente necessário para https          
  SSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IdSSLOpenSSL.UnLoadOpenSSLLibrary();

  try
    //essas opções vai de cada servidor    
    SSL1.SSLOptions.Method := sslvTLSv1_2;   
    SSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];//, sslvTLSv1, sslvSSLv23, sslvTLSv1_1, sslvTLSv1_2];

    //associando o SSL ao componente de conexão
    http.SetIOHandler(SSL1);
    
    //primeira consulta get simples
    Result := http.get(cUrl);
    
    // Se precisar analisar o retorno, remover comentário do comando abaixo
    //showMessage(Result);

  finally
    SSL1.free;                                      
    http.free;
  end;           
end;

function trocaPonto(valor: String):String
var
  x: Integer;
  nStr: String;
begin
  nStr := '';
  for x:=1 to length(valor) do
    begin
      if copy(valor, x, 1) <> '.' then
        nStr := nStr + copy(valor, x, 1)
      else
        nStr := nStr + ',';
      end;
  Result := nStr;
end;

procedure btnPesquisarClick(Sender: TObject);
var                                                 
  obj   : TlkJSONobject;
  json  : WideString;
  jsonL : TlkJSONlist;
  jsonO : TlkJSONobject;
  i     : Integer;

begin
  try
    // recebe o json relativo à conversão das moedas.
    json := UTF8Encode((buscarMoedas(cboEscolherCotacao.Items[cboEscolherCotacao.ItemIndex])));

    // se json não estiver vazio e não conter '#erro' em seu conteúdo.
    if ((Length(json) > 0) and (Pos('#erro', lowercase(json)) = 0)) then
    begin
      // transforma o conteúdo de json em uma lista JSON
      jsonL := TlkJSON.ParseText(Json) as TlkJSONlist;

      // verifica se a lista foi criada com sucesso
      if assigned(jsonL) then
      begin

        // cria um 'loop' para processar todos os itens da lista Json
        for i:=0 to jsonL.count-1 do
        begin

          // cria um objeto json, equivalente a um registro
          jsonO := jsonL.child[i] as TlkJSONobject;

          // com a função ValorParaTela, os valores dos campos do formulário
          // são atribuídos de acordo com os valores dos campos no objeto json
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('MOEDABASE', jsonO.Field['code'].value);
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('MOEDADESEJADA', jsonO.Field['codein'].value);
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('NOMECONVERSAO', jsonO.Field['name'].value);
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('VALORMAXIMO', trocaPonto(jsonO.Field['high'].value));
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('VALORMINIMO', trocaPonto(jsonO.Field['low'].value));
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('PCTVARIACAO', trocaPonto(jsonO.Field['pctChange'].value));
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('PRECOCOMPRA', trocaPonto(jsonO.Field['bid'].value));
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('PRECOVENDA', trocaPonto(jsonO.Field['ask'].value));
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('VARIACAO', trocaPonto(jsonO.Field['varBid'].value));
          FFormPadraoU_COTACAOMOEDAS.ValorParaTela('DATACOTACAO', jsonO.Field['create_date'].value);
        end;                                                                                          
      end else
             // se a lista JSON não for criada
             ShowMessage('Não carregou a conversão de moedas.');
    end else
        // se existir alguma mensagem de erro, ela é mostrada ao usuário
        if Pos('#erro', lowercase(json)) > 0 then
            ShowMessage(Format('Erro retornado: %s', [UTF8Encode(json)]));
  finally
    // finaliza os objetos criados e retorna a constante mrOk para indicar que o
    // processo finalizou.        
    jsonL.Free;         
    ModalResult := mrOk;
  end;                               
end;

Salvar novamente o projeto do “VsScripter” e fechar seu editor.

Testando o “script” de cotação de moedas

Para testar o “script”, é necessário clicar no ícone de inclusão de registro, representado pelo desenho de uma folha de papel com um sinal de mais verde. Logo em seguida, será mostrado o formulário “Pesquisa Cotação”, conforme figura abaixo: 

Escolher uma das cotações disponíveis, por meio do campo “Escolher Cotação” e pressionar o botão “Pesquisar”. Em alguns segundos, o formulário “Pesquisa Cotação” será fechado e o formulário de cadastro de cotação de moedas será mostrado, preenchido, conforme figura abaixo:

Após finalizar a consulta, tendo os campos preenchidos, clicar no botão Salvar, ou executar o atalho “CTRL+S” para adicionar o registro da tabela personalizada.

Para facilitar ainda mais o entendimento, foi produzido um vídeo sobre este conteúdo. Para acessá-lo, utilize o link abaixo:

https://vimeo.com/636459785/a31f1911b1

  • No labels