Ajude o site desativando o bloqueador de anúncio
Cabeçalho

ADVPL - StaticCall e PTInternal bloqueadas

Autor: Eurai Criado: 06/10/2021 Atualizado: 13/11/2025 ADVPL
Postagem

PTInternal e StaticCall serão bloqueadas – O que muda nas customizações?

Recentemente recebi a informação de que as funções PTInternal e StaticCall serão bloqueadas para uso dos desenvolvedores. Se você utiliza essas funções nos seus fontes, é recomendado começar a substituição o quanto antes. Os trechos já existentes também precisarão ser reescritos. O motivo do bloqueio não foi informado.

A previsão é que essa mudança ocorra na versão 33 do sistema, com o binário HARPIA.

totvs-binario-harpia-staticcall-ptinternal

Eu utilizo ambas funções com frequência nos desenvolvimentos.

Quando utilizei o PTInternal:

  • Rotinas multithread para controle de mensagens no monitor.
  • Rotinas com threads em paralelo (vários appservers).
  • Rotinas single-thread demoradas.
  • Possivelmente surgirá uma nova função substituta (até 2021-10-05 não existia).
    • Nova função criada: FWMonitorMsg
    • Disponível a partir da release 33 ou lib 20211116 em releases inferiores.

Quando utilizei o StaticCall:

Observações importantes

  • ADVPL possui limitação de 10 caracteres para funções e variáveis.
  • Prefixo U_ consome 2 caracteres.
  • User Functions são globais, não podem existir nomes iguais nos primeiros 8 caracteres.
  • TLPP é relativamente recente.
  • TLPP não aceita MVC.

Funções de menu (aRotina), MVC ou não

  • Centralizar funções estáticas dentro do próprio fonte ao invés de usar U_ global.
  • Evita conflitos de nomes repetidos em fontes diferentes.
  • Exemplo:
    aAdd( aSinc, { "Marca", "StaticCall(ANYMKA01,ArmSend)", 0, 3, 0, NIL } )
    • 8 caracteres apenas.
    • Em User Function ficaria: U_ArmSend (10 caracteres).
    • Maior risco de conflito de nome.
  • Por que não chamar direto?
    aAdd( aRotina, { "Armazéns a Enviar", "ArmSend()", 0, 3, 0, NIL } )
    • A função não é encontrada (erro conhecido desde P10).
  • Impacta também grids (MSNewGetDados)
    • cFieldOK / cLinhaOK / cTudoOK
    • Necessário usar U_ e criatividade nos nomes.
    • Cuidado para não repetir nomes nos 8 primeiros caracteres.

Validações no SX3 / SX*

  • Se você executa static direto para evitar conflito de nome:
    • Reescrever usando U_ ou TLPP.

Variáveis static com controle de erro

  • Trechos que retornam variáveis static precisarão ser reescritos.
  • Exemplo:
    • GetError → 8 caracteres.
    • U_GetError → 10 caracteres.
    • Não pode existir outro GetError em outro fonte.
    • Opções: GetErro1, GetErro2, TLPP, ou classes.

Outra alternativa: manter apenas uma User Function com parâmetros

  • Parâmetros como cExec / nType / cParam.
  • Mas atenção: se a função roda em schedule/onstart, empresa e filial são enviadas (cEmp, cFil).

Geração de DanfeII por StaticCall

  • Não irá funcionar.
  • Muitos clientes geram DanfeII por customização usando StaticCall.
  • Também há casos de envio de PDF por e-mail ou integração.
  • Esses trechos precisarão ser reescritos.
  • Manter uma User Function global e o restante Static, executado via MenuDef.
  • Entre outras situações similares…

FIM

harpia

Gostou? Compartilhe com seus amigos e deixe um comentário! 😎

Um abraço, até a próxima!

ASSINE A NEWSLETTER

Cadastrando...

PIX uDesenv

PIX QR Code para depósito

Clique para doar

Parceiros

Tudo em ADVPL - Blog parceiro

Blog ADVPL