4D v15

Type de champ Objet

Accueil

 
4D v15
Type de champ Objet

Type de champ Objet  


 

 

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:

 CREER ENREGISTREMENT([Rect])
 [Rect]Name:="Blue square"
 OB FIXER([Rect]Desc;"x";"50";"y";"50";"color";"blue")
 STOCKER ENREGISTREMENT([Rect])

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 :

  // Définir une valeur
 OB FIXER([Personnes]Identity_OB;"Prénom";$firstName)
 OB FIXER([Personnes]Identity_OB;"Nom";$lastName)
 
  // Lire une valeur
 $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 :

  • Toutes les commandes du thème Objets (Langage) acceptent désormais un champ de type Objet en premier paramètre (objet)
  • Une nouvelle commande a été ajoutée pour gérer les recherches dans les champs objet : CHERCHER PAR ATTRIBUT. Cette commande est décrite dans une section spécifique.
  • Les commandes SELECTION VERS TABLEAU, SELECTION LIMITEE VERS TABLEAU et TABLEAU VERS SELECTION prennent en charge les champs objet via l'utilisation de tableaux TABLEAU OBJET.
  • Les commandes Selection vers JSON et JSON VERS SELECTION prennent en charge les champs objet, qui sont automatiquement convertis de et vers JSON.
    Notez cependant que l'expression 4D suivante est ambiguë :
     Selection vers JSON([uneTable];champObjet)

    pourrait être interprétée de deux manières :
    - produire du JSON à partir de toutes les valeurs de champObjet dans la sélection courante de la table
    - produire du JSON en utilisant champObjet comme template
    Dans ce cas, 4D choisit la première interprétation car c'est l'usage le plus courant. 
  • Les commandes Ancien et Modifie prennent en charge les champs objet.
  • La commande FIXER VALEUR CHAMP NULL efface le contenu des champs objet.
  • LIRE PROPRIETES CHAMP peut désormais retourner Est un objet.
  • La commande TRAITER BALISES 4D prend en charge les champs objet -- uniquement via les formules 4D.

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 "Limitations actuelles".

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 :

Fonctions/Commandes
Editeur d'états rapides
Editeur d'étiquettes
Graphes
PHP
Plugin SDK
SQL Data Definition Language (CREATE TABLE)
SQL Data Manipulation Language (SELECT, INSERT, UPDATE)
SQL EXPORTER BASE et SQL EXPORTER SELECTION
VALEURS DISTINCTES
CHARGER SUR LIEN
LIEN RETOUR
TRIER
SCAN INDEX



Voir aussi  

CHERCHER PAR ATTRIBUT

 
PROPRIÉTÉS 

Produit : 4D
Thème : Mode Développement
Nom intl. : Object Field data type

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D v15 - Mise à jour (édition standard) ( 4D v15)

Hérité de : Type de champ Objet ( 4D v15)