Interceptação do Commit em MVC

Boa tarde.

Estou desenvolvendo um fonte em MVC e usando a classe FwModelEvent pra fazer as validações do modelo de dados do tipo 2 (cabeçalho e grid na mesma tabela).

Previamente, programando de forma procedural, tinha o hábito de criar uma static function pra validar a linha e chamar essa função na validação inteira do grid, via loop. De que forma seria possível fazer isso usando as classes do FwModelEvent?

Exemplo: Método FWModelEvent ():GridPosVld(oSubModel, cModelID) -> lOK é a validação inteira da grid. Consigo dentro desse método rodar um for/while e obter o retorno de FWModelEvent ():GridLinePosVld(oSubModel, cModelID, nLine) -> lOK? Se sim, de que forma?

Link da documentação: https://tdn.totvs.com/pages/releaseview.action?pageId=269552294

Olá Lucas, segue a forma como eu faço, espero que ajude.

O exemplo é bem simples só para validar um campo

Se resolver marca como resposta.


//ModelDef
oModel:AddGrid("ZZ7DETAIL", "ZZ7MASTER", oStruZZ7Grid,,{ |oStruZZ7Grid|ZZ7GridPosVld(oStruZZ7Grid)})


/*/{Protheus.doc} ZZ7GridPosVld
    (Valida se os dados obrigatórios do grid foram preenchidas        
    )
    @type  Static Function
    @author Leandro Lemos
    @since 19/07/2023
    @version P12
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
    @example
    (examples)
    @see (links_or_references)
    /*/
Static Function ZZ7GridPosVld( oModelZZ7 )
    Local nOperation     := oModelZZ7:GetOperation()
    Local oView                := FWViewActive() //Objeto da View, adicionado para dar refresh após adicioar uma nova linha
    Local lRet                  := .T.
    Local nLinha             := oModelZZ7:nLine

    If nOperation == 3 .or. nOperation == 4

        oModelZZ7:GoLine(nLinha)
        If !(oModelZZ7:IsDeleted())
            IF(EMPTY(oModelZZ7:GetValue('ZZ7_FORNEC')))
                Help(,,'Erro',,'Fornecedor invalido',1,0,,,,,,{'Consulte no F3 o codigo do fornecedor'})
                lRet := .F.
            EndIF
        EndIF

    EndIF
    oView:Refresh('VIEW_ZZ9G')

Return lRet