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

Blog Advpl - Share knowledge

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

16 de novembro de 2014 Configurador Dicas Protheus12 0

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.

 

Deixe uma resposta