Árvore de páginas


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

MV_MVCSA1

05. RETORNO

RetornoTipoDescriçãoObrigatório
xRetVáriosO 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