PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
API Rest
Versão:
12.1.8
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário ANDROETTO ANDROETTO em 20/07/2018, 08:03 h
Local: CO  Registro: 01/12/2015  Postagens: 11

Prezado, ative a API REST do Protheus, quando executo localhost:8012/REST/USERS o JSON me lança corretamente. Agora, quando eu executo localhost:8012/REST/CLIENTES me joga {"errorCode":404,"errorMessage":null}

Eu passo o código:

#Include ‘protheus.ch‘
#Include ‘parmtype.ch‘
#Include ‘RestFul.ch‘


User Function EREST_2()     
Return


WSRESTFUL CLIENTES DESCRIPTION "Serviço REST CRUD de Clientes"

WSDATA RECEIVE As String //Json Recebido no corpo da requição
WSDATA CGC        As String //Em caso de PUT ou DELETE pega o CGC por URL

WSMETHOD POST      DESCRIPTION "Cadastra um novo cliente"           WSSYNTAX ""
WSMETHOD GET      DESCRIPTION "Retorna lista de clientes"      WSSYNTAX ""
WSMETHOD PUT      DESCRIPTION "Altera um cliente"                WSSYNTAX "/CLIENTES || /CLIENTES/{CGC}"

END WSRESTFUL

WSMETHOD GET WSSERVICE CLIENTES

Local aArea       := GetArea()
Local cNextAlias := GetNextAlias()
Local oCliente      := CLIENTES():New() // --> Objeto da classe cliente
Local oResponse := FULL_CLIENTES():New() // --> Objeto que será serializado
Local cJSON           := ""
Local lRet           := .T.

::SetContentType("application/json")

BeginSQL Alias cNextAlias
     SELECT A1_COD, A1_LOJA, A1_NOME, A1_END, A1_CGC, A1_CEP, A1_DDD, A1_TEL
     FROM %table:SA1% SA1
     WHERE SA1.%notdel%
EndSQL

(cNextAlias)->( DbGoTop() )

If (cNextAlias)->( !Eof() )

     While (cNextAlias)->( !Eof() )
          
          oCliente:SetCodigo( AllTrim((cNextAlias)->A1_COD ))
          oCliente:SetLoja(      AllTrim((cNextAlias)->A1_LOJA))
          oCliente:SetNome(      AllTrim((cNextAlias)->A1_NOME))
          oCliente:SetCGC(      AllTrim((cNextAlias)->A1_CGC ))
          oCliente:SetCEP(      AllTrim((cNextAlias)->A1_CEP ))
          oCliente:SetEnd(      AllTrim((cNextAlias)->A1_END ))
          oCliente:SetDDD(      AllTrim((cNextAlias)->A1_DDD ))
          oCliente:SetTel(     AllTrim((cNextAlias)->A1_TEL ))
          
          oResponse:Add(oCliente)
          
          (cNextAlias)->( DbSkip() )
     
     EndDo
     
     cJSON := FWJsonSerialize(oResponse, .T., .T.,,.F.)
     ::SetResponse(cJSON)
          
Else
     SetRestFault(400, "SA1 Empty")
     lRet := .F.
EndIf

RestArea(aArea)

Return(lRet)

WSMETHOD POST WSRECEIVE RECEIVE WSSERVICE CLIENTES

Local cJSON       := Self:GetContent() // Pega a string do JSON
Local oParseJSON := Nil
Local aDadosCli      := {} //--> Array para ExecAuto do MATA030
Local cJsonRet   := ""
Local cArqLog      := ""
Local cErro           := ""
Local cCodSA1      := ""
Local lRet           := .T.
Local aArea           := GetArea()

Private lMsErroAuto := .F.

// --> Cria o diretório para salvar os arquivos de log
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") + oParseJSON:CLIENTE:CGC ) ))

     cCodSA1 := GetNewCod()
     Aadd(aDadosCli, {"A1_FILIAL"     , xFilial("SA1")                                                  , Nil} )                    
     Aadd(aDadosCli, {"A1_COD"          , cCodSA1                                                            , Nil} )
     Aadd(aDadosCli, {"A1_LOJA"          , "01"                                                                 , Nil} )
     Aadd(aDadosCli, {"A1_CGC"          , oParseJSON:CLIENTE:CGC                                        , Nil} )
     Aadd(aDadosCli, {"A1_NOME"          , oParseJSON:CLIENTE:NOME                                        , Nil} )
     Aadd(aDadosCli, {"A1_NREDUZ"     , oParseJSON:CLIENTE:NOME                                        , Nil} )
     Aadd(aDadosCli, {"A1_END"          , oParseJSON:CLIENTE:ENDERECO                                   , Nil} )
     Aadd(aDadosCli, {"A1_PESSOA"     , Iif(Len(oParseJSON:CLIENTE:CGC) == 11, "F", "J")           , Nil} )
     Aadd(aDadosCli, {"A1_CEP"          , oParseJSON:CLIENTE:CEP                                        , Nil} )
     Aadd(aDadosCli, {"A1_TIPO"          , "F"                                                                 , Nil} )
     Aadd(aDadosCli, {"A1_EST"          , oParseJSON:CLIENTE:ESTADO                                        , Nil} )
     Aadd(aDadosCli, {"A1_MUN"          , oParseJSON:CLIENTE:MUNICIPIO                                   , Nil} )
     Aadd(aDadosCli, {"A1_TEL"          , oParseJSON:CLIENTE:TELEFONE                                   , Nil} )
     
     MsExecAuto({|x,y| MATA030(x,y)}, aDadosCli, 3)
     
     If lMsErroAuto
          cArqLog := oParseJSON:CLIENTE:CGC + " - " + SubStr( Time(),1,5 ) + ".log"
          RollBackSX8()
          cErro := MostraErro("\log_cli", cArqLog)
          cErro := TrataErro(cErro) // --> Trata o erro para devolver para o client.
          SetRestFault(400, cErro)
          lRet := .F.                     
     Else
          ConfirmSX8()
          cJSONRet := ‘{"cod_cli":"‘ + SA1->A1_COD     + ‘"‘;
                          + ‘,"loja":"‘ + SA1->A1_LOJA      + ‘"‘;
                          + ‘,"msg":"‘ + "Sucesso"           + ‘"‘;
                          +‘}‘
                          
         ::SetResponse( cJSONRet )                    
     EndIf          

Else
     SetRestFault(400, "Cliente já cadastrado: " + SA1->A1_COD + " - " + SA1->A1_LOJA)
     lRet := .F.      
EndIf

RestArea(aArea)

Return(lRet)

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           := ""
Local aArea           := GetArea()

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

RestArea(aArea)

Return(lRet)


Static Function TrataErro(cErroAuto)

Local nLines   := MLCount(cErroAuto)
Local cNewErro := ""
Local nErr        := 0

For nErr := 1 To nLines
     cNewErro += AllTrim( MemoLine( cErroAuto, , nErr ) ) + " - "
Next nErr

Return(cNewErro)


Static Function GetNewCod()

Local cCod := GetSX8Num("SA1", "A1_COD")
Local aArea := GetArea()

SA1->( DbSetOrder(1) )

While SA1->( DbSeek( xFilial("SA1") + cCod ) )
     cCod := GetSX8Num("SA1", "A1_COD")
EndDo

RestArea(aArea)

Return(cCod)

Mensagem do Enviar e-mail Abrir o Perfil do usuário DON.JUNIOR DON.JUNIOR em 19/08/2018, 08:56 h
Local: RJ  Registro: 24/01/2016  Postagens: 152
Confere este link... nas primeiras linhas já tem duas informações importantes!

http://tdn.totvs.com/display/framework/FWRestModel+-+API+RESTful+dos+modelos+de+dados+do+Protheus

Att.
Don Junior

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal