Árvore de páginas

Método PUT

Produto:

ADVPL

Versões:

 

Ocorrência:

Gostaria de um material que explicasse realmente como implementar a tecnologia RESTFul no Protheus, com exemplos de APIs, exemplos de programas externos consumindo o serviço, e exemplos de envio e recebimento de dados. 

Ambiente:

Todos

Passo a passo:

O método PUT é responsável por alterar algum tipo de informação enviada pelo client.

Vamos ver abaixo um exemplo de método put:

Iremos receber um JSON com dados de um cliente e realizar a alteração do mesmo caso exista na base de dados.

Neste exemplo teremos parâmetros recebidos via URL que no caso será o CGC (cpf ou cnpj) do cliente que queremos realizar a alteração e o conteúdo via JSON que será recebido via POST-Request (no corpo da requisição HTTP).

Estrutura da JSON que iremos receber:

1

WSMETHOD PUT WSRECEIVE RECEIVE WSSERVICE CLIENTES

Local cJSON := Self:GetContent() // –> Pega a string do JSON

Local cCGC := Self:CGC // –> Pega o parâmetro recebido pela URÇ

Local lRet := .T.

Local oParseJSON := Nil

Local aDadosCli := {} //–> Array para ExecAuto do MATA030

Local cJsonRet := “”

Local cArqLog := “”

Local cErro := “”

Private lMsErroAuto := .F.

If !ExistDir(“\log_cli”)

MakeDir(“\log_cli”)

EndIf

::SetContentType(“application/json”)

// –> Deserializa a string JSON

FWJsonDeserialize(cJson, @oParseJSON)

SA1->( DbSetOrder(3) )

If (SA1->( DbSeek( xFilial(“SA1”) + cCGC ) ))

Aadd( aDadosCli, {“A1_NOME”, oParseJSON:CLIENTE:NOME , Nil } )

Aadd( aDadosCli, {“A1_END” , oParseJSON:CLIENTE:ENDERECO , Nil } )

MsExecAuto({|x,y| MATA030(x,y)}, aDadosCli, 4)

If lMsErroAuto

cArqLog := oParseJSON:CLIENTE:CGC + ” – ” + SubStr( Time(),1,5 ) + “.log”

cErro := MostraErro(“\log_cli”, cArqLog)

cErro := TrataErro(cErro) // –> Trata o erro para devolver para o client.

SetRestFault(400, cErro)

lRet := .F.

Else

cJSONRet := ‘{“cod_cli”:”‘ + SA1->A1_COD + ‘”‘;

+ ‘,”loja”:”‘ + SA1->A1_LOJA + ‘”‘;

+ ‘,”msg”:”‘ + “Alterado” + ‘”‘;

+’}’

::SetResponse( cJSONRet )

EndIf

Else

SetRestFault(400, “Cliente não encontrado.”)

lRet := .F.

EndIf

Return(lRet)
O único ponto de atenção que deveremos ter nesse método é a linha 4, pois é ali que recebemos o CGC do cliente informado através da URL no qual iremos modificar.

Todo o restante dos comandos, já está explicado nos métodos POST e GET.

Exemplo de requisição efetuada com sucesso:

1

Exemplo de requisição efetuada com erro:

2

Observações:

O Postman foi utilizado como exemplo de consumo em uma ferramenta externa, a TOTVS não presta suporte a ferramentas de terceiros, somente analisa o serviço e/ou consumo utilizando os recursos documentados e disponíveis para customização.

Documentações de referência:

http://tdn.totvs.com/display/tec/REST

http://tdn.totvs.com/display/tec/Interface+HTTP

http://tdn.totvs.com/display/framework/FWRest

http://tdn.totvs.com/display/public/mp/MsAdvSize+-+Dimensionamento+de+Janelas