Ajude o site desativando o bloqueador de anúncio
Cabeçalho

ADVPL - Ponto de entrada em MVC

Autor: Eurai Criado: 28/08/2021 Atualizado: 13/11/2025 Ponto de Entrada
Postagem

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!

ASSINE A NEWSLETTER

Cadastrando...

PIX uDesenv

PIX QR Code para depósito

Clique para doar

Parceiros

Tudo em ADVPL - Blog parceiro

Blog ADVPL