Pragiva — Tecnologia na prática

Catálogo de personalizações: desligar um ponto de entrada sem recompilar

Catálogo de Personalizações (CFGA030): como desligar um ponto de entrada sem recompilar, o que Desabilitado e Retorno padrão fazem e o que não alcança.

Protheus Referência técnica 5 min de leitura

Assista o vídeo

Resposta rápida

Onde fica
Ambiente > Cadastros > Catálogo de Personalização, rotina CFGA030.
Como um PE entra na lista
sozinho, quando alguma rotina testa a existência dele com ExistBlock ou ExistTemplate, ou antes, pelo botão +Incluir.
O que dá para fazer
desabilitar ou fixar um retorno, para o ambiente todo ou por filial.
O que ele não alcança
validações, gatilhos, chamada direta com U_ e aplicação sem ambiente preparado.
Armadilha
o Retorno padrão é instrução AdvPL macroexecutada, e não um texto.
Consulta rápida7 seções

Um ponto de entrada novo foi para produção e o faturamento parou. Recompilar o repositório sem ele leva tempo e exige janela. O Catálogo de Personalizações resolve em um minuto: você desliga o ponto de entrada no Configurador, o padrão volta a rodar sem ele, e o fonte continua compilado para quando o problema for corrigido.

Se o conceito de ponto de entrada ainda é novo, comece por Ponto de entrada no Protheus: como o padrão te chama.

O cadastro acontece sozinho sempre que uma rotina, padrão ou customizada, verifica se um ponto de entrada existe com ExistBlock, ou um template com ExistTemplate. No banco, os registros criados assim trazem na descrição um texto como este:

TEXT
Automaticamente adicionado pelo sistema.-<data da inclusão>

Daí saem duas consequências práticas:

  • Um ponto de entrada que nunca rodou não aparece. Compilou o MT410TOK ontem e ninguém incluiu pedido desde então? Ele ainda não está na lista. Não é preciso esperar: a rotina permite antecipar o cadastro pelo botão +Incluir. Assim dá para deixar um ponto de entrada desabilitado antes de ele rodar pela primeira vez.
  • Chamada direta fica de fora. O catálogo só funciona quando a verificação e a chamada passam por ExistBlock(), ExistTemplate(), ExecBlock() e ExecTemplate(). Função chamada direto com U_ ou T_ não é contemplada.

Os campos do cadastro

O cadastro tem duas partes. O cabeçalho identifica a personalização:

CampoO que vai nele
FunçãoO nome do ponto de entrada ou do template, sem U_ nem T_
Tipo de Função1 - ExecBlock para ponto de entrada (User Function); 2 - Template Function para template
DescriçãoTexto livre. Nos registros automáticos, o sistema preenche com a data da inclusão

A documentação da TOTVS ainda fala em cadastrar só as 8 primeiras posições do nome. No banco, porém, o cadastro automático grava o nome completo: o TMA144BUT, ponto de entrada do padrão, aparece na tabela com os 9 caracteres. Antes de incluir um nome longo à mão, confira como os registros automáticos do seu ambiente o gravaram.

Os itens definem o comportamento, para todas as filiais ou para filiais específicas:

CampoO que decide
FilialEm branco, vale para todas; preenchida, vale para aquela filial
Situação1 - Habilitado: executa normalmente. 2 - Desabilitado: não executa, mesmo compilado. 3 - Retorno Padrão: não executa, e o Protheus devolve o resultado do campo Retorno padrão
Retorno padrãoInstrução AdvPL a ser macroexecutada. Só tem efeito quando a Situação é 3

Por filial: a filial logada tem prioridade

O sistema sempre prioriza o item da filial logada sobre o item de filial em branco. Isso resolve os três casos comuns:

  • Desligar em todas as filiais: uma linha, filial em branco, Situação 2.
  • Desligar numa filial só: uma linha com a filial, Situação 2.
  • Deixar ligado numa filial só: duas linhas. Uma com a filial em branco e Situação 2; outra com a filial desejada e Situação 1. Não é preciso cadastrar as demais filiais.

Desligar ou fixar o retorno

Com o MT410TOK, o ponto de entrada do OK do pedido de venda, a diferença fica clara.

Desabilitado tira a sua regra do caminho. O ponto de entrada não executa, mesmo compilado. É a escolha segura para “parou tudo, desliga”.

Retorno padrão é outra coisa: o Protheus não executa o seu código, mas devolve o resultado da instrução informada. No exemplo da documentação, o campo leva .T., e o ponto de entrada passa a devolver .T. sempre que é acionado.

