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:
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:
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. |
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.
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/AdvPl+utilizando+MVC