Sie sind auf Seite 1von 6

Pontos de Entrada para fontes Advpl desenvolvidos

utilizando o conceito MVC


Pontos de Entrada para fontes Advpl desenvolvidos utilizando o conceito MVC
Pontos de entrada so uma forma de personalizar rotinas, funes e
procedimentos do Microsiga Protheus.Os pontos de entrada recebem
parametros atravs da varivel PARAMIXB, conforme a documentao do
mesmo.Os pontos de entrada retornam valores como uma funo Advpl. Caso
o retorno do ponto de entrada seja diferente do especificado na
documentao a rotina poder ser abortada.
A idia de ponto de entrada, para fontes desenvolvidos utilizando-se o conceito de MVC e suas classes, um
pouco diferente dos fontes desenvolvidos de maneira convencional.
Nos fontes convencionais temos um "nome" para cada ponto de entrada criado, por exemplo, na rotina MATA010
Cadastro de Produtos temos os pontos de entrada: MT010BRW, MTA010OK, MT010CAN, etc. Em MVC, no
desta forma. Em MVC criamos um nico ponto de entrada e este chamado em vrios momentos dentro do fonte
desenvolvido.
Este ponto de entrada nico deve ser uma User Function e ter como nome o ID do Modelo de Dados (Model) do
Fonte. Peguemos de exemplo um fonte do Modulo Jurdico: JURA001. Neste fonte o ID do Modelo de Dados (
definido na funco ModelDef() ) tambm JURA001, portanto ao se escrever o ponto de entrada desta rotina,
faramos:

User Function JURA001()


Local aParam := PARAMIXB
Local xRet := .T.
...
Return xRet

O ponto de entrada criado recebe via parmetro (PARAMIXB) um vetor com informaes referentes ao fonte. Estes
parmetros variam para cada situao, em comum todos eles tem os 3 primeiros elementos que so listados
abaixo, no quadro seguinte existe a relao de parmetros de cada ID:
Posies do array de parmetros comuns a todos os IDs:
POS.

TIPO

DESCRIO

Objeto do formulrio ou do modelo, conforme o caso

ID do local de execuo do ponto de entrada

ID do formulrio

Como j foi dito, o ponto de entrada chamado em vrios momentos dentro do fonte, na 2 posio da estrutura
do vetor passado um ID que identifica qual este momento. Ela pode ter como contedo:

ID

MODELPRE

MOMENTO DE EXECUO DO PONTO DE ENTRADA

Antes da alterao de qualquer campo do modelo.


Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
Requer um retorno lgico
MODELPOS

Na validao total do modelo.


Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
Requer um retorno lgico
FORMPRE

Antes da alterao de qualquer campo do formulrio.


Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
Requer um retorno lgico
FORMPOS

Na validao total do formulrio.


Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
Requer um retorno lgico

FORMLINEPRE

Antes da alterao da linha do formulrio FWFORMGRID.


Parmetros Recebidos:
1
2
3
4
5
6

O
C
C
N
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio
Nmero da Linha da FWFORMGRID
Ao da FWFORMGRID
Id do campo

Retorno:
Requer um retorno lgico
FORMLINEPOS

Na validao total da linha do formulrio FWFORMGRID.


Parmetros Recebidos:
1
2
3
4

O
C
C
N

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio
Nmero da Linha da FWFORMGRID

Retorno:
Requer um retorno lgico
MODELCOMMITTTS

Aps a gravao total do modelo e dentro da transao.


Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
No espera retorno
MODELCOMMITNTTS

Aps a gravao total do modelo e fora da transao.


Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
No espera retorno

FORMCOMMITTTSPRE

Antes da gravao da tabela do formulrio.


Parmetros Recebidos:
1
2
3
4

O
C
C
L

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio
Se .T. indica novo registro (Incluso) se .F. registro j existente
(Alterao / Excluso)

Retorno:
No espera retorno
FORMCOMMITTTSPOS

Aps a gravao da tabela do formulrio.


Parmetros Recebidos:
1
2
3
4

O
C
C
L

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio
Se .T. indica novo registro (Incluso) se .F. registro j existente
(Alterao / Excluso)

Retorno:
No espera retorno
FORMCANCEL

No cancelamento do boto.
Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
Requer um retorno lgico
BUTTONBAR

Para a incluso de botes na ControlBar.


Para criar os botes deve-se retornar um array bi-dimensional com a
seguinte estrutura de cada item:
1
2
3
4

C
C
B
C

Titulo para o boto


Nome do Bitmap para exibio
CodeBlock a ser executado
ToolTip (Opcional)

Parmetros Recebidos:
1
2
3

O
C
C

Objeto do formulrio ou do modelo, conforme o caso


ID do local de execuo do ponto de entrada
ID do formulrio

Retorno:
Requer um array de retorno com estrutura pr definida

Observaes:

Quando o modelo de dados possui vrios componentes (por exemplo, vrios FWFORMGRIDs), a 3
posio do vetor trar o ID deste componente

Quando o tipo de retorno de um determinado momento de execuo no for passado ou for passado com o
tipo errado ser exibida uma mensagem no console avisando sobre isso. Todos IDs que esperam retorno
devem ser tratado no ponto de entrada

Ao se escrever um fonte em MVC que ser uma User Function, cuidado ao se atribuir o ID do modelo de
dados (Model), pois ele no poder ter o mesmo nome do fonte. Se o fonte tiver o nome FONT001, o ID do
Modelo de Dados (Model) no poder ser tambm FONT001,

Exemplo:
User Function JURA001()
Local aParam := PARAMIXB
Local xRet
:= .T.
Local oObj
:= ''
Local cIdPonto := ''
Local cIdModel := ''
Local lIsGrid := .F.
Local nLinha := 0
Local nQtdLinhas := 0
Local cMsg
:= ''

If aParam <> NIL


oObj
:= aParam[1]
cIdPonto := aParam[2]
cIdModel := aParam[3]
lIsGrid := ( Len( aParam ) > 3 )
If lIsGrid
nQtdLinhas := oObj:GetQtdLine()
nLinha := oObj:nLine
EndIf
If

cIdPonto == 'MODELPOS'
cMsg := 'Chamada na validao total do modelo (MODELPOS).' + CRLF
cMsg += 'ID ' + cIdModel + CRLF
If !( xRet := ApMsgYesNo( cMsg + 'Continua ?' ) )
Help( ,, 'Help',, 'O MODELPOS retornou .F.', 1, 0 )
EndIf

ElseIf cIdPonto == 'FORMPOS'


cMsg := 'Chamada na validao total do formulrio (FORMPOS).' + CRLF
cMsg += 'ID ' + cIdModel + CRLF
If

cClasse == 'FWFORMGRID'
cMsg += ' um FORMGRID com ' + Alltrim( Str( nQtdLinhas ) ) + ;
' linha(s).' + CRLF
cMsg += 'Posicionado na linha ' + Alltrim( Str( nLinha
ElseIf cClasse == 'FWFORMFIELD'
cMsg += ' um FORMFIELD' + CRLF
EndIf

) ) + CRLF

If !( xRet := ApMsgYesNo( cMsg + 'Continua ?' ) )


Help( ,, 'Help',, 'O FORMPOS retornou .F.', 1, 0 )
EndIf
ElseIf cIdPonto == 'FORMLINEPRE'
If aParam[5] == 'DELETE'
cMsg := 'Chamada na pre validao da linha do formulrio (FORMLINEPRE).' + CRLF
cMsg += 'Onde esta se tentando deletar uma linha' + CRLF

cMsg += ' um FORMGRID com ' + Alltrim( Str( nQtdLinhas ) ) +;


' linha(s).' + CRLF
cMsg += 'Posicionado na linha ' + Alltrim( Str( nLinha
cMsg += 'ID ' + cIdModel + CRLF

) ) +; CRLF

If !( xRet := ApMsgYesNo( cMsg + 'Continua ?' ) )


Help( ,, 'Help',, 'O FORMLINEPRE retornou .F.', 1, 0 )
EndIf
EndIf
ElseIf cIdPonto == 'FORMLINEPOS'
cMsg := 'Chamada na validao da linha do formulrio (FORMLINEPOS).' +; CRLF
cMsg += 'ID ' + cIdModel + CRLF
cMsg += ' um FORMGRID com ' + Alltrim( Str( nQtdLinhas ) ) + ;
' linha(s).' + CRLF
cMsg += 'Posicionado na linha ' + Alltrim( Str( nLinha ) ) + CRLF
If !( xRet := ApMsgYesNo( cMsg + 'Continua ?' ) )
Help( ,, 'Help',, 'O FORMLINEPOS retornou .F.', 1, 0 )
EndIf
ElseIf cIdPonto == 'MODELCOMMITTTS'
ApMsgInfo('Chamada apos a gravao total do modelo e dentro da transao (MODELCOMMITTTS).' + CRLF + 'ID ' + cIdModel )
ElseIf cIdPonto == 'MODELCOMMITNTTS'
ApMsgInfo('Chamada apos a gravao total do modelo e fora da transao (MODELCOMMITNTTS).' + CRLF + 'ID ' + cIdModel)
//ElseIf cIdPonto == 'FORMCOMMITTTSPRE'
ElseIf cIdPonto == 'FORMCOMMITTTSPOS'
ApMsgInfo('Chamada apos a gravao da tabela do formulrio (FORMCOMMITTTSPOS).' + CRLF + 'ID ' + cIdModel)
ElseIf cIdPonto == 'MODELCANCEL'
cMsg := 'Chamada no Boto Cancelar (MODELCANCEL).' + CRLF + 'Deseja Realmente Sair ?'
If !( xRet := ApMsgYesNo( cMsg ) )
Help( ,, 'Help',, 'O MODELCANCEL retornou .F.', 1, 0 )
EndIf
ElseIf cIdPonto == 'BUTTONBAR'
ApMsgInfo('Adicionando Botao na Barra de Botoes (BUTTONBAR).' + CRLF + 'ID ' + cIdModel )
xRet := { {'Salvar', 'SALVAR', { || Alert( 'Salvou' ) }, 'Este botao Salva' } }
EndIf
EndIf
Return xRet

Das könnte Ihnen auch gefallen