Exemplo de Ponto de Entrada (PE) em MVC – Cadastro de Produto (MATA010)
Segue abaixo um exemplo de Ponto de Entrada MVC para o cadastro de produtos. Este exemplo foi solicitado há algum tempo, e resolvi compartilhar aqui para facilitar a vida de quem está iniciando no modelo MVC do Protheus.
No PE MVC, o parâmetro recebido é um array contendo os objetos e valores da classe que está sendo executada. Com esses dados é possível recuperar o model e identificar qual ponto (hook) está sendo acionado.
Existem diversos pontos possíveis para customização:
- antes da confirmação do modelo
- após a confirmação do modelo
- dentro da transação (TTS)
- fora da transação
- entre outros…
Neste artigo trago 3 pontos como exemplo.
Código completo do exemplo
#INCLUDE "TOTVS.CH"
#INCLUDE 'FWMVCDEF.CH'
/*/{Protheus.doc} MATA010
Ponto de Entrada do Cadastro de Produto.
@type function
@author Eurai Rapelli
@since 2021.08.28
@obs http://tdn.totvs.com/display/public/PROT/ADV0041_PE_MVC_MATA010_P12
/*/
User Function ITEM()
Local aParam := PARAMIXB
Local xRet := .T.
Private oUAObj := Nil
Private cIdPonto := ''
Private cIdModel := ''
Private cClasse := ''
Private cCRLF := CRLF
Begin Sequence
If aParam <> NIL
oUAObj := aParam[1]
cIdPonto := aParam[2]
cIdModel := IIf(oUAObj <> NIL, oUAObj:GetId(), aParam[3])
cClasse := IIf(oUAObj <> NIL, oUAObj:ClassName(), '')
If cIdPonto == 'MODELVLDACTIVE'
// Antes da validação do modelo
ElseIf cIdPonto == 'MODELPOS'
If !(xRet := fModelPos())
Break
EndIf
ElseIf cIdPonto == 'MODELCOMMITTTS'
// Dentro da transação (TTS)
EndIf
EndIf
End Sequence
Return( xRet )
/*/{Protheus.doc} fModelPos
Validação do Modelo
@type function
/*/
Static Function fModelPos()
Local lRet := .T.
Begin Sequence
If oUAObj:GetOperation() == MODEL_OPERATION_INSERT .OR. ;
oUAObj:GetOperation() == MODEL_OPERATION_UPDATE
// Inserção ou alteração
EndIf
End Sequence
Return( lRet )
Gostou? Compartilhe com seus amigos e deixe um comentário! 😎
Um abraço, e até a próxima!