Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Produto:

Solucoes_totvs_cross
SolucaoCrossTOTVS Backoffice

Linha de Produto:

Linhas_totvs
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoBackoffice

Módulo:SIGACRM - Customer Relationship Management
Função:FATN600  Funções Auxiliares da Proposta ComercialCRMA980 - 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

Ponto Pontos de Entrada executado padrões MVC executados pela rotina do Cadastro de Clientes (MVC).

...

Consulte o exemplo abaixo.

04. PARÂMETROS

Não há.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

...

Totvs custom tabs box
tabsExemplo 01
idsExemplo01
Totvs custom tabs box items
defaultyes
referenciaExemplo01

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.


Bloco de código
linenumberstrue
#include "Protheus.ch"
#include "FWMVCDEF.CH"  

Static __LogExecLogTela    := 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 __LogExecLogTela == NIL
    __LogExecLogTela   := 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)
        __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

...