4D v15

Object Field data type

Página Inicial

 
4D v15
Object Field data type

Object Field data type  


 

 

A partir de 4D v15, um novo tipo  de campo Object é suportado pelo motor de banco de dados 4D.

Desde 4D v14, já se podia manejar objetos em seus aplicativos 4D mas apenas através da linguagem de programação (ver Objetos (Linguagem)). O tipo de campo Objeto lhe permite ir um passo adiante:

  • armazenar objetos no arquivo de dados,
  • adicionar, modificar ou eliminar de forma dinâmica atributos de objetos,
  • efetuar pesquisas de objetos por atributo,
  • importar/exportar valores de objetos, etc.

Nota de implementação: algumas funções não suportam atualmente os campos objeto (ver abaixo 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 atualizada para suportar campos Objeto. Em particular:

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

    Poderia ser interpretado como:
        
    - Produzir JSON a partir de todos os valores de campoObjeto na seleção atual da tabela
        
    - Produzir JSON usando o valor do registro atual de 'objectField' como um modelo

    4D se comportará como se descreveu no primeiro caso, já que essa é a situação mais comum..
  • Os comandos Old e Modified suportam campos Objeto.
  • [#cmd id="965"/] 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.

Entretanto, lembre que, por razones técnicas, alguns comandos não suportan campos Objeto. Estes comandos se listam abaixo

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: Ambiente Desenho

 
HISTÓRIA 

 
ARTICLE USAGE

4D v15 - Upgrades (edição R-release) ( 4D v15)

Parent of : Tipo de dados campo de de Objeto ( 4D v15)