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 objetopermite definircampos semesquema dinâmico.Estes camposobjeto podem ser considerados como campos "definidos pelo usuário" ou "personalizados". Em 4Dv15,agoratem que escolher entreos modelos de dadoscom ou semesquema.Em ambos os casos, você pode executarpesquisasindexadas rápidas.
Observe também queos campos objetopodem simplificar os modelos de dadospadrão.Por exemplo, parauma tabela "Contatos"convencional, apenas umcampo de tipo objetopermite evitar a criação dedezenas decampos que representamtodos os valores possíveis,a maioria dos quaisnãosão usados em90% dos casos.O modelo de informaçãoem tempo realé criadosomente 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.:
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:
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 comandosObjetos (Linguagem) e JSON.
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 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.
Oscampos de objetopode ser usado emfórmulas(usando o editor defórmulas padrãoou o comandoEXECUTE FORMULA). No entanto,neste contexto,oscamposde objectospodemsermanuseados apenascom osseguintes comandos:
A maioria dascaracterísticas padrão de 4D suportam camposde tipoobjeto.Masalgumas partesavançadas doaplicativonãoestá prontas para usardiretamente os campos objetona versãoatual.Estas peças sãoprogressivamente atualizadase estarão disponíveisem versões futuras.