Árvore de páginas

PONTO DE ENTRADA DE AUSÊNCIAS

Problema

A partir da versão 12, algumas rotinas do Microsiga Protheus sofreram conversões para seguirem os padrões MVC, visando separar a regra de negócios da interface gráfica.

A idéia 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, 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 um fonte do Modulo Jurídico:   JURA001. Neste fonte o ID do Modelo de Dados ( definido na funcão ModelDef()  ) é também JURA001.

Documentação completa de pontos de entradas para fontes utilizando conceito MVC no link:

http://tdn.totvs.com/display/public/mp/Pontos+de+Entrada+para+fontes+Advpl+desenvolvidos+utilizando+o+conceito+MVC


Foi levantado pelo cliente, na issue DRHPAG-6058, a ausência do parâmetro 'Recno', que era usado para verificar se o registro havia sido incluído.

http://jiraproducao.totvs.com.br/browse/DRHPAG-6058

Solução

Conforme descrito na documentação de Pontos de Entrada para MVC, os parâmetros recebimentos no momento de execução do ponto de entrada são:

1OObjeto do formulário ou do modelo, conforme o caso.
2CID do local de execução do ponto de entrada.
3CID do formulário.
4NNúmero da Linha da FWFORMGRID.


Neste caso da issue DRHPAG-6058, no fonte GPEA240, será enviado um objeto do tipo FWFormGridModel, cuja documentação pode ser encontrada no link:

http://tdn.totvs.com/display/framework/FWFormGridModel

Para realizar a verificação se a linha foi inserida e é nova no grid será necessário a chamada do método isInserted, conforme exemplificado abaixo.

Exemplo
User Function GPEA240()
Local aParam     := PARAMIXB
Local oObj       := ''
Local lIsGrid    := .F.

If aParam <> NIL
       oObj       := aParam[1]
       cIdPonto   := aParam[2]
       cIdModel   := aParam[3]
       lIsGrid    := ( Len( aParam ) > 3 )
       
   If cIdPonto == 'FORMLINEPOS'
	If oObj:isInserted()
		MsgAlert("Linha Inserida.")
	Else
		MsgAlert("Linha não inserida.")
	Endif
   Endif

Endif
 
Return .T.

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. 

Artigos relacionados

http://tdn.totvs.com/display/public/mp/Pontos+de+Entrada+para+fontes+Advpl+desenvolvidos+utilizando+o+conceito+MVC

FWFormGridModel

http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC