Acessar ::SetResponse() em uma Static Function

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.

Alguém tem uma solução pra isso?

Boa Tarde,

Faço da seguinte maneira:


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!

Atenciosamente,

Boa tarde Sérgio,

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:


validar(self, 418, "I'm a teapot")

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

Obrigado pela resposta Daniel, tambem tinha essa duvida. Lembrando que é importante votar nas respostas corretas pessoal.