Bom dia Galera,
Poucos seguem a boa prática de criar funções USER, com no minimo 8 caracteres,sabendo que de acordo com a especificação da linguagem AdvPL, uma USER FUNCTION é identificada por seus 10 primeiros caracteres, por exemplo:
A <User Function DDDFAT06A> será traduzida pelo pré-compilador como: <U_DDDFAT06A>, onde o 'A' se perde, por ser o 11º caractere, devido ao limite de tamanho de nome.
U
|
_
|
D
|
D
|
D
|
F
|
A
|
T
|
0
|
6
|
A
|
Sabendo deste limite para nomes de funções USER, existe um pequeno 'bug' na validação utilizada pela Totvs para identificar/definir se uma função é 'improper function use' ou não.
Utilizando a AxCadastro('NOMETABELA') pelo campo formulas, a seguinte mensagem será retornada:
Mas se utilizarmos um recurso, onde burlamos a validação será possível a execução!!
A solução é:
Para toda função com tamanho de 10 caracteres ou mais e que for acusada de 'improper' basta adicionar o 11º caractere, por exemplo em uma chamada a AxCadastro('NOMETABELA') seria adicionado o X, ficando a chamada como AxCadastroX('TABELA') burlando assim a validação de ‘improper functions'.
Obs.:
Isso não será valido para funções USER FUNCTIONS (Funções Customizadas) com nome menor que 10 caracteres, pois a mesma não será encontrada no RPO e será retornada mensagem informando que a função não existe no repositório.
Espero ter ajudado!
Nenhum comentário:
Postar um comentário