A partir de 4D v15, un nuevo tipo de campo Object es soportado por el motor de base de datos 4D.
Desde 4D v14, usted podía manejar objetos en sus aplicaciones 4D pero sólo a través del lenguaje (ver Objetos (Lenguaje)). El tipo de campo Objeto le permite ir más allá:
- almacenar objetos en el archivo de datos,
- añadir, modificar o eliminar de forma dinámica atributos de objetos,
- efectuar búsquedas de objetos por atributo,
- importar/exportar valores de objetos, etc.
Nota de implementación: algunas funciones no soportan actualmente los campos objeto (ver el siguiente párrafo Limitaciones actuales).
El tipo objeto permite definir campos sin esquema dinámico. Estos campos objeto pueden ser considerados como campos "definidos por el usuario" o "personalizados". En 4D v15, ahora tiene que elegir entre los modelos de datos con o sin esquema. En ambos casos, puede ejecutar búsquedas indexadas rápidas.
También tenga en cuenta que los campos objeto pueden simplificar los modelos de datos estándar. Por ejemplo, para una tabla "Contacts" convencional, un solo campo de tipo objeto permite evitar la creación de decenas de campos que representan todos los valores posibles, mayoría de los cuales no se utilizan en el 90% de los casos. Se crea el modelo de información sobre la marcha sólo si es necesario.
El nuevo tipo de campo Objeto se puede definir como cualquier otro tipo de datos, utilizando el Inspector del editor de estructura:

Los campos objeto 4D almacenan pares atributo/valor de diferente tipo, sin esquemas de datos predefinidos. La estructura de datos almacenada no es necesariamente la misma entre los diferentes registros. Por ejemplo, un campo Objeto [Person]Address puede contener diferentes atributos dependiendo de la ciudad, el país, etc.:
record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...}
record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...}
La estructura de los objetos 4D se basa en el principio de pares "atributo/valor". La sintaxis de estos objetos se basa en la notación JSON, pero no la sigue completamente:
- Un nombre de atributo es siempre un texto, por ejemplo "Nombre".
- Un valor de atributo puede ser de los siguientes tipos:
- número (Real, Entero, etc.)
- texto
- array (texto, real, entero largo, entero, booleano, objeto, puntero)
- null
- Booleano
- puntero (almacenado como tal, evaluado utilizando el comando JSON Stringify o al copiar),
- fecha (formato "YYYY-MM-DDTHH:mm:ssZ" )
- objeto (los objetos se pueden anidar en varios niveles).
Advertencia: recuerde que los nombres de los atributos son sensibles a las mayúsculas y minúsculas.
Un campo Objeto puede ser tan grande como 2 GB. Cuando se trabaja con un registro que contiene un campo Objeto, el objeto completo se carga en memoria. Al igual que para los campos de tipo Texto, Imagen o BLOB, los campos objeto pueden ser almacenados en el archivo de datos (con los registros o no), o fuera del archivo de datos; esta opción se describe en la sección Almacenamiento externo de los datos del manual de Diseño.
Un campo objeto puede ser indexado (opción Automática únicamente), lo que significa que todas la rutas de atributos se indexan automáticamente. También puede ser Invisible o o tener el atributo Exponer con el servicio 4D Mobile. Por otra parte, un campo Objeto no se puede establecer como Único.
Utilice los comandos 4D Objetos (Lenguaje) para gestionar los campos objeto. Utilice los comandos OB Get y OB SET para leer y escribir datos en los campos de tipo Objeto. También puede almacenar y leer arrays como atributos utilizando los comandos OB SET ARRAY y OB GET ARRAY.
Como los campos de tipo Objeto se basan en texto, el contenido de un campo Objeto se muestra en un formulario 4D por defecto como texto y con formato JSON (ver el siguiente párrafo).
Nota: para trabajar con objetos JSON, puede utilizar los comandos del tema "JSON".
De forma predeterminada, los campos objeto se representan como áreas de texto en los formularios 4D. Dentro de estas áreas, los datos objeto deben ser undefined, o formateados en texto JSON; de lo contrario se devuelve un error.
Por ejemplo, si ha definido el campo [Rect]Desc como un campo Objeto, puede escribir:
CREATE RECORD([Rect])
<p>[Rect]Name:="Blue square"
OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue")
SAVE RECORD([Rect])
Cuando el campo [Rect]Desc se incluye en su formulario, se mostrarán los siguientes contenidos:

Puede editar los valores que se muestran directamente en el campo texto o introducir datos objeto directamente con la notación objeto estándar; será formateado en JSON automáticamente al pulsar la tecla
[Tab]:

Sin embargo, la edición directa debe realizarse con precaución ya que los espacios fuera de lugar o símbolos darán lugar a un error de análisis JSON y no se guardarán los datos editados:

Por lo general, es más preciso para manejar el contenido de los campos objeto a través de los comandos Objetos (Lenguaje) y JSON.
Todos los comandos del tema Objetos (Lenguaje) ahora aceptan un campo objeto como primer parámetro (objeto).
Al igual que los objetos de lenguaje estándar, los valores de los campos objeto se manejan mediante los comandos del tema Objetos (Lenguaje). Por ejemplo:
OB SET([Persons]Identity_OB;"First Name";$firstName)
OB SET([Persons]Identity_OB;"Last Name";$lastName)
$firstName:=OB Get([Persons]Identity_OB;"First Name")
$lastName:=OB Get([Persons]Identity_OB;"Last Name")
Los arrays también son soportados, por ejemplo:
ARRAY TEXT($arrGirls;3)
$arrGirls{1}:="Emma"
$arrGirls{2}:="Susan"
$arrGirls{3}:="Jamie"
OB SET ARRAY([Persons]Children;"Girls";$arrGirls)

El lenguaje 4D ha sido actualizado para soportar campos Objeto. En particular:
Tenga en cuenta sin embargo que, por razones técnicas, algunos comandos no soportan campos Objeto. Estos comandos se listan en la sección "Limitaciones actuales".
Los campos objeto pueden ser utilizados en las fórmulas (con ayuda del editor de fórmulas estándar o el comando EXECUTE FORMULA). Sin embargo, en este contexto, los campos objeto pueden ser manejados únicamente por intermedio de los siguientes comandos:
Por ejemplo, puede ejecutar la siguiente fórmula de búsqueda:
OB Get([Rect]Desc;"color")="blue"
La mayor parte de las funcionalidades estándar de 4D soportan campos de tipo objeto. Sin embargo, algunas partes avanzadas de la aplicación no están listas para utilizar directamente los campos objeto en la versión actual. Estas partes se actualizarán progresivamente y estarán disponibles en próximas versiones.
Las siguientes funciones o comandos soportan parcialmente campos objeto a través de fórmulas 4D:
Función/Comando |
Editor de búsquedas |
Editor de ordenación |
Editor de importación/exportación (soporte automático para el formato 4D Application, necesita utilizar formularios para los formatos texto) |
4D Write |
4D Write Pro |
4D View |
4D Tags |
PROCESS 4D TAGS |
Las siguientes funciones y comandos 4D no admiten campos objeto: