Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Necessidade de documentação para criação e uso de pontos de entrada na rotina de Histórico Salarial, rotina desenvolvida utilizando-se o conceito de MVC.

03. SOLUÇÃO

A ideia 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, o GPALTSAL utilizado nas  rotinas GPEA010 (Cadastro de Funcionários), GPEM690 (Dissídio Retroativo), CSAM080 (Atualização do Aumento Programado), GPER200 (Aumento Salarial) e TRMA100 (Cadastro de Funcionários acessado pelo módulo Cargos e Salários e Arquitetura Organizacional)

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.
Peguemos de exemplo o próprio fonte de Histórico Salarial - GPEA250. neste fonte o ID do Modelo de Dados ( definido na funcão ModelDef()  ) é MODELGPEA250.

O ponto de entrada criado recebe via parâmetro um vetor  (PARAMIXB) 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:

Posição

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:

IDMomento de Execução
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

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


Observações:

  • Quando o modelo de dados possui vários componentes (por exemplo, vários FWFORMGRIDs), a 3ª posição do vetor trará o ID deste componente,
  • Quando o tipo de retorno de um determinado momento de execução não 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 não poderá ter o mesmo nome do fonte. Se o fonte tiver o nome FONT001, o ID do Modelo de Dados (Model) não poderá ser também FONT001, 


Levando os pontos acima em consideração, segue um exemplo de uso de ponto de entrada para execução após a gravação dos dados nas tabelas SR3/SR7:


#INCLUDE'PROTHEUS.CH'
UserFunctionMODELGPEA250()
LocalaParam     := PARAMIXB
LocalxRet       := .T.
LocaloObj       := ''
LocalcIdPonto   := ''
LocalcIdModel   := ''
LocallIsGrid    := .F.

If aParam <> NIL
     
       oObj       := aParam[1]
       cIdPonto   := aParam[2]
       cIdModel   := aParam[3]
     
       If  cIdPonto == 'MODELCOMMITNTTS'
            ApMsgInfo('Chamada apos gravacao SR3-SR7 - Similacao GPALTSAL')        
       EndIf
EndIf

Return xRet

04. DEMAIS INFORMAÇÕES

N/A

...