Pessoal, estou desenvolvendo uma API, e nela eu faço vários validações para os campos, e para o código não ficar muito extenso eu resolvi criar uma função, onde ela recebe dois parâmetros, Código do erro e Mensagem do erro
Depois do retorno do método da API, eu coloquei
static function validar(erro, msg)
Local cMgs:= msg
Local nErro:= erro
::SetResponse('{"Teste": "Retornando algo aqui"}')
Return .T.
E chamo essa função da seguinte forma:
validar(404, "O objeto telefones não foi informado")
Então tive dois problemas, o primeiro é que eu não consegui acessar o valor diretamente informando o parâmetro, tive que jogar dentro de uma variável local. E o outro erro é que o ::SetResponse não funciona dentro de uma static function.
WSMETHOD POST WSSERVICE clientes
Local aRet := {}
Local cJson := ::getContent()
Local lRet := .T.
Local oResponse, oJson
Local cResp
::setContentType('application/json')
oJson := JsonObject():New()
oResponse := JsonObject():New()
cJson := NoAcento(cJson)
oJson:FromJson(cJson)
aRet := U_RestCli(oJson,3)
If aRet[1]
oResponse['status'] := "200"
oResponse['message'] := ALLTRIM(aRet[2])
oResponse['A1_COD'] := aRet[3]
oResponse['A1_LOJA'] := aRet[4]
oResponse['A1_TRANSP'] := aRet[5]
oResponse['A1_GRPTRIB'] := aRet[6]
oResponse['R_E_C_N_O_'] := aRet[7]
::SetResponse(oResponse:toJson())
Else
SetRestFault("400", aRet[2])
EndIf
Return .T.
Resumindo, retorno um array para o wsmethod, a primeira posição do array indica se a operação foi realizada com sucesso ou não, cada posição do array tem um valor do retorno que desejo, monto os atributos no json e então aciono o SetResponse.
No seu caso, utilize sua função para retornar para o método se está valido ou não, então no método utilize o setresponse!
Não faz sentido o ::SetResponse funcionar dentro de uma static function, afinal o :: é um "atalho" para self:, logo você está trabalhando com classes, instância, coisa que não existe em uma static function.
Se sua static function é chamada dentro de algum método, você pode alterar a mesma, enviando como parâmetro o self, exemplo:
static function validar(oApi, erro, msg)
Local cMgs:= msg
Local nErro:= erro
oApi:SetResponse('{"Teste": "Retornando algo aqui"}')
Return .T.
Sendo assim, quando você for chamar a função valida, você passa a enviar como primeiro parâmetro o self:
Muito obrigado Daneil, funcionou exatamente como eu queria, e obrigado também pela a explicação. Graças a isso, tirei várias linhas que estavam se repetindo