01. DADOS GERAIS
Produto: | TOTVS Backoffice |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice |
Módulo: | SIGACRM - Customer Relationship Management |
Função: | CRMA980 - Cadastro de Clientes (MVC) |
Abrangências: | Microsiga Protheus 12 |
Versões: | Microsiga Protheus 12 |
Compatível Países: | Todos |
Sistemas Operacionais: | Todos |
Compatível com as Bases de Dados: | Todos |
Nível de Acesso: | Nível 1 (Acesso Clientes) |
Idiomas: | Todos |
02. DESCRIÇÃO
Pontos de Entrada padrões MVC executados pela rotina do Cadastro de Clientes (MVC).
03. SINTAXE
Consulte o exemplo abaixo.
04. PARÂMETROS
05. RETORNO
Retorno | Tipo | Descrição | Obrigatório |
---|---|---|---|
xRet | Vários | O retorno do Ponto de Entrada CRMA980 irá depender de qual ID estará sendo executado no momento. | Não |
06. EXEMPLOS
Verifique o modelo disponibilizado, e adéque-o a sua necessidade de execução:
Este é o exemplo básico para a montagem do seu ponto de entrada.
Da forma como este exemplo básico foi construído, você poderá baixá-lo e compilá-lo em seu ambiente. Com isso, você conseguirá interagir com a execução de cada um dos Pontos de Entrada padrões MVC do Cadastro de Clientes. Inclusive, o exemplo abaixo lhe proporcionará a geração de um LOG referente à execução de cada um destes Pontos de Entrada padrões MVC do Cadastro de Clientes.
#include "Protheus.ch" #include "FWMVCDEF.CH" Static __LogTela := 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 cCampo := '' Local cConteudo := '' Local cMsg := '' Local oObj := NIL If __LogTela == NIL __LogTela := ApMsgYesNo("A geração do 'LOG de processamento' dos PE 'CRMA989' (MVC) será exibido em TELA ?" + CRLF + CRLF +; 'SIM = TELA' + CRLF +; 'NÃO = CONSOLE do AppServer') EndIf If aParam <> NIL oObj := aParam[1] cIDPonto := aParam[2] cIDModel := aParam[3] lIsGrid := (Len(aParam) > 3) If cIDPonto == 'FORMPRE' cEvento := aParam[4] cCampo := aParam[5] cConteudo := If( ValType(aParam[6]) == 'C',; "'" + aParam[6] + "'",; If( ValType(aParam[6]) == 'N',; AllTrim(Str(aParam[6])),; If( ValType(aParam[6]) == 'D',; DtoC(aParam[6]),; If(ValType(aParam[4]) == 'L',; If(aParam[4], '.T.', '.F.'),; '')))) cIDForm := oObj:GetID() ElseIf cIDPonto == 'FORMPOS' cIDForm := oObj:GetID() ElseIf cIDPonto == 'FORMCOMMITTTSPRE' .OR. cIDPonto == 'FORMCOMMITTTSPOS' cConteudo := If( ValType(aParam[4]) == 'L',; If( aParam[4], '.T.', '.F.'),; '') EndIf ShwParam(aParam) If cIDPonto == 'MODELVLDACTIVE' ApMsgInfo("Valida se o Modelo do Cadastro de Clientes pode ou não ser exibido ao usuário (PE '" + cIDPonto + "')." + CRLF +; "ID '" + cIDModel + "'") If (xRet := ApMsgYesNo("Valida se a opção escolhida pelo usuário poderá abrir o Modelo da rotina." + CRLF +; "Continua ?")) ApMsgInfo("O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .T.") // Como 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 + "'") ModifModel(oObj, cIDPonto, cIDModel) EndIf Else Help( ,, 'Help',, "O PE '" + cIDPonto + "' do '" + cRotMVC + "' retornará .F.", 1, 0 ) EndIf ElseIf cIDPonto == 'MODELPRE' ApMsgInfo("Antes da alteração de qualquer campo do Modelo. (PE '" + cIDPonto + "')." + CRLF +; "ID '" + cIDModel + "'") ElseIf cIDPonto == 'FORMPRE' ApMsgInfo("Antes da alteração de qualquer campo do Formulário. (PE '" + cIDPonto + "' / Evento '" + cEvento + "' no campo '" + cCampo + "')." + CRLF +; "ID '" + cIDModel + "' - FormID '" + cIDForm + "'") cMsg := "Execução do ('" + cIDPonto + "' / Evento '" + cEvento + "' no campo '" + cCampo + "'" + If(cEvento == "SETVALUE", " Conteúdo = " + cConteudo, "") + ")." + CRLF If (xRet := ApMsgYesNo(cMsg + CRLF + 'É permitido ?')) ApMsgInfo("O PE '" + cIDPonto + "' / Evento '" + cEvento + "' do '" + cRotMVC + "' retornará .T.") Else Help( ,, 'Help',, "O PE '" + cIDPonto + "' / Evento '" + cEvento + "' do '" + cRotMVC + "' retornará .F.", 1, 0 ) EndIf ElseIf cIDPonto == 'BUTTONBAR' ApMsgInfo("Adicionando um botão na barra de botões da rotina (PE '" + cIDPonto + "')." + CRLF +; "ID '" + cIDModel + "'") xRet := {{'Rotina Especifica',; //Titulo para o botão 'SALVAR',; //Nome do Bitmap para exibição {|| Alert('Executou uma rotina específica!')},; //CodeBlock a ser executado 'Este botão executa uma rotina específica.'}} //ToolTip (Opcional) ElseIf cIDPonto == 'FORMPOS' cMsg := "Chamada na validação final do formulário (PE '" + cIDPonto + "')." + CRLF +; "ID '" + cIDModel + "' - FormID '" + cIDForm + "'" + CRLF 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) __LogTela := 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.") __LogTela := 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 __LogTela 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
07. DEMAIS INFORMAÇÕES
Consulte em MATA030 - Cadastro de Clientes - Descontinuada em 04/04/22.
08. ASSUNTOS RELACIONADOS
- ADVPL utilizando MVC
- DT Novo Fonte de Cadastro de Clientes em MVC
- Clientes (MATA030 - SIGAFAT)
- Pontos de Entrada Nativos do MVC
- Pontos de Entrada para fontes Advpl desenvolvidos utilizando o conceito MVC
- Web Services com o ERP Microsiga Protheus
- Manual ADvPl utilizando o MVC
- FWRestModel - API RESTful dos modelos de dados do Protheus