4D v15

Tipo de campo Objeto

Inicio

 
4D v15
Tipo de campo Objeto

Tipo de campo Objeto  


 

 

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:

  // Definir un valor
 OB SET([Persons]Identity_OB;"First Name";$firstName)
 OB SET([Persons]Identity_OB;"Last Name";$lastName)
 
  // Obtener un valor
 $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:

  • Todos los comandos del tema Objetos (Lenguaje) ahora soportan campos objeto como primer parámetro (objeto)
  • Un nuevo comando se ha añadido para manejar las búsquedas en campos Objeto: QUERY BY ATTRIBUTE. Este comando se detalla en una sección separada.
  • Los comandos SELECTION TO ARRAY, SELECTION RANGE TO ARRAY y ARRAY TO SELECTION soportan campos Objeto por medio de ARRAY OBJECT.
  • Los comandos Selection to JSON y JSON TO SELECTION soportan campos de objeto, que se convierten de forma automática desde y hacia JSON.
    Note sin embargo, que la siguiente expresión 4D es ambigua:
     Selection to JSON([aTable];objectField)

    podría interpretarse como:
    - producir JSON a partir de todos los valores de campoObjeto en la selección actual de la tabla
    - producir JSON utilizando el valor de registro actual de 'objectField' como una plantilla
    4D se comportará como se describió en el primer caso, ya que es el caso más comúnmente utilizado.
  • Los comandos Old y Modified soportan campos Objeto.
  • SET FIELD VALUE NULL borra el contenido de los campo objeto. 
  • GET FIELD PROPERTIES ahora puede devolver Is object.
  • PROCESS 4D TAGS soporta campos objeto en fórmulas 4D únicamente.

Tenga en cuenta sin embargo que, por razones técnicas, algunos comandos no soportan campos Objeto. Estos comandos se listan en la siguiente sección.

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:

Funciones/Comandos
Editor de informes rápidos
Editor de etiquetas
Gráficos
PHP
Plugin SDK
SQL Data Definition Language (CREATE TABLE)
SQL Data Manipulation Language (SELECT, INSERT, UPDATE)
SQL EXPORT DATABASE y SQL EXPORT SELECTION
DISTINCT VALUES
RELATE ONE
RELATE MANY
ORDER BY
SCAN INDEX



Ver también 

QUERY BY ATTRIBUTE

 
PROPIEDADES 

Producto: 4D
Tema: Modo Diseño

 
HISTORIA 

 
ARTICLE USAGE

4D v15 - Actualización (edición R-release) ( 4D v15)

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