Verbo GET de API Rest Repetido

Estou construindo uma API REST e estou com o seguinte problema:

Preciso fazer o VERBO GET do HTTP 2 vezes, ou seja preciso ter 2 metodos GET no me WsREstful.

Desta forma encontrei a documentação da TOTVS no link http://tdn.totvs.com/pages/viewpage.action?pageId=75269436

Como o meu fonte não esta compilando eu pensei ter algo de errado, então pensei "vou pegar o exemplo da TOTVS e compilar e ver ok esta de errado com o meu.

Adivinhem mesmo erro:

appre1(85) Error C2051 LOCAL declaration follows executable statement

Segue abaixo o meu fonte não sei o que pode estar errado!

#Include 'Totvs.ch'
    #Include 'RestFul.ch'
    #Include 'parmtype.ch'

   WsRestFul APIPRODUTO Description "Servico para Manutencao de Produtos"

    WsData Filial as String
    WsData Codigo as String
    WsData Tipo   as String 
    WsData allpro as String


  WsMethod POST Description "Salva o Produto" WSSYNTAX "/produto"
  WsMethod GET  Description "Retorno o Produto" WSSYNTAX "/produto || /produto/{Codigo}"
  WsMethod GET All Description "Retorna Todos os Produtos" WsSyntax "/allprodutos{allpro}" PATH"/allprodutos{allpro}"

  //WSMETHOD POST     DESCRIPTION "Cadastra um novo cliente"         WSSYNTAX ""
  //
  //WsMethod DELETE Description "" PATH "/produto/APIPRODUTO/{id}"
  //WsMethod PUT Description 

End WsRestFul

WsMethod GET  WSRECEIVE Codigo WsService APIPRODUTO
 Local aArea    := GetArea()
 Local oProduct := Nil
 Local lReturn  := .F.
 Local cTipo    := "SV"
 Local cJson    := ""

 oProduct:= Product():New()
 If  oProduct:IsExist(FwxFilial('SB1'),::Codigo,cTipo)     
     ::SetContentType("application/json")

     If  Len(::aUrlParms) > 0
         oProduct:DESCCIENTIFICO:= oProduct:GetCod(FwxFilial('SB1'),cTipo)
         oProduct:PrecoVenda := CvalToChar(oProduct:PrecoVenda)
         oProduct:CusStand   := CvalToChar(oProduct:CusStand)
         cJson := FwJsonSerialize(oProduct,.T.,.T.,,.F.)
         ::SetResponse(cJson)
         lReturn := .T.
     Else
         ::SetRestFault(400, "E preciso colocar parametros na URL")
     EndIf
 Else
     ::SetRestFault(400,"Nao foi possivel encontrar o produto")
 EndIf

  RestArea(aArea)
Return lReturn



WsMethod POST WSReceive produto WsService APIPRODUTO
 Local lReturn  := .F.
 Local oProduct := Product():New()
 Local oObj     := Product():New()
 Local cJson    := ::GetContent()
 Local cJsonRet := ""
 Local cTipo    := "SV"
 Local aArea    := GetArea()

  If  Len(::aUrlParms) > 0
      ::SetContentType("application/json")      

      FwJsonDeserialize(cJson , @oProduct)
      oObj:GetClone(oProduct)
      oObj:GetCod(FwxFilial('SB1'),cTipo)
      If  oObj:Insert()
          lReturn   := .T.
          cJsonRet  := '{"Codigo":"'+oObj:Codigo+'","Tipo":"'+oObj:Tipo+'","msg":"Sucesso"}'
          ::SetResponse(cJsonRet)      
      Else
          SetRestFault(400,"Nao Foi possivel cadastrar o produto")
      EndIf
  Else
      SetRestFault(400,"Nao foi possivel executar POST o produto")
  EndIf
  FreeObj(oObj)
  RestArea(aArea)
Return lReturn


WsMethod GET All WSReceive allpro WsService APIPRODUTO
 Local  aArea   := GetArea()
 Local  lReturn := .F.
 Local  cAlias  := ""
 Local  oObj    := Product():New()
 Local oProduct := Product():New()
 Local cJson

 SetContentType("application/json")
 cAlias:= oProduct:GetAll()
 If  Empty(cAlias)
     SetRestFault(400,'Retorno vazio nao existem produtos cadastrados')
 Else
     While (!Eof(cAlias))
           oProduct:Codigo     := cAlias->CODIGO
           oProduct:Descricao  := cAlias->DESCRICAO
           oProduct:Tipo       := cAlias->TIPO
           oProduct:PrecoVenda := Iif(ValType(cAlias->PRECOVENDA) == 'C',CvalToChar(cAlias->PRECOVENDA),cAlias->PRECOVENDA)
           oProduct:Armazem    := cAlias->ARMAZEM

           oObj:GetRange(oProduct)
     EndDo

    cJson:= FwJsonSerialize(oObj:Collection)
    SetResponse(cJson)     
    lReturn := .T.

 EndIf
 RestArea(aArea)
Return lReturn
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do SigaOAdvpl!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags rest ou faça a sua própria pergunta.