Árvore de páginas

Ponto de entrada padrão MVC

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Manufatura

Módulo:

SIGAMNT - Manutenção de Ativos e Gestão de Frotas

Rotina:

Rotina

Nome Técnico

MNTA080

Cadastro de Bens

País(es):

Todos

Banco(s) de Dados:

Todos

Tabelas Utilizadas:

ST9 - Bens

Sistema(s) Operacional(is):

Windows e Linux

Descrição

Nos fontes convencionais temos um "nome" para cada ponto de entrada criado, por exemplo, na rotina MNTA080– Bens, temos os pontos de entrada: MNTA080K, etc.
Em MVC, não é desta forma. Em MVC criamos um único ponto de entrada e este é chamado em vários 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, como:


User Function MNTA080()

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

...

Return xRet


O ponto de entrada criado recebe via parâmetro (PARAMIXB) um vetor com informações referentes ao fonte. Estes parâmetros variam para cada situação, em comum todos eles tem os 3 primeiros elementos que são listados abaixo, no quadro seguinte existe a relação de parâmetros de cada ID:


Posições do array de parâmetros comuns a todos os IDs:


POS.

TIPO

DESCRIÇÃO

1

O

Objeto do formulário ou do modelo, conforme o caso

2

C

ID do local de execução do ponto de entrada

3

C

ID do formulário


Como já foi dito, o ponto de entrada é chamado em vários momentos dentro do fonte, na 2ª posição da estrutura do vetor é passado um ID que identifica qual é este momento. Ela pode ter como conteúdo:


ID
MOMENTO DE EXECUÇÃO DO PONTO DE ENTRADA
MODELPRE
Antes da alteração de qualquer campo do modelo. 

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário

Retorno:
Requer um retorno lógico
 
MODELPOS
Na validação total do modelo. 

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário

Retorno:
Requer um retorno lógico

FORMPRE
Antes da alteração de qualquer campo do formulário. 

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário

Retorno:
Requer um retorno lógico

FORMPOS
Na validação total do formulário. 

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário

Retorno:
Requer um retorno lógico

FORMLINEPRE
Antes da alteração da linha do formulário FWFORMGRID. 

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
4     N        Número da Linha da FWFORMGRID
5     C        Ação da FWFORMGRID
6     C        Id do campo
  
Retorno:
Requer um retorno lógico

FORMLINEPOS
Na validação total da linha do formulário FWFORMGRID. 

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
4     N        Número da Linha da FWFORMGRID
  
Retorno:
Requer um retorno lógico

MODELCOMMITTTS
Após a gravação total do modelo e dentro da transação.

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
Retorno:
Não espera retorno

MODELCOMMITNTTS
Após a gravação total do modelo e fora da transação.

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário

Retorno:
Não espera retorno

FORMCOMMITTTSPRE
Antes da gravação da tabela do formulário.

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
4     L        Se .T. indica novo registro (Inclusão) se .F. registro já existente (Alteração / Exclusão)

Retorno:
Não espera retorno

FORMCOMMITTTSPOS
Após a gravação da tabela do formulário.

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
4     L        Se .T. indica novo registro (Inclusão) se .F. registro já existente (Alteração / Exclusão)
Retorno:
Não espera retorno

FORMCANCEL e MODELCANCEL
No cancelamento do botão.

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
Retorno:
Requer um retorno lógico

BUTTONBAR
Para a inclusão de botões na ControlBar.

Para criar os botões deve-se retornar um array bi-dimensional com a seguinte estrutura de cada item:

1     C        Titulo para o botão
2     C        Nome do Bitmap para exibição
3     B        CodeBlock a ser executado
4     C        ToolTip (Opcional)

Parâmetros Recebidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
Retorno:
Requer um array de retorno com estrutura pré definida.

Procedimento para Utilização

  1. Entrar no modulo de Manutenção de Ativos e Gestão de Frotas(SIGAMNT).
  2. Em Atualizações > Controle de Oficina > Bens > Bens. Realizar a inclusão de um bem e verificar que será chamado o ponto de entrada padrão do MVC, após a confirmação da tela. 


Ponto de Entrada

Descrição:

Ponto de entrada chamado no fonte MNTA080.prx, após a confirmação da tela.

Localização:

Atualizações \ Controle de Oficina \ Bens \ Bens

Programa Fonte:

MNTA080.prx

Função:

U_MNTA080

Retorno:

Nome

Tipo

Descrição

Obrigatório

 xRet

Indefinido

Retorno do ponto de entrada.

Sim

 

Exemplo Ponto de Entrada Padrão MVC
#INCLUDE "MNTA080.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

//------------------------------------------------------------------------------
/*/{Protheus.doc} U_MNTA080
User Function MNTA080, para chamada dos pontos de entrada padrões do MVC.

@obs Tratativa para os pontos entrada ExistBlock("MNTA080K").

@author Guilherme Freudenburg
@since 13/03/2018
@version P12

@return xRet  - Valor de retorno do ponto de entrada.
/*/
//------------------------------------------------------------------------------
User Function MNTA080() //Função responsável pela chamda dos pontos de entrada da rotina MNTA080 - Bens.

Local aParam   := PARAMIXB //Parâmetros passados pelo ponto de entrada.
Local xRet     := .T. //Retorno da função.
Local oObj     := '' //Objeto que receberá o modelo.
Local cIdPonto := '' //Identificador da chamada do ponto de entrada.
Local cIdModel := '' //Identificador do modelo utilizado.
Local cModel   := '' //Identifica o modelo utilizado e receberá o seu identificador.
Local cMsg     := ''

If aParam <> NIL //Identifica que foram enviado os parâmetros.
    oObj     := aParam[1] //Modelo ativado.
    cIdPonto := aParam[2] //Determina o ponto de chamada.
    cIdModel := aParam[3] //Identificador do modelo.

    If cIdPonto == 'MODELPOS' //Pós-Valid
        
        cModel := cIdModel+'_'+"ST9" //Concatena o identificado do modelo com o identificador da tabela.
        
        If oObj:GetModel(cModel):HasField('T9_BARCODE') //Verifica se campo existe no modelo.
            
            If Empty(oObj:GetValue(cModel,'T9_BARCODE')) //Verifica se o campo foi preenchido.
             
                 Help('',1,"PE MNTA080K e MNTA0804" ,,"Campo"+Space(1)+"T9_BARCODE"+Space(1)+;
                "não foi preenchido e é obrigatório.",2,0,,,,,,{"Preencha o campo T9_BARCODE"}) //Mensagem help que será apresentada em tela.
          
                xRet := .F. //Determina o retorno .F., barrando a gravação do modelo.
          
            EndIf
        EndIf

    ElseIf cIdPonto == 'MODELCANCEL' //Botão cancelar

		cMsg := 'Chamada no Botão Cancelar (MODELCANCEL).' + CRLF + 'Deseja Realmente Sair ?'
            
        If !( xRet := ApMsgYesNo( cMsg ) )
        	Help( ,, 'Help',, 'O MODELCANCEL retornou .F.', 1, 0 )
		EndIf

    EndIf

EndIf

Return xRet //Retorno do ponto de entrada.