Webservice - Consulta de CNPJ via PEX
Bastante semelhante ao conteúdo Webservice - Consulta CEP via PEX, neste exemplo ao digitar o CNPJ e clicar no botão "Consulta", o processo trará todas as informações referentes à aquele CNPJ.
Formulário com evento ao sair no campo do tipo Botão.
PEX com webservice no botão de consulta.
const
cs_cnpj = '1' ;
cs_nome = '2' ;
cs_uf = '4' ;
cs_bairro = '5' ;
cs_logradouro = '6' ;
cs_numero = '7' ;
cs_cep = '8' ;
cs_cidade = '9' ;
cs_complemento = '10';
cs_telefone = '11';
var
lsCorpoRequisicao,
lscaminhoURL,
Result,
lsCNPJ,
lsSQL : String;
loRESTClient : TRESTClient;
loRESTRequest : TRESTRequest;
loRESTResponse : TRESTResponse;
loAuthBasica : THTTPBasicAuthenticator;
lojson : tjsonobject;
loCDS : Tlibcds;
begin
//limpa campos
aoFormularios.GetJSON(cs_nome).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_uf).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_bairro).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_logradouro).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_numero).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_cep).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_cidade).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_complemento).SetStr('TEXTO', '');
aoFormularios.GetJSON(cs_telefone).SetStr('TEXTO', '');
//verifica se campo CNPJ está vazio
if TSTR.EliminaAlfha(aoFormularios.GetJSON(CS_CNPJ).GetStr('TEXTO')) <> '' then
begin
//retira caracteres especiais do CNPJ
lsCNPJ := aoFormularios.GetJSON(CS_CNPJ).GetStr('TEXTO');
lsCNPJ := TSTR.StrTran(lsCNPJ, '-', '');
lsCNPJ := TSTR.StrTran(lsCNPJ, '.', '');
lsCNPJ := TSTR.StrTran(lsCNPJ, '/', '');
//verifica se é um CNPJ válido
if not TSTR.Testa_CNPJ(lsCNPJ) then
begin
aoMensagem.SetStr('MENSAGEM' , 'Erro! CNPJ: ' + aoFormularios.GetJSON(CS_CNPJ).GetStr('TEXTO') + ' inválido.');
aoMensagem.SetInt('FOCO',43);
aoMensagem.SetStr('TIPO','ERRO');
aoMensagem.SetInt('TIMEOUT',6000);
aoFormularios.GetJSON(cs_cnpj).SetStr('TEXTO', '');
Abort;
end;
end;
//verifica se CNPJ está cadastrado no banco de dados
loCDS := of_CriaCDSporSQL(Format('SELECT C.FANTASIA, F.NOME UNIDADE FROM CLIFOREMP C JOIN CLIENTE CLI ON CLI.IDCLIFOREMP = C.IDCLIFOREMP JOIN FILIAL F ON F.IDFILIAL = CLI.IDFILIALRELACAO '+
'WHERE C.TIPOCLIFOREMP = 0 AND C.CNPJ = %0:s',[TSTR.Aspa(lsCNPJ)]));
try
if loCDS.of_TemDados then
begin
aoMensagem.SetStr('MENSAGEM','CNPJ '+ aoFormularios.GetJSON(CS_CNPJ).GetStr('TEXTO') +' já cadastrado para o cliente: ' + loCDS.GetStr(['FANTASIA']) + ' na Unidade: ' + loCDS.GetStr(['UNIDADE']));
aoMensagem.SetInt('FOCO',43);
aoMensagem.SetStr('TIPO','ERRO');
aoMensagem.SetInt('TIMEOUT',6000);
aoFormularios.GetJSON(CS_CNPJ).SetStr('TEXTO', '');
Abort;
end;
finally
loCDS.FREE;
end;
//inicia integração com web service
Result := '';
loRESTClient := nil;
loRESTRequest := nil;
loRESTResponse := nil;
lscaminhoURL := 'http://www.receitaws.com.br/v1/cnpj/'+lsCNPJ;
if length(lsCNPJ) > 1 then
begin
//executa o requisição
try
loRESTClient := TRESTClient .Create(nil);
loRESTRequest := TRESTRequest .Create(nil);
loRESTResponse := TRESTResponse.Create(nil);
loRESTClient.RaiseExceptionOn500 := False;
loRESTClient.BaseURL := lscaminhoURL;
loRESTClient.ContentType := '';
loRESTRequest.Method := rmGet;
loRestRequest.Resource := '';
loRESTRequest.Client := loRESTClient;
loRESTRequest.Response := loRESTResponse;
try
loRESTRequest.Execute;
except
end;
if TSTR.of_IsNotNullEma(loRESTResponse.JSONText) then
Result := loRESTResponse.JSONText
else
Result := loRESTResponse.Content;
//aoMensagem.SetStr('MENSAGEM',lscaminhoURL);
lojson := tjson.op_StringToJSon(loRESTResponse.JSONText);
//preenche campos com as informações retornadas do web service
aoFormularios.GetJSON( cs_nome ).SetStr('TEXTO',lojson.GetStr('nome'));
aoFormularios.GetJSON( cs_uf ).SetStr('TEXTO',lojson.GetStr('uf'));
aoFormularios.GetJSON( cs_bairro ).SetStr('TEXTO',lojson.GetStr('bairro'));
aoFormularios.GetJSON( cs_logradouro ).SetStr('TEXTO',lojson.GetStr('logradouro'));
aoFormularios.GetJSON( cs_numero ).SetStr('TEXTO',lojson.GetStr('numero'));
aoFormularios.GetJSON( cs_cep ).SetStr('TEXTO',lojson.GetStr('cep'));
aoFormularios.GetJSON( cs_cidade ).SetStr('TEXTO',lojson.GetStr('municipio'));
aoFormularios.GetJSON( cs_complemento ).SetStr('TEXTO',lojson.GetStr('complemento'));
aoFormularios.GetJSON( cs_telefone ).SetStr('TEXTO',lojson.GetStr('telefone'));
{lsSQL := 'select idcidade from cidade where upper(REMOVE_CHAR_ESP(cidade.descricao)) = ' + TSTR.Aspa(lojson.GetStr('municipio')) + ' and cidade.uf = ' + TSTR.Aspa(lojson.GetStr('uf'));
//aoMensagem.SetStr('MENSAGEM',lsSQL);
loCDS := of_CriaCDSporSQL(lsSQL);
try
if loCDS.of_TemDados then
begin
aoFormularios.GetJSON( cs_uf ).SetStr('TEXTO',lojson.GetStr('uf'));
aoFormularios.GetJSON(CS_CIDADE ).SetStr('TEXTO',loCDS.GetStr(['IDCIDADE']));
end;
finally
loCDS.FREE;
end;}
finally
loAuthBasica .Free;
loRESTClient .Free;
loRESTRequest .Free;
loRESTResponse.Free;
end;
end
else
begin
aoMensagem.SetStr('MENSAGEM','Para poder efetuar a busca, você precisa informar um CNPJ válido');
aoMensagem.SetInt('FOCO',43);
aoMensagem.SetStr('TIPO','INFO');
aoMensagem.SetInt('TIMEOUT',6000);
aoFormularios.GetJSON(cs_cnpj).SetStr('TEXTO', '');
end;
end;