4D v15

Tipo de dados campo de de Objeto

Página Inicial

 
4D v15
Tipo de dados campo de de Objeto

Tipo de dados campo de de Objeto  


 

 

A partir de 4D v15, um novo tipo de campo objeto é suportada pelos dados do motor de banco de dados 4D.

Desde 4D v14, você pode manipular objetos em suas aplicações 4D, mas apenas através da linguagem (ver Objetos (Linguagem)). tipo de campo Objeto permite-lhe ir mais longe:

  • armazenar objetos no arquivo de dados,
  • adicionar, modificar ou excluir de forma dinamica atributos de objetos,
  • fazer pesquisas de objetos por atributo,
  • Os valores de importação / exportação de objetos, etc.

Nota de Execução: alguns recursos não suportam atualmente os campos objeto (veja o próximo parágrafo  Limitações atuais).

O tipo objeto permite definir campos sem esquema dinâmico. Estes campos objeto podem ser considerados como campos "definidos pelo usuário" ou "personalizados". Em 4D v15, agora tem que escolher entre os modelos de dados com ou sem esquema. Em ambos os casos, você pode executar pesquisas indexadas rápidas.

Observe também que os campos objeto podem simplificar os modelos de dados padrão. Por exemplo, para uma tabela "Contatos" convencional, apenas um campo de tipo objeto permite evitar a criação de dezenas de campos que representam todos os valores possíveis, a maioria dos quais não são usados em 90% dos casos. O modelo de informação em tempo real é criado somente se necessário.

O novo campo de tipo de objeto pode ser definido como qualquer tipo de dados, utilizando o Inspector no editor de estrutura:



Os campos objetos 4D armazenam pares atributo / valor de diferentes tipos, sem esquemas de dados predefinidos. A estrutura de dados armazenados não é necessariamente a mesmo entre os diferentes registos. Por exemplo, um campo objeto 
[Person]Address pode conter atributos diferentes, dependendo da cidade, país, etc.:

record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} 
<p>record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...}

A estrutura dos objetos 4D é baseada no princípio de pares "atributo / valor". A sintaxe destes objectos baseia-se na notação JSON, mas não a segue completamente:

  • Um nome de atributo é sempre um texto, como "Nome".
  • Um valor de atributo pode ser dos seguintes tipos:
    • número (Real, Inteiro, etc.)
    • texto
    • array (texto, real, inteiro longo, inteiro, booleano, objeto, ponteiro)
    • nulo
    • Booleano
    • ponteiro (armazenado como tal, avaliado usando o comando JSON Stringify  ou ao copiar)
    • data (formato "YYYY-MM-DDTHH:mm:ssZ" )
    • objeto (os objetos podem ser inseridos em vários níveis).
Aviso: Lembre-se que nomes de atributos são sensíveis a maiúsculas e minúsculas.

Campos de objeto podem ser tão grandes quanto 2 GB. Ao trabalhar com um registro que contém um campo Objeto, todo o objeto é carregado na memória. Da mesma maneira que para os campos do tipo Texto, Imagem ou BLOB, os campos objeto podem ser armazenados no arquivo de dados (com os registros ou não) ou fora do arquivo de dados; esta opção é descrita na seção
Armazenamento externo dos dados do Manual de Design.

Um campo objeto pode ser indexado (apenas opção Automática), o que significa que todos os caminhos de atributos são automaticamente indexados. Também pode ser Invisible ou ter o atributo Expor com o serviço 4D Mobile. Além disso, o campo de objeto não pode ser definido como único.


Use o comando 4D Objetos (Linguagem)  para gerenciar os campos  objeto. Use os comandos OB Get e OB SET para ler e gravar dados nos campos de tipo Objeto. Você também pode armazenar e ler arrays como atributos usando os comandos OB SET ARRAY e OB GET ARRAY.
 
Como campos de tipo de Objeto são baseados em texto, o conteúdo de um campo Objeto é exibida em um formulário 4D como padrão como texto e com formato JSON (veja o próximo parágrafo).

Nota: Para trabalhar com objetos JSON, você pode usar os comandos da
"JSON".

Como padrão, os campos objeto são representados como áreas de texto nos formulários 4D. Dentro destas áreas, os dados objeto deve ser undefined, ou devem ser formatados em texto JSON; caso contrário, um erro é retornado.

Por exemplo, se você definiu o campo [Rect]Desc como um campo objeto, você pode escrever:

 CREATE RECORD([Rect])
 <p>[Rect]Name:="Blue square"
 OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue")
 SAVE RECORD([Rect])

Quando o campo [Rect]Desc estiver incluído no seu formulário, os seguintes conteúdos são exibidos:

