
Neste artigo vamos fazer a integração de uma aplicação APEX com a API ViaCEP, da Empresa de Correios e Telégrafos do Brasil, para que, quando digitarmos o CEP do endereço no campo de uma tela de cadastro, essa integração buscará os dados na base de dados dos Correios e irá preencher os dados do endereço no cadastro da aplicação APEX.
Inicialmente, vamos considerar uma situação que temos uma página P99 - Cadastro de Cliente, e na seção endereço existem os seguintes campos:
- P99_CEP
- P99_UF
- P99_LOCALIDADE
Vamos construir uma Ação Dinâmica que seja executada quando o campo CEP for alterado.
No ambiente desenvolvimento, acessamos o item P99_CEP e criamos uma Ação Dinâmica com as seguintes propriedades:
Quando
- Nome: preenche_dados
- Evento: Change (será executado toda vez que o valor no campo for alterado)
Ação True
- Execute JavaScript Code
- Itens a Submeter: P99_LOCALIDADE;P99_UF
O código PL/SQL é o mostrado abaixo:
Passamos agora a detalhar o que o código acima faz.
Inicialmente são declaradas as variáveis v_jason_api, do tipo clob, e v_cep, do tipo varchar2.
A execução começa com a função apex_web_service.g_request_headers.delete(), que limpa os cabeçalhos HTTP da sessão.
Em seguida, a variável v_cep recebe o valor informado no campo P99_CEP.
Então é executada uma função v_json_api do tipo request utilizando a url https://viacep.com.br/ws/ concatenada com a variável v_cep, que foi previamente preenchida com o valor informado no campo P99_CEP, sendo utilizado o método GET. É essa função que acessa a API ViaCEP dos Correios.
Prosseguindo, é feito um select na base de dados jason_table, buscando os campos UF e Localidade, e posteriormente gravando os mesmos nas variáveis cur.uf e cur.localidade, respectivamente.
Em seguida é iniciado um LOOP para preencher os campos/itens P99_UF e P99_LOCALIDADE com os valores coletados nas variáveis cur.uf e cur.localidade.
Observação: no caso de buscas onde é retornado apenas um único registro, como é o caso do CEP, não seria necessário o LOOP, no entanto foi colocado o mesmo apenas para efeito de exemplificação, pois nos casos em que a busca retorna mais de um registro, o LOOP é imprescindível para alimentar os registros da tabela de destino.
Por fim, é implementada uma exception que mostra uma mensagem de erro caso haja algum problema na execução da requisição.
E assim, ao digitar um numero de cep no campo P99_CEP, a ação dinâmica acima descrita busca o cep na API ViaCEP e preenche os campos P99_UF e P99_LOCALIDADE com os seus respectivos valores.
É claro que podemos alterar a código de forma a incluir mais campos na pesquisa, como Logradouro e Bairro.
Nenhum comentário:
Postar um comentário