MVC Validação campo

Olá Pessoal, sou nova em ADVPL. e gostaria de uma ajuda ... eu preciso fazer a seguinte validação de um campo em uma grid:

Se for digitado asterisco (*) no campo (ZZH_CODEMP),o campo de descrição (ZZH_DESEMP) deve ser incluído o texto "TODOS" automaticamente.

O campo ZZH_CODEMP tem uma consulta padrão, mas caso o usuário colocar * o outro campo de descrição automaticamente recebe "TODOS".

Agradeço a atenção.

Olá, nesse caso o ideal é colocar um gatilho no campo ZZH_CODEMP que dependendo do conteúdo do campo poderá atuar em outro campo como o ZZH_DESEMP.

Mais detalhes para MVC aqui: https://terminaldeinformacao.com/knowledgebase/metodo-addtrigger/

Olá eduarda, segue como pode ser feito, tive o mesmo problema e resolvi usando o metodo SetProperty na modelDef


//ModelDef
oStructGrid:SetProperty('ZZH_CODEMP',   MODEL_FIELD_VALID, {|| preencheLin()})


/*/{Protheus.doc} preencheLin
    (long_description)
    @type  Static Function
    @author Leandro Lemos    
    @since 25/05/2022
    @version P12
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
    @example
    (examples)
    @see (links_or_references)
/*/

Static Function preencheLin()
    Local aArea         := GetArea()
    Local oModel        := FWModelActive()
    Local oModelGrid
    Local nOperation
    Local aSaveLines    := FWSaveRows()
    Local lRet                    := .T.

    IF oModel <> Nil
        oModelGrid    := oModel:GetModel('ZB3DETAIL')
        nOperation    := oModelGrid:GetOperation() //3 == Inclusão, 4 == Alteração

        //Alteração
        IF nOperation == 3 .or. nOperation == 4

            nLinha :=     oModelGrid:GetLine()
            oModelGrid:GoLine(nLinha)
            //Verificando se a linha não está deletada
            IF(!oModelGrid:IsDeleted())
                IF oModelGrid:GetValue('ZB3_FIDELI') == '*'
                    oModelGrid:SetValue('ZZH_DESEMP','TODOS')
                    oModelGrid:GoLine(nLinha)
                EndIF

            EndIF

        EndIF

    EndIF

    FWRestRows( aSaveLines )
    RestArea(aArea)

Return (lRet)

Estou precisando de algo parecido, porem em vez de alterar o valor de outro campo, preciso tornar ele editavel ou não. Alguem pod eme ajudar ?

Bom dia. Sei que estou atrasado, mas caso ainda tenha interesse, consegui validar se os campos serão editáveis (inclusive se a linha será delatável ou não) usando a cláusula BEFORELINE:

NEW MODEL ;
TYPE 2
[ linhas suprimidas aqui ]
BEFORELINE { |_oMdl| _OkEditLin (_oMdl) }

static function _OkEditLin (_oModel)
local _lRet := .T.
if _oModel:GetValue(“ZA_MSBLQL”,_oModel:nLine) == “1”
_lRet = .F.
endif
return _lRet

Agradeço a Atenção do Josué e do Leandro, deram ideia de como posso resolver... porém fiz da seguinte maneira..

Criei uma função que é chamada no gatilho do SIGACFG..

User Function zGNCM1()

Local cPosi := "" Local cGat := M->ZZI_DESCNC Local cAst := "TODOS"

IF(ALLTRIM(M->ZZI_NCM)) == "*" cGat := cAst cPosi := cGat

ELSE cPosi := POSICIONE("SYD",1,FwXFilial("SYD")+ZZI_NCM,"YD_DESC_P") ENDIF

Return cPosi