Alteração na estrutura do Metadado de Campos de Tabelas SX3


A partir da versão 12.1 do Protheus, tendo em vista questões relacionadas a performance e melhorias no produto, alguns campos do Metadado de Campos de Tabelas (SX3) tiveram sua estrutura alterada. Novas instalações do produto a partir da versão 12.1 vão possuir essa nova estrutura no SX3, não tendo a opção de manter a tabela com a estrutura antiga. Clientes que possuem a versão 12 e vão realizar a migração para a versão 12.1 tem a opção de essa modificação ser facultativa, ficando a cargo do Administrador do sistema escolher se o produto vai aderir ou não a alteração. O Protheus possui APIs especificas para manipular os campos alterados. A manipulação direta desses campos (sem fazer uso da API) não é recomendada pela TOTVS e qualquer rotina ou customização que realiza esse procedimento está fora do padrão de desenvolvimento, por esse motivo devem ser revisadas para evitar impactos em versões futuras. Não é necessário aguardar uma mudança de versão para realizar essas revisões, visto que essas APIs sempre estiveram disponíveis no sistema. Para informações técnicas a respeito da mudança, leia abaixo. Alteração na estrutura dos campos X3_RESERV, X3_USADO e X3_OBRIGAT da tabela SX3 Estrutura antiga
Campo Tamanho Conteúdo
X3_OBRIGAT 1 Caractere binário
X3_USADO 15 Caracteres binários
X3_RESERV 2 Caracteres binários
Estrutura nova
Campo Tamanho Conteúdo
X3_OBRIGAT 8 Caractere
X3_USADO 120 Caractere
X3_RESERV 16 Caractere
Manipulação do conteúdo dos campos Já existem no sistema as APIs X3Reserv, X3Obrigat e X3Uso que são especificas para manipular esses três campos. Essas funções manipulam os conteúdos desses campos corretamente, transformando de binário para caractere e vice-versa corretamente. A manipulação direta dos campos X3_RESERV, X3_OBRIGAT e X3_USADO não é recomendada, pois qualquer modificação efetuada nesses campos precisa ser replicada em todo lugar que realiza a manipulação direta. Na versão 12.1 qualquer manipulação desse tipo nesses três campos poderá gerar erros e inconsistências no sistema, pois como esses campos tiveram o seu conteúdo modificado de binário para caractere, qualquer tentativa de transformar diretamente o conteúdo resultará em um conteúdo incorreto. Ao utilizar a função Bin2Str com qualquer um dos campos, como na seguinte instrução, resultará em erro na versão 12.1, pois o conteúdo do campo X3_OBRIGAT será caractere: (SubStr(Bin2Str(X3_OBRIGAT),1,1)=="x") Assim como a seguinte manipulação do campo X3_USADO também não será mais aceita na versão 12.1: ALLTRIM(UPPER(SX3->X3_USADO)) <> "€€€€€€€€€€€€€€ " A manipulação correta deverá ser feita conforme abaixo: X3Uso(SX3->X3_USADO) X3Reserv(SX3->X3_RESERV) X3Obrigat(NOME_DO_CAMPO) O Campo X3_USADO também é utilizado para determinar se um campo é chave ou se um campo é alterável. Para essas utilizações foram criadas as funções abaixo: X3Chave(SX3->X3_USADO) X3Alteravel(SX3->X3_USADO) ATENÇÃO: A função X3Obrigat() deverá receber o nome do campo da SX3 e não é necessário estar previamente posicionado, a própria função faz o seek e posiciona a SX3 de acordo com o nome do campo recebido. As funções X3Uso(), X3Reserv(), X3Chave() e X3Alteravel() deverão receber o conteúdo dos respectivos campos a serem avaliados, sendo necessário posicionar a SX3 previamente.