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. Person - Criando campos, tabelas e consultas personalizadas
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.