Exemplo de Deletar Produto Com PHSYS API

Revisão de 13h01min de 15 de dezembro de 2025 por Endrio.korb (discussão | contribs) (Criou página com '==='''Introdução'''=== Em alguns cenários de integração, é necessário realizar a exclusão de produtos cadastrados no PHERP a partir de sistemas externos, aplicativos...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

Introdução

Em alguns cenários de integração, é necessário realizar a exclusão de produtos cadastrados no PHERP a partir de sistemas externos, aplicativos ou integrações via API.

Para isso, é possível criar um Script Específico e configurá-lo como endpoint na PHSYS API. O exemplo abaixo, chamado C_ExcluirProdutos, demonstra como realizar a exclusão de produtos a partir de um JSON enviado no body da requisição, retornando uma mensagem indicando se a exclusão foi realizada com sucesso ou não.

Modelo de Integração Personalizado

Este endpoint executa diretamente o procedimento interno C_ExcluirProdutos, onde o desenvolvedor implementa toda a lógica de exclusão. O body da requisição deve conter exclusivamente os dados esperados pelo procedimento, uma vez que o endpoint já sabe previamente qual método será executado.

No processamento interno:

  • O sistema lê o JSON enviado.
  • Percorre a lista de produtos informados.
  • Executa a exclusão do produto no cadastro.
  • Trata exceções durante o processo.
  • Retorna mensagens de sucesso ou erro por produto.

Parâmetros fixos podem ser definidos no cadastro do endpoint e serão enviados automaticamente ao procedimento.

Modelo Integração

Imagem do modelo de integração

Parâmetros

Imagem dos parâmetros de integração

Como Realizar a Requisição

A chamada ao endpoint C_ExcluirProdutos deve ser realizada utilizando o método HTTP POST, enviando o conteúdo em formato JSON no corpo da requisição (body).

Cabeçalhos Necessários

A requisição deve incluir o seguinte cabeçalho:

Content-Type: application/json

Estrutura da Requisição

A URL deve seguir o padrão:

http://<servidor>:<porta>/api/C_ExcluirProdutos

Exemplo típico:

http://localhost:211/api/C_ExcluirProdutos

Corpo da Requisição (Body)

O body deve conter uma lista de produtos a serem excluídos. Cada item da lista deve conter o código do produto.

Exemplo:

{
  "Protudos": [
    { "Codigo": "5" },
    { "Codigo": "30" }
  ]
}

Exemplo de Envio utilizando Curl

curl -X POST "http://localhost:211/api/C_ExcluirProdutos" ^
     -H "Content-Type: application/json" ^
     -d "{
           \"Protudos\": [
             { \"Codigo\": \"5\" },
             { \"Codigo\": \"30\" }
           ]
         }"

Validações Realizadas

Antes de executar o procedimento interno, a API valida:

  • Se o JSON está corretamente formatado
  • Se os produtos podem ser excluídos (restrições de integridade)

Caso ocorra erro durante a exclusão, a mensagem correspondente é retornada no resultado.

Resposta da Requisição

O retorno é definido pelo parâmetro:

ParamByName('Result').AsString := <JSON de retorno>;

Exemplo de Resposta

{
    "Produtos": [
        {
            "Codigo": "5",
            "Resultado": "INATIVADO",
            "Mensagem": "Produto não pôde ser excluído devido a vínculos. O produto foi inativado."
        }
    ]
}

Exemplo de Script

procedure C_ExcluirProdutos;
var
  Q: TPHQuery;
  TextJson: String;
  JsonObj: TPHJson;
  I: Integer;
  Codigo: String;
begin
  JsonObj := TPHJson.Create;
  try
    JsonObj.LerJson(GetBody);

    Q := NewPHQuery;
    try
      TextJson := '';

      for I := 0 to JsonObj.ElementoDoNome('Protudos').Count - 1 do
      begin
        Codigo := JsonObj.ElementoDoNome('Protudos').Linha(I).ElementoDoNome('Codigo').Texto;

        if (TextJson <> '') then
          TextJson := TextJson + ', ';

        try
          { Tenta excluir }
          Q.Clear;
          Q.Add('DELETE FROM PRODUTOS ' +
                'WHERE CODIGO = :COD');
          Q.ParamByName('COD').AsInteger := StrToInt(Codigo);
          Q.ExecSQL;

          TextJson := TextJson +
            '{ ' +
            '"Codigo": "' + Codigo + '", ' +
            '"Resultado": "EXCLUIDO", ' +
            '"Mensagem": "Produto excluído com sucesso." ' +
            '}';
        except
          if (ParamByName('Inativar').AsString = 'S') then
          begin                        
            { Inativa o Produto }
            Q.Clear;
            Q.Add('UPDATE PRODUTOS ' +
                  'SET ATIVO = ''N'' ' +
                  'WHERE CODIGO = :COD');
            Q.ParamByName('COD').AsInteger := StrToInt(Codigo);
            Q.ExecSQL;

            TextJson := TextJson +
              '{ ' +
              '"Codigo": "' + Codigo + '", ' +
              '"Resultado": "INATIVADO", ' +
              '"Mensagem": "Produto não pôde ser excluído devido a vínculos. O produto foi inativado." ' +
              '}';
          end else
          begin
            TextJson := TextJson +
              '{ ' +
              '"Codigo": "' + Codigo + '", ' +
              '"Resultado": "NÃO EXCLUIDO", ' +
              '"Mensagem": "Produto não pôde ser excluído devido a vínculos." ' +
              '}';
          end;                                          
        end;
      end;

      ParamByName('Result').AsString :=
        '{ "Produtos": [' + TextJson + '] }';
    finally
      Q.Free;
    end;
  finally
    JsonObj.Free;
  end;
end;

begin

end.