Exemplo de Deletar Produto Com PHSYS API
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
Parâmetros
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:
{
"Produtos": [
{ "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('Produtos').Count - 1 do
begin
Codigo := JsonObj.ElementoDoNome('Produtos').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.