Bom dia!
Na versão 11 do Protheus eu possuía um ponto de entrada na tela de Cadastro de Ausências (GP240OK) que validava alguns campos da SR8 antes da inclusão/alteração.
Lá existia uma variável private aCols dentro da rotina principal, onde eu consultava ela pelo ponto de entrada e percorria procurando o campo desejado.
Após mudança para a versão 12, o meu ponto de entrada deixou de funcionar conforme desejado visto que a rotina foi convertida para MVC. A variável aCols não existe mais.
Testei pelo ponto de entrada GP240MAN, mas este executa após a inclusão dos dados.
Alguém tem alguma dica de como posso percorrer os dados do grid MVC usando um ponto de entrada? Lembrando que ambas as rotinas são padrões do sistema.
Giordano, boa tarde.
Este ponto de entrada continua ativo. porém o tratamento agora deve ser outro.
Para percorre o grid é preciso iniciar o objeto do modelo de dados
Segue um exemplo bem simples
oModel := FwModelActivate()
oObjSR8 := oObjDet:GetModel("GPEA240_SR8")
nLinAtual := oObjSR8:GetLine()
oObjSR8:GoLine(nLinAtual)
If oObjSR8:GetValue("R8_TIPOAFA") == "001"
Return(.F.)
EndIF
Espero que ajude.
Att,
Boa noite, Felipe! Obrigado pela resposta. Efetuei um teste em minha base e estou tendo problemas com os métodos GetLine e/ou Lenght. Ambos estão retornando nulo.
Segue parte do meu código:
oModel := FwModelActivate()
oGrid := oModel:GetModel(“GPEA240_SR8”)
//nessa parte ele retorna nulo
nLinAtual := oGrid:GetLine()
Giordano, o que você pode fazer também é validar no ponto de entrada do MVC, utilizando o FORMPOS ou o FORMLINEPOS
http://tdn.totvs.com/pages/viewpage.action?pageId=208345968
Veja se ajuda com este trecho:
If Alltrim(cIdPonto) == "MODELPRE"
lIsGrid := ( Len( aParam ) > 3 )
// Se for visualização ou alteração, muda o ícone da legenda de acordo com o status
if !lIsGrid
return xRet
Endif
oDet:=oObj:GetModel('ZZ2DETAIL')
nLin := oDet:GetLine()
For nX := 1 To oDet:Length()
oDet:GoLine(nX)
cStatus := oDet:GetValue('ZZ2_STATUS')
IF cStatus=='1'
oDet:SetValue("ZZ2_LEGEN","BR_VERMELHO",.T.)
ElseIf cStatus=='2'
oDet:SetValue("ZZ2_LEGEN","BR_VERDE",.T.)
ElseIf cStatus=='3'
oDet:SetValue("ZZ2_LEGEN","BR_LARANJA",.T.)
EndIF
oDet:SetLine(nX)
Next nX
oDet:GoLine(nLin)
Endif