Um tempo atrás quando foi alterada a rotina para MVC eu fiz um pequeno mapeamento dos P.E. antigos para o MVC. Lembrando que nem todos os pontos de entrada antigos tem equivalência MVC. Documentação https://tdn.totvs.com/pages/releaseview.action?pageId=604230458
#INCLUDE "RWMake.ch"
#INCLUDE "Totvs.ch"
#INCLUDE "ParmType.ch"
#Include "FWMVCDef.ch"
//#############################################################################
//##+----------+----------+-------+--------------------+------+-------------+##
//##|Programa | CRMA980 | Autor | Cirilo Rocha | Data | 29/11/2019 |##
//##+----------+----------+-------+--------------------+------+-------------+##
//##|Descr. | Ponto de entrada MVC do cadastro de clientes (MATA030) |##
//##+----------+----------+-------------------------------------------------+##
//##| DATA | ANALISTA | MANUTENÇÃO EFETUADA |##
//##+----------+----------+-------------------------------------------------+##
//##| | | |##
//##| | | |##
//##| | | |##
//##+----------+----------+-------------------------------------------------+##
//#############################################################################
User Function CRMA980()
//Declaracao de variaveis----------------------------------------------------------------------
Local xRet AS Variant
Local cIdPonto AS Character
Local cIdModel AS Character
Local lIsGrid AS Logical
Local nLinha AS Numeric
Local nQtdLinhas AS Numeric
Local nOper AS Numeric
//Privada para usar no Type()
Private oObj AS Object
//Inicializa Variaveis-------------------------------------------------------------------------
xRet := .T.
//---------------------------------------------------------------------------------------------
If ParamIxb <> NIL
oObj := ParamIxb[1]
cIdPonto := ParamIxb[2]
cIdModel := ParamIxb[3]
lIsGrid := ( Len( ParamIxb ) > 3 ) .And. ValType(ParamIxb[4]) == 'N'
If lIsGrid
nQtdLinhas := oObj:GetQtdLine()
// nLinha := oObj:nLine
nLinha := ParamIxb[4]
EndIf
nOper := oObj:GetOperation()
//Chamada na validacao total do modelo-----------------------------------------------------
If cIdPonto == 'MODELPOS' //Chama duas vezes, nao sei porque, pode usar o FORMPOS que tem a mesma funcao e chama 1 vez so
xRet := .T.
If ExistBlock("MA030TOK")
xRet := ExecBlock("MA030TOK", .F., .F.)
EndIf
If ExistBlock("VBTOK030") .And. ;
.Not. ExecBlock("VBTOK030", .F., .F., 5 )
xRet := .F.
EndIf
//Chamada apos a gravacao total do modelo e dentro da transacao----------------------------
ElseIf cIdPonto == 'MODELCOMMITTTS'
If nOper == MODEL_OPERATION_INSERT
If ExistBlock("M030INC")
ExecBlock("M030INC", .F., .F., 1 )
EndIf
//Salvo o codigo para usar em outros fontes, as vezes ele perde a posicao quando termina
_cCodCli := SA1->A1_COD
EndIf
If nOper == MODEL_OPERATION_UPDATE .And. ;
ExistBlock("MALTCLI")
ExecBlock("MALTCLI", .F., .F.)
EndIf
If nOper == MODEL_OPERATION_DELETE .And. ;
ExistBlock("M030EXC")
ExecBlock("M030EXC", .F., .F.)
EndIf
//Chamada apos a gravacao total do modelo e fora da transacao------------------------------
ElseIf cIdPonto == 'MODELCOMMITNTTS'
If nOper == MODEL_OPERATION_UPDATE .And. ;
ExistBlock("M030PALT")
xRet := ExecBlock("M030PALT", .F., .F.,1)
EndIf
//Chamada no Botão Cancelar----------------------------------------------------------------
ElseIf cIdPonto == 'MODELCANCEL'
If nOper == MODEL_OPERATION_INSERT
If ExistBlock("M030INC")
ExecBlock("M030INC", .F., .F.,3)
EndIf
EndIf
If nOper == MODEL_OPERATION_UPDATE .And. ;
ExistBlock("M030PALT")
xRet := ExecBlock("M030PALT", .F., .F.,0)
EndIf
//Chamada na validacao da ativacao do Model------------------------------------------------
ElseIf cIdPonto == 'MODELVLDACTIVE'
xRet := .T.
If nOper == MODEL_OPERATION_INSERT .And. ;
ExistBlock("MA030VINC")
xRet := ExecBlock("MA030VINC", .F., .F.)
EndIf
If nOper == MODEL_OPERATION_UPDATE
If ExistBlock("M030ALT")
xRet := ExecBlock("M030ALT", .F., .F.)
EndIf
If ExistBlock("MT030INT")
.Not. ExecBlock("M030ALT", .F., .F.)
xRet := .F.
EndIf
EndIf
If nOper == MODEL_OPERATION_DELETE .And. ;
ExistBlock("M030DEL")
xRet := ExecBlock("M030DEL", .F., .F.)
EndIf
EndIf
EndIf
Return xRet
Paulo, qual é exatamente o ponto de entrada? MA060CLI, MA030CLI ou outro nome? Procurei ambos os nomes, MA060CLI e MA030CLI no Google, TDN, nos fontes e não encontrei nada sobre esses pontos de entrada. A rotina estando em MVC, você tem inúmeros pontos de entrada, se a ideia é fazer validações, recomendo algo próximo do tudook, que permite retornar um .F. e gerar um help sobre a validação.
— Daniel Mendes 19 de Aug de 2022O ponto de entrada é o MA030CLI. Usamos esse ponto de entrada para verificar se o CNPJ já é existente no cadastro entre outras verificações. A ideia é localizar um ponto de entrada na nova rotina CRMA980 para fazer as mesmas verificações que o antigo MA030CLI fazia. A própria Totvs não conseguiu me dizer um ponto de entrada condizente. Estou procurando alguém que tenha feito para dar uma sugestão de desenvolvimento. Obrigado pela atenção!
— Paulo Rogerio Nogueira 22 de Aug de 2022