Exemplo de Gravação de Registro de Pessoa Com PHSYS API
Índice
Introdução
Com a PHSYS API é possível realizar o cadastro de pessoas (clientes) no PHERP de forma integrada, utilizando o modelo de execução de scripts internos.
Neste exemplo, será demonstrado como cadastrar um cliente através do procedimento interno C_PHInsertClient, executado por meio da classe TPHSProcScript. Esse procedimento realiza validações internas e, caso não exista duplicidade de CPF/CNPJ, efetua a gravação do registro na base de dados.
Modelo de Integração PHSys
Este modelo de integração utiliza a classe TPHSProcScript para executar procedimentos internos do ERP.
O procedimento C_PHInsertClient é responsável por:
- Verificar se o CPF/CNPJ informado já está cadastrado
- Criar um novo registro de cliente na tabela PESSOAS
- Preencher os dados recebidos via body da requisição
- Retornar o ID do registro gerado ou uma mensagem de erro
Modelo Integração
Como Realizar a Requisição
A chamada à API deve ser realizada utilizando o método HTTP POST, enviando os dados no formato JSON no body da requisição.
Cabeçalhos Necessários
Content-Type: application/json
Corpo da Requisição (Body)
Para execução do script específico, o body da requisição deve conter:
- Classe: TPHSProcScript
- Metodo: Executar
- PHSProcedimento: Nome do procedimento interno
- PHSScriptNome: Nome do script cadastrado no ERP
- Nome: Nome da pessoa
- Logradouro: Endereço
- Numero: Número do endereço
- Bairro: Bairro
- TipoPessoa: Tipo da pessoa (1 = Física / 2 = Jurídica)
- CNPJCPF: CPF ou CNPJ
Exemplo:
{
"Classe": "TPHSProcScript",
"Metodo": "Executar",
"Parametros": {
"PHSProcedimento": "C_PHInsertClient",
"PHSScriptNome": "C_PHInsertClient",
"Nome": "Pedro Henrique",
"Logradouro": "Pedro Zimmerman",
"Numero": 25,
"Bairro": "Itoupavazinha",
"TipoPessoa": 1,
"CNPJCPF": "598.956.949-11"
}
}
Validações Realizadas
Durante a execução do procedimento, são realizadas as seguintes validações:
- Verificação se o CPF/CNPJ informado já está cadastrado
- Controle transacional (commit e rollback)
- Tratamento de exceções em caso de erro
Caso o CPF/CNPJ já exista na base de dados, o procedimento retorna uma mensagem de erro e não realiza o cadastro.
Resposta da Requisição
O retorno da requisição é definido exclusivamente pelo parâmetro:
ParamByName('Result').AsString
Somente o conteúdo atribuído a este parâmetro será retornado ao consumidor da API.
Exemplo de Resposta – Sucesso
{
"ID_PHSYS": "53"
}
Exemplo de Resposta – Erro
{
"Erro": "CNPJ/CPF já cadastrado no ERP."
}
Exemplo de Script
procedure C_PHInsertClient;
var
Cliente: TPHServerClass;
Q: TPHQuery;
begin
IniciarTransacao;
try
Q := NewPHQuery;
try
Q.Add('SELECT ID '+
'FROM PESSOAS '+
'WHERE CNPJCPF = :CNPJCPF');
Q.ParamByName('CNPJCPF').AsString := ParamByName('CNPJCPF').AsString;
Q.Open;
if not (Q.RecordCount > 0) then
begin
ParamByName('Cadastro').AsString := 'CLIENTES';
Cliente := NewPHServerClass('CLIENTES');
try
Cliente.NovoRegistro;
{ Preenchidos através dos parâmetros presentes no Body da Requisição }
Cliente.CampoDoNome('NOME').AsString := ParamByName('Nome').AsString;
Cliente.CampoDoNome('LOGRADOURO').AsString := ParamByName('Logradouro').AsString;
Cliente.CampoDoNome('NUMERO').AsInteger := ParamByName('Numero').AsInteger;
Cliente.CampoDoNome('BAIRRO').AsString := ParamByName('Bairro').AsString;
Cliente.CampoDoNome('TIPOPESSOA').AsInteger := ParamByName('TipoPessoa').AsInteger;
Cliente.CampoDoNome('CNPJCPF').AsString := ParamByName('CNPJCPF').AsString;
{ Preenchidos de Forma Fixa }
Cliente.CampoDoNome('PAIS').AsLargeInt := 1;
Cliente.CampoDoNome('ESTADO').AsLargeInt := 24;
Cliente.CampoDoNome('TIPOLOGRADOURO').AsLargeInt := 1;
Cliente.CampoDoNome('MUNICIPIO').AsLargeInt := 3;
Cliente.Salvar;
ParamByName('Result').AsString :=
'{"ID_PHSYS" : "' + IntToStr(Cliente.CampoDoNome('ID').AsLargeInt) + '"}';
finally
Cliente.Free;
end;
end
else
begin
ParamByName('Result').AsString :=
'{"Erro" : "CNPJ/CPF já cadastrado no ERP."}';
end;
ConfirmarTransacao;
finally
Q.Free;
end;
except
CancelarTransacao;
ParamByName('Result').AsString :=
'{"Erro" : "' + MensagemErro + '"}';
end;
end;