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)