4D v15

Datenfeldtyp Objekt

Home

 
4D v15
Datenfeldtyp Objekt

Datenfeldtyp Objekt  


 

 

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:

 CREATE RECORD([Rect])
 [Rect]Name:="Blue square"
 OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue")
 SAVE RECORD([Rect])

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:

  // Um einen Wert zu setzen
 OB SET([Persons]Identity_OB;"First Name";$firstName)
 OB SET([Persons]Identity_OB;"Last Name";$lastName)
 
  // Um einen Wert zu erhalten
 $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:

  • Alle Befehle aus dem Kapitel Objekte (Sprache) unterstützen jetzt Objektfelder als ersten Parameter (Objekt)
  • Ein neuer Befehl wurde hinzugefügt, um Suchen in Objektfeldern zu verwalten. Weitere Informationen dazu finden Sie im Abschnitt QUERY BY ATTRIBUTE.
  • SELECTION TO ARRAY, SELECTION RANGE TO ARRAY und ARRAY TO SELECTION unterstützen Objektfelder über ARRAY OBJECT Anbindungen.
  • Selection to JSON und JSON TO SELECTION unterstützen Objektfelder, die automatisch aus oder in JSON konvertiert werden.
    Beachten Sie jedoch, dass folgender 4D Ausdruck zweideutig ist:
     Selection to JSON([aTable];objectField)

    könnte interpretiert werden als:
    - erzeuge JSON aus allen Werten von objectField in der aktuellen Auswahl von table
    - erzeuge JSON über den Wert von 'objectField' des aktuellen Datensatzes als Vorlage
    4D wählt hier die erste Variante, da dies die gängigste Verwendungsart ist.
  • Old und Modified unterstützen Objektfelder.
  • SET FIELD VALUE NULL löscht den Inhalt des Objektfeldes.
  • GET FIELD PROPERTIES kann jetzt Is object zurückgeben.
  • PROCESS 4D TAGS unterstützt Objektfelder nur in 4D Formeln.

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:

Feature/Befehl
Schnellberichteditor
Etiketteneditor
Diagramme
PHP
SDK Plugin
SQL Data Definition Language (CREATE TABLE)
SQL Data Manipulation Language (SELECT, INSERT, UPDATE)
SQL EXPORT DATABASE und SQL EXPORT SELECTION
DISTINCT VALUES
RELATE ONE
RELATE MANY
ORDER BY
SCAN INDEX



Siehe auch 

QUERY BY ATTRIBUTE

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Designmodus

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D v15 - Upgrade (Standard Edition) ( 4D v15)

Geerbt von : Datenfeldtyp Objekt ( 4D v15)