Num ponto de entrada cujo retorno o padrão usa, esse valor passa a decidir a operação. No MT410TOK, o retorno é atribuído sem conferir o que o padrão já tinha decidido, como explica o artigo dele. Antes de fixar um retorno, leia como o padrão trata o retorno daquele ponto de entrada.

Para desabilitar:

  1. No Configurador, abra Ambiente > Cadastros > Catálogo de Personalização.
  2. Posicione no ponto de entrada e use Alterar.
  3. Na Situação, escolha 2 - Desabilitado e confirme.

A partir daí, o ponto de entrada fica desativado no ambiente, sem apagar nada do repositório.

O que o catálogo não alcança

O catálogo trata só de pontos de entrada e templates. Não influencia:

  • validações customizadas;
  • gatilhos;
  • os outros tipos de personalização.

E só tem efeito em aplicação com ambiente preparado: com login feito pelo usuário ou com RpcSetEnv. Fora disso, ele não tem efeito.

Pela mesma razão, a documentação avisa que os pontos de entrada SXALTERPATH e MSQUIT não seguem as regras do catálogo: o disparo deles pode ocorrer antes da abertura dos dicionários de dados.

Se a regra problemática mora num X3_VALID ou num gatilho, desligar o ponto de entrada vizinho não resolve. É preciso ir ao dicionário.

A armadilha de quem esquece o que desligou

Ao tentar executar uma customização desabilitada, o Protheus mostra a mensagem de que a função de usuário não está compilada no repositório. É a mesma cara de um fonte que nunca foi compilado. Quem não sabe que alguém desligou a função no catálogo perde tempo recompilando.

Por isso vale ter à mão a lista do que está fora da situação normal. Os dados do catálogo ficam nas tabelas XX6 (cabeçalho) e XX7 (itens por filial). As duas carregam a função e o tipo de função (1 ExecBlock, 2 Template Function), e é por esses dois campos que elas se ligam. Os registros automáticos nascem com XX7_STATUS = '1' e filial em branco, o que corresponde a 1 - Habilitado na tela. Esta consulta lista tudo o que tem situação diferente de '1':

Confira no seu ambienteSQL
SELECT XX6.XX6_CODFUN, XX6.XX6_TYPE, XX7.XX7_FILIAL, XX7.XX7_STATUS,
       XX7.XX7_DEFRET, XX6.XX6_DESC
  FROM XX6010 XX6
  JOIN XX7010 XX7
    ON XX7.XX7_CODFUN = XX6.XX6_CODFUN
   AND XX7.XX7_TYPE = XX6.XX6_TYPE
   AND XX7.D_E_L_E_T_ = ' '
 WHERE XX6.D_E_L_E_T_ = ' '
   AND XX7.XX7_STATUS <> '1'
 ORDER BY XX6.XX6_CODFUN, XX7.XX7_FILIAL

O 010 é o sufixo da empresa e muda de ambiente para ambiente. As colunas foram conferidas num ambiente com dicionário no banco. Se a consulta falhar no seu, confira a estrutura antes de concluir que o catálogo está vazio.

Rodar essa consulta antes de abrir chamado de “função não compilada” poupa uma recompilação.

Os seus pontos de entrada também ganham o interruptor

Se você cria pontos de entrada nas suas próprias rotinas, chame-os do mesmo jeito que o padrão chama os dele, testando a existência antes:

ADVPL / TLPP
// Na gravação do cadastro de motoristas (ZA1): um ponto de entrada da
// própria customização, com o mesmo interruptor dos pontos do padrão.
If ExistBlock("ZA1GRV")
    ExecBlock("ZA1GRV", .F., .F., {nOpc})
EndIf

Como a chamada passa por ExistBlock, o ZA1GRV entra no catálogo na primeira execução. Quem der suporte depois consegue desligá-lo pelo Configurador, sem mexer no seu fonte. Se a mesma rotina chamasse U_ZA1GRV() direto, o catálogo não teria como desligá-lo.

Referências

  1. TDNtdn.totvs.com

    TDN — Catálogo de Personalizações (CFGA030 - SIGACFG)
  2. TDNtdn.totvs.com

    TDN — Procedimentos de Utilização (CFGA030 - SIGACFG)
  3. Central de Atendimentocentraldeatendimento.totvs.com

    Central de Atendimento TOTVS — Desabilitar Customizações e Pontos de Entrada pelo Catálogo de Personalização
  4. TDNtdn.totvs.com

    TDN — ExecBlock, execução do ponto de entrada
  5. TDNtdn.totvs.com

    TDN — Macro Substituição

Continue por aqui