A compter de 4D v15, le nouveau type de champ Objet est pris en charge par le moteur de base de données 4D.
Depuis 4D v14, vous pouviez déjà manipuler des objets dans vos applications 4D, mais uniquement via le langage de programmation (voir Objets (Langage)). Le type de champ Objet vous permet d'aller plus loin. Vous pouvez notamment :
- stocker des objets dans le fichier de données,
- ajouter, modifier ou supprimer dynamiquement des attributs d'objets,
- effectuer des recherches d'objets par attribut,
- importer/exporter des valeurs d'objets, etc.
Note d'implémentation : Certaines fonctions 4D ne prennent pas encore en charge les champs de type objet (reportez-vous ci-dessous au paragraphe Limitations actuelles).
Le type Objet vous permet de définir des champs dynamiques sans schéma de structure prédéfini. Les champs objet peuvent être considérés comme "définis par l'utilisateur" ou "personnalisés". Dans 4D v15, vous avez désormais le choix entre des modèles de données basés ou non sur des schémas. Dans les deux cas, vous pouvez exécuter des recherches indexées ultra-rapides.
A noter également que les champs objet peuvent simplifier les modèles de données standard. Par exemple, pour une table [Contacts] conventionnelle, un simple champ de type Objet permet d'éviter la création de dizaines de champs représentant toutes les valeurs possibles -- dont la plupart ne sont pas utilisés dans 90 % des cas. Le modèle d'information est alors créé à la volée uniquement lorsque c'est nécessaire.
Le nouveau type de champ Objet peut être défini comme n'importe quel type de champ, notamment via l'Inspecteur de l'éditeur de structure :

Les champs objet stockent des paires attribut / valeur de différent type, sans schémas de données prédéfinis. La structure des données stockées peut varier d'un enregistrement à un autre. Par exemple, un champ Objet [Personne]Adresse peut contenir différents attributs selon que la personne habite un appartement, une maison, telle ou telle ville, état, etc :
record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...}
record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...}
La structure des objets 4D est basée sur le principe standard des paires "attribut/valeur". La syntaxe de ces objets s'inspire de la notation JSON, sans toutefois l'implémenter entièrement :
- Un nom d'attribut est toujours un texte, par exemple "Nom".
- Une valeur d'attribut peut être d'un des types suivants :
- numérique (réel, entier, etc.)
- texte
- tableau (texte, réel, entier, booléen, objet, pointeur)
- null
- booléen
- pointeur (stocké tel quel, évalué à l'aide de la commande JSON Stringify ou lors de la copie),
- date (format "YYYY-MM-DDTHH:mm:ssZ")
- objet (les objets peuvent être imbriqués sur plusieurs niveaux).
Attention : Gardez à l'esprit que les noms d'attributs différencient les majsucules/minuscules.
Un champ objet peut être contenir jusqu'à 2 Go de données. Lorsque vous travaillez avec un enregistrement qui contient un champ objet, l'objet entier est stocké en mémoire. Comme pour les champs de type Texte, Image ou BLOB, les champs objet peuvent être stockés dans le fichier de données (avec les enregistrements ou non), ou hors du fichier de données. Cette option est détaillée dans la section Stockage externe des données du manuel Mode Développement.
Un champ objet peut être indexé (option Automatique uniquement), ce qui signifie que dans ce cas tous les chemins d'attributs sont automatiquement indexés. Il peut également être Invisible et dispose de l'attribut Exposer avec le service 4D Mobile. En revanche, un champ objet ne peut pas avoir l'attribut Unique.
Vous utilisez les commandes 4D Objets (Langage) pour gérer les champs objet. Utilisez les commandes OB Lire et OB FIXER pour lire et écrire des données dans les champs de type Objet. Vous pouvez également lire et stocker des attributs de type tableau à l'aide des commandes OB FIXER TABLEAU et OB LIRE TABLEAU.
Comme les champs de type Objet sont basés sur du texte, leur contenu peut être affiché par défaut dans un formulaire 4D en tant que texte, et formaté en JSON (voir paragraphe suivant).
Note : Pour manipuler des objets JSON, vous devez utiliser les commandes du thème "JSON".
Par défaut, les champs objet sont représentés sous forme de zones de texte dans les formulaires 4D. A l'intérieur de ces zones, les données des objets sont soit undefined, soit formatées en texte JSON; sinon, une erreur est retournée.
Par exemple, si vous avez défini le champ [Rect]Desc en tant que champ objet, vous pouvez écrire:
Lorsque le champ [Rect]Desc est affiché dans un formulaire, le contenu suivant est affiché :

Vous pouvez modifier les valeurs affichées directement dans la zone de texte, ou ajouter des données en utilisant la notation objet standard; le contenu est automatiquement formaté en JSON lorsque vous appuyez sur la touche [Tab] :

Cependant, l'édition directe doit être effectuée avec précaution car tout symbole ou espace placé à un mauvais endroit provoquera une erreur de l'analyseur JSON et les données ne seront pas sauvegardées :

Il est plus approprié de gérer le contenu des champs objet à l'aide des commandes Objets (Langage) et JSON.
Toutes les commandes du thème Objets (Langage) acceptent désormais un champ objet comme premier paramètre (objet).
Tout comme les objets de langage standard, les valeurs des champs objet sont manipulées à l'aide des commandes du thème Objets (Langage). Par exemple :
OB FIXER([Personnes]Identity_OB;"Prénom";$firstName)
OB FIXER([Personnes]Identity_OB;"Nom";$lastName)
$firstName:=OB Lire([Personnes]Identity_OB;"Prénom")
$lastName:=OB Lire([Personnes]Identity_OB;"Nom")
Les tableaux sont également pris en charge, par exemple :
TABLEAU TEXTE($arrGirls;3)
$arrGirls{1}:="Emma"
$arrGirls{2}:="Susan"
$arrGirls{3}:="Jamie"
OB FIXER TABLEAU([Personnes]Enfants;"Girls";$arrGirls)

Le langage 4D a été mis à jour pour prendre en charge les champs de type Objet. En particulier :
A noter toutefois que pour des raisons techniques, certaines commandes ne peuvent pas être utilisées avec des champs objet. Ces commandes sont listées dans le paragraphe suivant.
Les champs objet peuvent être utilisés dans des formules 4D (à l'aide de l'éditeur de formules standard ou la commande EXECUTER FORMULE). Cependant dans ce contexte, les champs objet doivent être manipulés par l'intermédiaire des commandes suivantes :
Par exemple, vous pouvez exécuter la formule de requête suivante :
OB Lire([Rect]Desc;"color")="blue"
La plupart des fonctionnalités principales de 4D prennent totalement en charge les champs de type Objet. Cependant, dans la version actuelle du programme, certaines parties spécifiques ne sont pas encore "prêtes" à utiliser directement les champs objet. Ces parties seront mises à jour progressivement dans les versions suivantes.
Les commandes et fonctions suivantes prennent indirectement en charge les champs objet via les formules 4D :
Fonctions/Commandes |
Editeur de recherche |
Editeur de tri |
Editeur d'import/export (prise en charge automatique pour le format 4D Application, nécessité d'utiliser des formulaires pour les formats texte) |
4D Write |
4D Write Pro |
4D View |
Balises 4D |
TRAITER BALISES 4D |
Les commandes et fonctions 4D suivantes ne prennent pas en charge les champs objet :