Exemplo de Gravação de Registro de Pessoa Com PHSYS API

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

Imagem do modelo de 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;