A partir de4Dv15,um novo tipo decampo objetoé suportada pelosdados do motorde banco de dados4D.
Desde4Dv14, você podemanipular objetosem suasaplicações 4D, mas apenasatravés da linguagem(ver Objetos (Linguagem)).O tipo de campo Objeto permite-lheir mais longe:
armazenar objetosno arquivo de dados,
adicionar, modificarou excluir de forma dinamica atributos de objetos,
fazerpesquisas de objetos poratributo,
Os valoresde importação / exportaçãode objetos, etc.
Nota de Execução:alguns recursos nãosuportam atualmenteos campos objeto(veja o próximo parágrafoLimitaçõ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.
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.
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.