Você pode editar os valores que são exibidos diretamente no campo texto ou digitar dados objeto diretamente com a notação padrão; será formatado em JSON automaticamente quando pulsar a tecla [Tab]:



No entanto, a edição direta deve ser feita com cautela, já que os espaços fora de lugar, ou símbolos, irá resultar em um erro de análise JSON e não se salvam os dados editados:



Normalmente, ele é mais preciso para lidar com o conteúdo dos campos objeto através de comandos
Objetos (Linguagem) e JSON.

Todos os comandos do Objetos (Linguagem)  agora aceitam um campo objeto como o primeiro parâmetro (objeto).


Da mesma forma que objetos de linguagem padrão, os valores de campo objeto são manipulados pelos comandos do tema
Objetos (Linguagem). Por exemplo:

  // Defina um valor
 OB SET([Pessoas] Identity_OB;"Nome";$ firstName)
 OB SET([Pessoas] Identity_OB,"Last Name",$ lastName)
 
  // Obter um valor
 $ FirstNameOB=Get([Pessoas] Identity_OB;"Nome")
 $ ApelidoOB=Get([Pessoas] Identity_OB,"Last Name")


Os arrays também são suportados, por exemplo:

 ARRAY TEXT($arrGirls;3)</p><p>$arrGirls{1}:="Emma"
 $arrGirls{2}:="Susan"
 $arrGirls{3}:="Jamie"
 OB SET ARRAY([Persons]Children;"Girls";$arrGirls)

A linguagem 4D foi atualizado para suportar campos de objeto. Em particular:

  • Todos os comandos do Objetos (Linguagem) agora suportam campos de objetos como o primeiro parâmetro (objeto)
  • Um novo comando foi adicionado para lidar com pesquisas em campos objeto: [QUERY BY ATTRIBUTE. Este comando é detalhado em uma seção separada.
  • ComandosSELECTION TO ARRAY, SELECTION RANGE TO ARRAY e ARRAY TO SELECTION suportam campos Objeto através deARRAY OBJECT.
  • Comandos Selection to JSON e JSON TO SELECTION suportam campos de objetos, que é automaticamente convertido de e para JSON.
    Note, no entanto, que a seguinte expressão 4D é ambígua:
     Selection to JSON([aTable];objectField)

    Pode ser interpretado como:
        
    - Produzir JSON de todos os valores campoObjeto na seleção atual da tabela
        
    - Produzir JSON usando o valor de registro atual de 'objectField' como um modelo
        
    4D irá comportar-se como descrito no primeiro caso, já que é o caso mais utilizado.
  • Os Comandos Old e Modified suportam campos Objeto. 
  • SET FIELD VALUE NULL apaga o conteúdo dos campo Objeto. 
  • GET FIELD PROPERTIES agora pode devolver Is object.    
  • PROCESS 4D TAGS suporta campos Objeto apenas em  fórmulas 4D.

Note, porém, que, por razões técnicas, alguns comandos não suportam campos Objeto. Estes comandos estão listados na seção "Limitações atuais".

Os campos de objeto pode ser usado em fórmulas (usando o editor de fórmulas padrão ou o comando EXECUTE FORMULA).   No entanto, neste contexto, os campos de objectos podem ser manuseados apenas com os seguintes comandos:

Por exemplo, você pode executar a seguinte fórmula de pesquisa:

 OB Get([Rect]Desc;"color")="blue"

A maioria das características padrão de 4D suportam campos de tipo objeto. Mas algumas partes avançadas do aplicativo não está prontas para usar diretamente os campos objeto na versão atual. Estas peças são progressivamente atualizadas e estarão disponíveis em versões futuras.

As seguintes funções ou comandos suportam parcialmente  campos objeto através de fórmulas 4D:

Função/Comando
Editor de pesquisas
Editor de ordenação
Editor de importação/exportação
4D Write
4D Write Pro
4D View
4D Tags
PROCESS 4D TAGS

As seguintes funções e comandos 4D não admitem campos objeto:

Funções/Comandos
Editor de relatórios rápidos
Editor de etiquetas
SQL Data Definition Language (CREATE TABLE)
SQL Data Manipulation Language (SELECT, INSERT, UPDATE)
SQL EXPORT DATABASE e SQL EXPORT SELECTION
Gráficos
PHP
Plugin SDK
DISTINCT VALUES
RELATE ONE
RELATE MANY
ORDER BY
SCAN INDEX



Ver também 

QUERY BY ATTRIBUTE

 
PROPRIEDADES 

Produto: 4D
Tema: Modo Desenho

 
HISTÓRIA 

 
ARTICLE USAGE

4D v15 - Update (edição standard) ( 4D v15)

Inherited from : Object Field data type ( 4D v15)