No artigo de hoje vamos demonstrar uma forma de simples de criar o ponto de entrada CRMA980 baseado nos que já existirem na sua base da MATA030 do Cadastro de Clientes.
Como muitos sabem, o cadastro de clientes foi atualizado, sendo que agora a rotina esta em MVC, com o nome de CRMA980.
Os pontos de entrada em MVC, ficam centralizados em uma User Function, sendo possível testar cada ponto com um If.
A grande questão, é que ficar copiando o mesmo código que já foi feito nos pontos antigos da MATA030 para essa nova, dá muito trabalho, e pode ser que falte copiar algum trecho e acabar dando problemas.
Então o que fizemos aqui, é acionar os mesmos pontos de entrada, nos pontos em MVC, assim você consegue otimizar o seu código e deixar ele bem organizado. Além do CRMA980, abaixo segue um exemplo também do CRM980BFIL e do CRM980MDEF.
//Bibliotecas
#Include "Totvs.ch"
/*/{Protheus.doc} User Function CRMA980
Novo cadastro de Clientes
@author Atilio
@since 15/10/2022
@version 1.0
@obs Codigo gerado automaticamente pelo Autumn Code Maker
*-------------------------------------------------*
Por se tratar de um p.e. em MVC, salve o nome do
arquivo diferente, por exemplo, CRMA980_pe.prw
*-----------------------------------------------*
A documentacao de como fazer o p.e. esta disponivel em https://tdn.totvs.com/pages/releaseview.action?pageId=208345968
@see http://autumncodemaker.com
/*/
User Function CRMA980()
Local aArea := FWGetArea()
Local aParam := PARAMIXB
Local xRet := .T.
Local oObj := Nil
Local cIdPonto := ""
Local cIdModel := ""
//Se tiver parametros
If aParam != Nil
//Pega informacoes dos parametros
oObj := aParam[1]
cIdPonto := aParam[2]
cIdModel := aParam[3]
//Na validacao total do formulario
If cIdPonto == "FORMPOS" .And. cIdModel == "SA1MASTER"
xRet := u_MA030TOK()
//Apos a gravacao total do modelo e dentro da transacao
ElseIf cIdPonto == "MODELCOMMITTTS"
nOper := oObj:nOperation
If nOper == 3
u_M030INC()
ElseIf nOper == 5
u_M030EXC()
EndIf
//Na validação do modelo de dados (pode impedir o usuário de abrir a tela)
ElseIf cIdPonto == "MODELVLDACTIVE"
nOper := oObj:nOperation
If nOper == 5
xRet := u_M030DEL()
EndIf
//Após a gravação total do modelo e fora da transação
ElseIf cIdPonto == "MODELCOMMITNTTS"
nOper := oObj:nOperation
If nOper == 4
u_M030PALT()
EndIf
//Para a inclusao de botoes na ControlBar
ElseIf cIdPonto == "BUTTONBAR"
aMenuUsr := u_MA030BUT()
xRet := {}
For nAtual := 1 To Len(aMenuUsr)
aAdd(xRet, {"* " + aMenuUsr[nAtual][4], "", aMenuUsr[nAtual][2], ""})
Next
EndIf
EndIf
FWRestArea(aArea)
Return xRet
/*/{Protheus.doc} User Function CRM980MDEF
Novo ponto de entrada para adicionar rotinas no novo cadastro de clientes (CRMA980)
@type Function
@author Atilio
@since 15/10/2022
@see https://tdn.totvs.com/pages/releaseview.action?pageId=604230458
/*/
User Function CRM980MDEF()
Local aArea := FWGetArea()
Private aRotina := {}
u_MA030ROT()
FWRestArea(aArea)
Return aRotina
/*/{Protheus.doc} User Function CRM980BFil
Ponto de Entrada que adiciona filtro do Browse na tela de clientes substituindo o MA030BRW
@type Function
@author Atilio
@since 15/10/2022
@see https://tdn.totvs.com/display/public/PROT/PE+CRM980BFil+Adiciona+filtro+no+browse+do+cadastro+de+clientes
/*/
User Function CRM980BFil()
Local aArea := FWGetArea()
Local cFiltro := ""
//Exemplo
//cFiltro := "SA1->A1_VEND == 'XXXXXXX'"
FWRestArea(aArea)
Return cFiltro
Obs.: Lembrando que os códigos individuais de cada User Function, devem ser revisados conforme a regra de negócio de cada empresa
Referências:
- TDN: Novo Cadastro de Clientes em MVC (com a lista de pontos antes e depois)
- Central de Atendimento TOTVS: Ponto de entrada MVC CRMA980
Bom pessoal, por hoje é só.
Abraços e até a próxima.