Páginas filhas
  • Alteração na estrutura do Metadado de Campos de Tabelas SX3

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Definição da versão onde as alterações serão necessárias.

A partir da versão 12.1.7 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.7 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.7 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.

...

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.7 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.7, pois o conteúdo do campo X3_OBRIGAT será caractere:

 (SubStr(Bin2Str(X3_OBRIGAT),1,1)=="x")

 

 

A manipulação correta do X3_OBRIGAT é feita utilizando a API:

X3Obrigat(X3_CAMPO)

 

 

Assim como a seguinte manipulação do campo X3_USADO também não será mais aceita na versão 12.1.7: 

ALLTRIM(UPPER(SX3->X3_USADO)) <> "€€€€€€€€€€€€€€ " 

 

A manipulação correta do X3_USADO é feita utilizando a API:

 

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.X3Uso(X3_USADO)