Exemplo de Leitura de Registro de Pessoa Com PHSYS API

Introdução

Com a PHSYS API é possível acessar diversas funcionalidades do PHERP, incluindo a consulta de registros na base de dados por meio do modelo de execução de scripts internos.

Neste exemplo, será demonstrado como consultar informações cadastrais de pessoas (clientes) utilizando o procedimento interno C_PHGetPessoasByIDs, executado através do modelo TPHSProcScript.

Esse modelo permite que sistemas externos executem scripts específicos do ERP, informando parâmetros via body da requisição e recebendo o retorno estruturado em formato JSON.

Modelo de Integração PHSys

Este modelo de integração utiliza a classe TPHSProcScript para executar procedimentos internos do ERP.

O procedimento C_PHGetPessoasByIDs realiza a consulta das informações cadastrais de pessoas com base nos IDs informados no body da requisição.

No processamento interno:

  • O sistema lê o parâmetro IDs enviado no body.
  • Executa a consulta no cadastro de pessoas.
  • Estrutura o retorno em formato JSON.
  • Retorna as informações encontradas e a quantidade de registros.

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 o conteúdo em 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 a ser executado
  • PHSScriptNome: Nome do script cadastrado no ERP
  • IDs: Lista de IDs das pessoas a serem consultadas, separados por vírgula

Exemplo:

{
  "Classe": "TPHSProcScript",
  "Metodo": "Executar",
  "Parametros": {
    "PHSProcedimento": "C_PHGetPessoasByIDs",
    "PHSScriptNome": "C_PHGetPessoasByIDs",
    "IDs": "1,2,3"
  }
}

Validações Realizadas

Antes de executar o procedimento interno, o sistema valida:

  • Se o parâmetro IDs foi informado
  • Se o parâmetro IDs não está nulo
  • Se os IDs informados são válidos

Caso o parâmetro IDs não seja informado, nenhuma consulta é realizada.

Resposta da Requisição

O retorno da requisição é definido pelo parâmetro:

ParamByName('Result').AsString := TextJSON;

Na resposta da API, será retornado exclusivamente o conteúdo atribuído ao parâmetro Result.

Exemplo de Resposta

{
  "Pessoas": [
    {
      "ID": "1",
      "Nome": "João da Silva",
      "Telefone": "(11) 99999-9999",
      "Estado": "São Paulo",
      "Municipio": "São Paulo"
    }
  ],
  "Quantidade": "1"
}

Exemplo de Script

procedure C_PHGetPessoasByIDs;
var 
  Q: TPHQuery;
  TextJSON: String;                                                                 
begin    
  if not (ParamByName('IDs').IsNull) then                 
  begin    
    Q := NewPHQuery;
    try
      Q.Add('SELECT A.ID, '+                  
            '       A.NOME, '+
            '       A.TELEFONE, '+
            '       B.NOME AS ESTADO, '+
            '       C.NOME AS MUNICIPIO '+                                        
            'FROM PESSOAS A '+
            'LEFT JOIN ESTADOS    B ON B.ID = A.ESTADO '+
            'LEFT JOIN MUNICIPIOS C ON C.ID = A.MUNICIPIO '+                                                                                                                                          
            'WHERE A.ID IN (' + ParamByName('IDs').AsString + ')');
                     
      Q.Open;
 
      while not Q.Eof do    
      begin
        if (TextJSON <> '') then
          TextJSON := TextJSON + ', ';
 
        TextJSON := TextJSON + '{ ' +     
             '"ID" : "' + Q.FieldByName('ID').AsString + '",' +                                                                                                                                  
             '"Nome" : "' + Q.FieldByName('NOME').AsString + '",' +                        
             '"Telefone" : "' + Q.FieldByName('TELEFONE').AsString + '",' +
             '"Estado" : "' + Q.FieldByName('ESTADO').AsString + '",' +
             '"Municipio" : "' + Q.FieldByName('MUNICIPIO').AsString + '"' +          
             '}';                                                                    
        Q.Next;                                                         
      end;
  
      TextJSON := '{ "Pessoas": [' + TextJSON + '], ' +
                  '"Quantidade": "' + IntToStr(Q.RecordCount) + '" }';                                                                                    
                                                                         
      ParamByName('Result').AsString := TextJSON;                     
                                               
    finally
      Q.Free;     
    end;
  end;        
end;