#include "Protheus.ch"
#include "FWMVCDEF.CH"
Static __LogExec := NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} CRMA980
Ponto de Entrada do Cadastro de Clientes (MVC)
@param Não há
@return Vários. Dependerá de qual PE está sendo executado.
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
User Function CRMA980() ///cXXX1,cXXX2,cXXX3,cXXX4,cXXX5,cXXX6
Local aParam := PARAMIXB
Local xRet := .T.
Local lIsGrid := .F.
Local nLinha := 0
Local nQtdLinhas := 0
Local cRotMVC := "CRMA980"
Local cIDPonto := ''
Local cIDModel := ''
Local cIDForm := ''
Local cEvento := ''
Local cCampoNIL
//-------------------------------------------------------------------
/*/{Protheus.doc} CRMA980
Ponto de Entrada do Cadastro de Clientes (MVC)
@param := ''
Local cConteudoNão há
@return := ''
Local cMsg := ''
Local cClasse := ''
Local oObj := NIL
If __LogExec == NIL
__LogExec := ApMsgYesNo("A geração do 'LOG de processamento' dos PE 'CRMA989' (MVC) será exibido em TELA ?" + CRLF + CRLF +;
Vários. Dependerá de qual PE está sendo executado.
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
User Function CRMA980() ///cXXX1,cXXX2,cXXX3,cXXX4,cXXX5,cXXX6
Local aParam := PARAMIXB
Local xRet := .T.
Local lIsGrid := .F.
Local nLinha := 0
Local nQtdLinhas := 0
Local cRotMVC 'SIM := TELA' + CRLF +;
"CRMA980"
Local cIDPonto := ''
Local cIDModel := ''
Local cIDForm := ''
Local cEvento := 'NÃO = CONSOLE do AppServer')
EndIf
If aParam <> NIL
Local cCampo oObj := ''
Local cConteudo := aParam[1]
''
Local cMsg cIDPonto := aParam[2]
''
Local oObj cIDModel := aParam[3]
lIsGrid NIL
If __LogTela == NIL
__LogTela := (Len(aParam) > 3)
If cIDPonto == 'FORMPRE'
cEvento := aParam[4]
ApMsgYesNo("A geração do 'LOG de processamento' dos PE 'CRMA989' (MVC) será exibido em TELA ?" + CRLF + CRLF +;
cCampo := aParam[5]
cConteudo 'SIM := If( ValType(aParam[6]) == 'C',;
TELA' + CRLF +;
"'" + aParam[6] + "'",; 'NÃO = CONSOLE do AppServer')
EndIf
If aParam <> NIL
oObj := aParam[1]
cIDPonto := aParam[2]
cIDModel If(:= ValType(aParam[63])
== 'N',;
lIsGrid := (Len(aParam) > 3)
If cIDPonto == 'FORMPRE'
cEvento := AllTrim(Str(aParam[64])),;
cCampo := aParam[5]
cConteudo := If( ValType(aParam[6]) == 'DC',;
DtoC("'" + aParam[6]) + "'",;
If( ValType(aParam[46]) == 'LN',;
AllTrim(Str(aParam[6])),;
If(aParam[4], '.T.', '.F.'),;
If( ValType(aParam[6]) == 'D',;
''))))
cIDForm := oObj:GetID()
DtoC(aParam[6]),;
ElseIf cIDPonto == 'FORMPOS'
cIDForm := oObj:GetID()
ElseIf cIDPonto == 'FORMCOMMITTTSPRE' .OR. cIDPonto == 'FORMCOMMITTTSPOS'
cConteudo := If( ValType(aParam[4]) == 'L',;
,;
If( aParam[4], '.T.', '.F.'),;
'')))
)
cIDForm EndIf
:= ShwParamoObj:GetID(aParam)
IfElseIf cIDPonto == 'MODELVLDACTIVEFORMPOS'
ApMsgInfo("ValidacIDForm se o Modelo do Cadastro de Clientes pode ou não ser exibido ao usuário (PE '" + cIDPonto + "')." + CRLF +;
:= oObj:GetID()
ElseIf cIDPonto == 'FORMCOMMITTTSPRE' .OR. cIDPonto == 'FORMCOMMITTTSPOS'
cConteudo "ID '" + cIDModel + "'")
:= If( ValType(aParam[4]) == 'L',;
If (xRet := ApMsgYesNo("Valida se a opção escolhida pelo usuário poderá abrir o Modelo da rotina." + CRLF +If( aParam[4], '.T.', '.F.'),;
'')
EndIf
"Continua ?")) ShwParam(aParam)
If cIDPonto == 'MODELVLDACTIVE'
ApMsgInfo("O PE '" + cIDPonto + "' doValida se o Modelo do Cadastro de Clientes pode ou não ser exibido ao usuário (PE '" + cRotMVCcIDPonto + "' retornará .T).")
+ CRLF +;
// Como a tela do Modelo será exibida ao usuário, então, por exemplo, pode-se customizar a sua exibição..."ID '" + cIDModel + "'")
If (xRet If:= ApMsgYesNo("DesejaValida se customizara oopção Modeloescolhida ?pelo -usuário IDpoderá '"abrir +o cIDModelModelo +da "'rotina.")
+ CRLF +;
ModifModel(oObj, cIDPonto, cIDModel)
EndIf
Else
"Continua ?"))
Help( ,, 'Help',, ApMsgInfo("O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .FT.", 1, 0 )
EndIf
ElseIf cIDPonto == 'MODELPRE'
// Como ApMsgInfo("Antes da alteração de qualquer campo do Modelo. (PE '" + cIDPonto + "')." + CRLF +;
a tela do Modelo será exibida ao usuário, então, por exemplo, pode-se customizar a sua exibição...
If ApMsgYesNo("Deseja customizar o Modelo ? - "ID '" + cIDModel + "'")
ElseIf cIDPonto == 'FORMPRE'
ApMsgInfo("Antes da alteração de qualquer campo do Formulário. (PE '" + cIDPonto + "' / Evento '" + cEvento + "' no campo '" + cCampo + "')." + CRLF +;
ModifModel(oObj, cIDPonto, cIDModel)
EndIf
Else
Help( ,, 'Help',, "IDO PE '" + cIDModelcIDPonto + "' - FormIDdo '" + cIDFormcRotMVC + "'")
retornará .F.", 1, 0 )
cMsg EndIf
:= "Execução do ('"ElseIf + cIDPonto +== "' / Evento '" + cEvento + "' no campo '" + cCampo + "'" + If(cEvento == "SETVALUE", " Conteúdo = " + cConteudo, "") + "MODELPRE'
ApMsgInfo("Antes da alteração de qualquer campo do Modelo. (PE '" + cIDPonto + "')." + CRLF +;
If (xRet := ApMsgYesNo(cMsg +"ID CRLF'" + 'ÉcIDModel permitido+ ?"'"))
ElseIf cIDPonto == 'FORMPRE'
ApMsgInfo("O Antes da alteração de qualquer campo do Formulário. (PE '" + cIDPonto + "' / Evento '" + cEvento + "' no docampo '" + cRotMVCcCampo + "')." + retornará .T.")CRLF +;
Else
"ID '" + cIDModel Help( ,, 'Help',, "O PE + "' - FormID '" + cIDForm + "'")
cMsg := "Execução do ('" + cIDPonto + "' / Evento '" + cEvento + "' no docampo '" + cRotMVCcCampo + "' retornará .F." + If(cEvento == "SETVALUE", 1," 0Conteúdo )
= " + cConteudo, "") + ")." + EndIf
CRLF
ElseIf cIDPonto == 'BUTTONBAR'
If (xRet := ApMsgInfoApMsgYesNo("AdicionandocMsg um+ botãoCRLF na+ barra'É de botões da rotina (PE '" + cIDPonto + "')." + CRLF +;
permitido ?'))
ApMsgInfo("O PE '" + cIDPonto + "' / Evento '" + cEvento + "ID' do '" + cIDModelcRotMVC + "' retornará .T.")
xRetElse
:= {{'Rotina Especifica',; Help( ,, 'Help',, "O PE '" + cIDPonto + "' / Evento '" + cEvento + "' do '" + cRotMVC + "' //Titulo para o botãoretornará .F.", 1, 0 )
EndIf
ElseIf cIDPonto == 'BUTTONBAR'
'SALVAR',; ApMsgInfo("Adicionando um botão na barra de botões da rotina (PE '" + cIDPonto + "')." + CRLF +;
"ID '" + cIDModel //Nome do Bitmap para exibição
+ "'")
xRet := {{'Rotina Especifica',; {|| Alert('Executou uma rotina específica!')},; //CodeBlock a ser executado
//Titulo para o botão
'Este botão executa uma rotina específica.'}} //ToolTip (Opcional)
'SALVAR',; ElseIf cIDPonto == 'FORMPOS'
cMsg := "Chamada na validação final do formulário (PE '" + cIDPonto + "')." + CRLF +;
//Nome do Bitmap para exibição
"ID '" + cIDModel + "' - FormID '" + cIDForm + "'" + CRLF
{|| Alert('Executou uma SetField(oObj, cIDPonto, cIDModel, cIDForm)
rotina específica!')},; //CodeBlock a ser executado
If cClasse == 'FWFORMGRID'
cMsg += 'ÉEste botão umexecuta FORMGRIDuma comrotina específica.'}} + Alltrim(Str(nQtdLinhas)) + '//ToolTip linha(sOpcional).'
+ CRLF +;
ElseIf cIDPonto == 'FORMPOS'
cMsg := "Chamada na validação final do formulário (PE 'Posicionado" na+ linhacIDPonto ' + Alltrim(Str(nLinha))"')." + CRLF +;
ElseIf cClasse == 'FWFORMFIELD'
"ID '" + cIDModel + "' - cMsgFormID '" += 'ÉcIDForm um+ FORMFIELD"'" + CRLF
EndIf SetField(oObj, cIDPonto, cIDModel, cIDForm)
If (xRet := ApMsgYesNo(cMsg + CRLF + 'Continua ?'))
ApMsgInfo("O PE '" + cIDPonto + "' do PE '" + cRotMVC + "' retornará .T.")
Else
Help( ,, 'Help',, "O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .F.", 1, 0 )
EndIf
ElseIf cIDPonto == 'MODELPOS'
cMsg := "Chamada na validação total do modelo (PE '" + cIDPonto + "')." + CRLF +;
"ID '" + cIDModel + "'" + CRLF
If (xRet := ApMsgYesNo(cMsg + CRLF + 'Continua ?'))
ApMsgInfo("O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .T.")
Else
Help( ,, 'Help',, "O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .F.", 1, 0 )
EndIf
ElseIf cIDPonto == 'FORMCOMMITTTSPRE'
ApMsgInfo("Chamada antes da gravação da tabela do formulário (PE '" + cIDPonto + "')." + CRLF +;
"ID " + cIDModel)
xRet := MyFTTSPre(oObj, cIDPonto, cIDModel, cConteudo)
ElseIf cIDPonto == 'FORMCOMMITTTSPOS'
ApMsgInfo("Chamada após a gravação da tabela do formulário (PE '" + cIDPonto + "')." + CRLF +;
"ID " + cIDModel)
xRet := MyFTTSPos(oObj, cIDPonto, cIDModel, cConteudo)
ElseIf cIDPonto == 'MODELCOMMITTTS'
ApMsgInfo("Chamada após a gravação total do modelo e dentro da transação (PE '" + cIDPonto + "')." + CRLF +;
"ID " + cIDModel)
xRet := MyMTTS(oObj, cIDPonto, cIDModel, cConteudo)
ElseIf cIDPonto == 'MODELCOMMITNTTS'
ApMsgInfo("Chamada após a gravação total do modelo e fora da transação (PE '" + cIDPonto + "')." + CRLF +;
"ID " + cIDModel)
xRet := MyMNTTS(oObj, cIDPonto, cIDModel, cConteudo)
__LogExecLogTela := NIL
ElseIf cIDPonto == 'MODELCANCEL'
If (xRet := ApMsgYesNo("O botão 'FECHAR' foi acionado no modelo do Cadastro de Clientes (PE '" + cIDPonto + "')." + CRLF +;
'Deseja realmente sair ?'))
ApMsgInfo("O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .T.")
__LogExecLogTela := NIL
Else
ApMsgInfo("O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .F.")
EndIf
EndIf
EndIf
Return xRet
//-------------------------------------------------------------------
/*/{Protheus.doc} ShwParam
Exibe os parâmetros do Ponto de Entrada do Cadastro de Clientes (MVC)
@param aParam
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function ShwParam(aParam)
Local nInd := 1
Local cAuxMsg := ''
Local cAuxMsg2 := ''
Local cSeparador := Repl('-', 40)
Local cMsg := Iif( !(aParam[2] $ 'FORMPRE//FORMPOS//FORMCOMMITTTSPRE//FORMCOMMITTTSPOS'),;
'OPERATION = ' + AllTrim(Str(aParam[01]:NOPERATION)) + CRLF,;
'')
For nInd := 1 to Len(aParam)
cAuxMsg := ''
cAuxMsg2 := ''
If ValType(aParam[nInd]) == 'U'
cAuxMsg2 := '= ' + ' NIL'
ElseIf ValType(aParam[nInd]) == 'O'
cAuxMsg2 := ' (OBJETO)'
ElseIf ValType(aParam[nInd]) == 'C'
cAuxMsg2 := "= '" + aParam[nInd] + "'"
ElseIf ValType(aParam[nInd]) == "N"
cAuxMsg2 := '= ' + AllTrim(Str(aParam[nInd]))
ElseIf ValType(aParam[nInd]) == "D"
cAuxMsg2 := '= ' + DtoC(aParam[nInd])
ElseIf ValType(aParam[nInd]) == 'L'
cAuxMsg2 := '= ' + If(aParam[4], '.T.', '.F.')
EndIf
If nInd == 2
cAuxMsg := 'IDPonto (Evento)'
ElseIf nInd == 3
cAuxMsg := 'IDModelo'
ElseIf (nInd == 4 .OR. nInd == 5 .OR. nInd == 6)
If aParam[2] == 'FORMPRE'
If nInd == 4
cAuxMsg := 'Evento'
ElseIf nInd == 5
cAuxMsg := 'Campo'
ElseIf nInd == 6 .AND. aParam[4] == 'SETVALUE'
cAuxMsg := 'Conteúdo'
EndIf
ElseIf (aParam[2] $ 'FORMCOMMITTTSPRE//FORMCOMMITTTSPOS') .AND. nInd == 6
cAuxMsg := 'Conteúdo'
EndIf
EndIf
cMsg += 'PARAMIXB[' + StrZero(nInd,2) + '] => ' + If(!Empty(cAuxMsg),cAuxMsg + ' ', '') + cAuxMsg2 + CRLF
Next nInd
If __LogExecLogTela
ApMsgInfo("Segue a descrição dos parâmetros recebidos no PE CRMA980 MVC conforme o 'IDPonto' que está sendo executado no momento:" +;
CRLF + CRLF +;
cMsg)
Else
ConOut(cMsg + cSeparador)
EndIf
Return NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} ModifModel
Customizações nas propriedades dos campos do Modelo do Cadastro de Clientes (MVC)
@param oObj, cIDPonto, cIDModel
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function ModifModel(oObj, cIDPonto, cIDModel)
If ApMsgYesNo("Vamos bloquear a digitação do campo 'A1_TELEX' no IDPonto '" + cIDPonto + "' - Modelo '" + cIDModel + "' ?")
// Bloqueando a edição de um campo no Modelo...
ApMsgInfo("Como a tela do Modelo será exibida ao usuário, vamos bloquear a edição do campo 'A1_TELEX'")
// MODELO -> SUBMODELO -> ESTRUTURA -> PROPRIEDADE -> BLOCO DE CÓDIGO -> X3_WHEN := .F.
oObj:GetModel("SA1MASTER"):GetStruct():SetProperty("A1_TELEX", MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN , ".F."))
//
EndIf
Return NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} SetField
Exemplo de preenchimento de um campo do Modelo do Cadastro de Clientes (MVC)
@param oObj, cIDPonto, cIDModel, cIDForm
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function SetField(oObj, cIDPonto, cIDModel, cIDForm)
If cIDModel == 'SA1MASTER'
If oObj:GetValue('A1_EST') $ 'AC/AL/AM/AP/BA/CE/DF/ES/GO/MA/MG/MS/MT/PA/PB/PE/PI/PR/RJ/RN/RO/RR/RS/SC/SE/SP/TO' .AND.;
Empty(oObj:GetValue('A1_PAIS'))
If ApMsgYesNo("Foi informado o campo 'A1_EST' com uma Unidade Federativa do Brasil, e não foi informado o código do país." + CRLF +;
"Então, vamos preencher o campo 'A1_PAIS' no IDPonto '" +;
cIDPonto + "' - Modelo '" + cIDModel + "' ?")
oObj:SetValue('A1_PAIS', '105')
EndIf
EndIf
EndIf
Return NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} MyFTTSPre
Função específica que será executada no momento FORM COMMIT TTS PRE
@param oObj, cIDPonto, cIDModel, cConteudo
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function MyFTTSPre(oObj, cIDPonto, cIDModel, cConteudo)
ApMsgInfo("Esta é a minha função específica que será executada no momento 'FORM COMMIT TTS PRE'.")
Return NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} MyFTTSPos
Função específica que será executada no momento FORM COMMIT TTS POS
@param oObj, cIDPonto, cIDModel, cConteudo
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function MyFTTSPos(oObj, cIDPonto, cIDModel, cConteudo)
ApMsgInfo("Esta é a minha função específica que será executada no momento 'FORM COMMIT TTS POS'.")
Return NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} MyMTTS
Função específica que será executada no momento MODEL COMMIT TTS
@param oObj, cIDPonto, cIDModel, cConteudo
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function MyMTTS(oObj, cIDPonto, cIDModel, cConteudo)
ApMsgInfo("Esta é a minha função específica que será executada no momento 'MODEL COMMIT TTS'.")
Return NIL
//-------------------------------------------------------------------
/*/{Protheus.doc} MyMNTTS
Função específica que será executada no momento MODEL COMMIT NÃO TTS
@param oObj, cIDPonto, cIDModel, cConteudo
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/*/
//-------------------------------------------------------------------
Static Function MyMNTTS(oObj, cIDPonto, cIDModel, cConteudo)
ApMsgInfo("Esta é a minha função específica que será executada no momento 'MODEL COMMIT NÃO TTS'.")
Return NIL |