Ab 4D v15 wird in der 4D Datenbank Engine der neue Feldtyp Objekt unterstützt.
Seit 4D v14 können Sie bereits Objekte in Ihren 4D Anwendungen verwalten, jedoch nur per Programmierung (siehe Objekte (Sprache)). Mit dem Datenfeldtyp Objekt können Sie jetzt folgendes ausführen:
- Objekte in der Datendatei speichern
- Attribute von Objekten dynamisch hinzufügen, ändern oder entfernen
- Objekte nach Attributen suchen
- Objektwerte, etc. importieren/exportieren
Hinweis zur Implementierung: Einige Funktionalitäten werden derzeit noch nicht mit Datenfeldern vom Typ Objekt unterstützt (siehe unten Liste im Abschnitt Aktuelle Einschränkungen).
Mit Datenfeldern vom Typ Objekt lassen sich dynamische Felder ohne Schema definieren, d.h. sie sind sozusagen benutzerdefinierte bzw. eigene Felder. In 4D v15 können Sie im Datenmodell jetzt zwischen Feld mit bzw. ohne Schema wählen. Beide Fälle erlauben rasche indizierte Suchen.
Darüberhinaus können Objektfelder standardmäßige Datenmodelle vereinfachen. So sorgt z.B. ein Objektfeld in einer klassischen Tabelle "Kontakte" dafür, dass nicht dutzende Felder mit allen möglichen Werten angelegt werden - und in 90% der Fälle meist unbenutzt bleiben. Das Informationsmodell wird von Fall zu Fall on-the-fly erstellt.
Der neue Datenfeldtyp Objekt lässt sich wie jeder andere Datentyp im Inspektorfenster des Struktureditors setzen:

4D Objektfelder speichern verschiedene Arten von Eigenschaft/Wert Paaren ohne vordefiniertes Datenschema. Die gespeicherte Datenstruktur zwischen verschiedenen Datensätzen ist nicht zwingend dieselbe. So kann z.B. ein Objektfeld [Person]Adresse je nach Stadt, Land, etc. verschiedene Eigenschaften haben:
record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...}
record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...}
Die Struktur von 4D Objekten basiert auf dem klassischen Prinzip "Eigenschaft/Wert" Paare. Die Syntax dieser Objekte basiert auf einer JSON Notation, folgt ihr aber nicht komplett:
- Eine Eigenschaft Name ist immer ein Text, z.B. "Name".
- Eine Eigenschaft Wert kann von folgenden Typ haben:
- Zahl (Zahl, Ganzzahl, etc.)
- Text
- Array (Text, Zahl, Lange Ganzzahl, Ganzzahl, Boolean, Objekt, Zeiger)
- Null
- Boolean
- Zeiger (als solcher gespeichert, wird beim Verwenden der Funktion JSON Stringify oder beim Kopieren bewertet),
- Datum (Iso-Format "YYYY-MM-DDTHH:mm:ssZ")
- Objekt (Objekte können in mehrere Stufen verschachtelt sein)
Warnung: Beachten Sie, dass Namen von Eigenschaften zwischen Klein- und Großschreibung unterscheiden.
Ein Objektfeld kann bis zu 2 Gigabyte groß sein. Arbeiten Sie mit einem Datensatz, der ein Objektfeld enthält, wird das gesamte Objekt in den Speicher geladen. Objektfelder lassen sich wie Felder vom Typ Text, Bild oder BLOB in der Datendatei speichern (innerhalb oder außerhalb des Datensatzes) oder außerhalb der Datendatei; weitere Informationen dazu finden Sie im Abschnitt Daten extern speichern des Handbuchs 4D Designmodus.
Ein Objektfeld kann indiziert sein (nur Option Automatisch), d.h. alle Attributpfade sind automatisch indiziert. Es kann auch Unsichtbar sein oder die Option Mit 4D Mobile Service veröffentlichen haben. Dagegen ist die Eigenschaft Einmalig nicht möglich.
Sie verwenden Befehle aus dem Kapitel Objekte (Sprache) zum Verwalten von Objektfeldern. Mit den Befehlen OB Get und OB SET lesen Sie Daten aus und schreiben Daten in Objektfelder. Über die Befehle OB SET ARRAY und OB GET ARRAY können Sie Arrays auch als Eigenschaften speichern und lesen.
Da Objektfelder auf Text basieren, wird der Inhalt eines Objektfeldes in einem 4D Formular standardmäßig als Text angezeigt und in JSON formatiert (siehe nächster Abschnitt).
Hinweis: Zum Arbeiten mit JSON Objekten können Sie die Befehle aus dem Kapitel "JSON" verwenden.
Objektfelder werden standardmäßig als Textfelder in 4D Formularen angezeigt. In diesen Bereichen müssen Objektdaten entweder undefiniert oder als JSON Text definiert sein, andernfalls wird ein Fehler zurückgegeben.
Haben Sie z.B. das Feld [Rect]Desc als Objektfeld definiert, können Sie schreiben:
Wird das [Rect]Desc Feld in Ihr Formular eingebunden, erscheint folgender Inhalt:

Sie können angezeigte Werte direkt im Textfeld anzeigen oder Objektdaten direkt mit der standardmäßigen Objekt Notation eingeben. Drücken Sie die Tabulatortaste, werden sie direkt in JSON formatiert:

Machen Sie direkte Eingaben jedoch mit Bedacht, da fehlende oder falsch gesetzte Zeichen in JSON zu einem Fehler beim Parsen führt und die bearbeiteten Daten nicht gesichert werden:

Es ist in der Regel präziser, Inhalt von Objektfeldern über Befehle der Kapitel Objekte (Sprache) und JSON zu verwalten.
Alle Befehle im Kapitel Objekte (Sprache) akzeptieren jetzt als ersten Parameter ein Objektfeld (Objekt).
Werte von Objektfeldern werden wie standardmäßige Objekte der Programmiersprache über Befehle aus dem Kapitel Objekte (Sprache) verwaltet. Zum Beispiel:
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")
Arrays werden ebenfalls unterstützt, zum Beispiel:
ARRAY TEXT($arrGirls;3)
$arrGirls{1}:="Emma"
$arrGirls{2}:="Susan"
$arrGirls{3}:="Jamie"
OB SET ARRAY([Persons]Children;"Girls";$arrGirls)

Die 4D Programmiersprache wurde entsprechend angepasst, um Objektfelder zu unterstützen:
Beachten Sie jedoch, dass bestimmte Befehle aus technischen Gründen keine Objektfelder unterstützen. Die Liste dieser Befehle finden Sie im nachfolgenden Abschnitt.
Objektfelder lassen sich in Formeln verwenden. Dazu verwenden Sie den standardmäßigen Formeleditor oder den Befehl EXECUTE FORMULA. In diesem Kontext lassen sich Objektfelder dann aber nur über folgende Funktionen verwalten:
Sie können z.B. folgende Suchformel ausführen:
OB Get([Rect]Desc;"color")="blue"
Die meisten der standardmäßigen 4D Funktionalitäten unterstützen Objektfelder genauso wie andere Datentypen. Einige fortgeschrittene Bereiche des Programms sind dagegen im aktuellen Release noch nicht für Objektfelder verfügbar. Diese Bereiche werden schrittweise erweitert und sind dann in kommenden Releases auch für Objektfelder verfügbar.
Folgende Features oder Befehle unterstützen Objektfelder teilweise über 4D Formeln:
Feature/Befehl |
Sucheditor |
Sortiereditor |
Import-/Exporteditor (automatische Unterstützung für 4D Anwendungsformat, Textformate benötigen Formulare) |
4D Write |
4D Write Pro |
4D View |
4D Tags |
PROCESS 4D TAGS (mit Objektfeldern außerhalb von 4D Formeln) |
Folgende 4D Features bzw. Befehle unterstützen Objektfelder nicht: