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