Fields
Définition
La zone "Définition" de la palette Inspecteur configure les propriétés de base des champs. Certaines propriétés ne sont disponibles que pour certains types de champs.
Couleur
Vous pouvez attribuer une couleur à chaque nom de champ afin de distinguer les champs selon leur rôle ou leurs attributs. Par exemple, vous pouvez utiliser une couleur pour les champs uniques et une autre pour les champs obligatoires. Il est également possible d'attribuer une couleur à chaque table et à chaque relation.
Pour définir la couleur d'un ou plusieurs champs, sélectionnez-les et choisissez une couleur à l'aide :
- du bouton Couleur dans la barre d'outils de l'éditeur de Structure ;
- de la commande Couleur dans le menu contextuel des champs ;
- de l'option Couleur dans la palette Inspecteur.
L'option Automatique permet d'appliquer au nom du champ sa couleur standard d'origine.
Invisible
Vous pouvez rendre un champ invisible dans l'environnement Application et pour les plug-ins en sélectionnant la propriété Invisible. Cet attribut masque le champ à l'utilisateur. Un champ invisible n'apparaît dans aucun éditeur standard 4D ni dans aucune boîte de dialogue de l'environnement Application. Il ne peut pas non plus être utilisé par les plug-ins. Les éditeurs et boîtes de dialogue suivants sont concernés :
- tous les éditeurs de requête ;
- l'éditeur de tri ;
- l'éditeur d'étiquettes ;
- les états rapides ;
- les boîtes de dialogue d'exportation et d'importation de données ;
- l'éditeur de formules.
Dans chacun de ces emplacements, l'utilisateur ne peut ni voir ni choisir le champ. Par exemple, il ne peut pas choisir un champ invisible pour une présentation créée avec l'éditeur d'étiquettes.
Note : lors de l'utilisation des éditeurs, les utilisateurs peuvent enregistrer leurs spécifications (par exemple, la requête ou le tri créé) dans des fichiers sur disque. Dans ce cas, les champs spécifiés qui sont ensuite déclarés invisibles continuent d'être utilisés. De plus, les utilisateurs peuvent saisir le nom des champs invisibles dans l'éditeur de formules.
Les champs invisibles s'affichent en italique dans la fenêtre de l'éditeur de Structure.
Unique
Utilisez l'attribut Unique pour garantir que chaque enregistrement possède une valeur différente dans ce champ. Cet attribut doit être utilisé pour le champ qui identifie de manière unique chaque enregistrement de la table. Il est utile pour valider les champs contenant des numéros d'employé, de sécurité sociale, de commande, etc.
L'attribut Unique interdit la duplication des valeurs vides, comme celle de toute autre valeur. Un champ vide ne peut pas être dupliqué dans un autre enregistrement.
La barre d'informations de l'éditeur de Structure indique si la propriété Unique est sélectionnée pour un champ.
Dans 4D, les champs dotés de l'attribut Unique doivent être indexés. Un indicateur visuel signale qu'un index sera créé (s'il n'existe pas déjà) lorsque vous sélectionnez l'attribut Unique :
L'éditeur empêche la suppression de l'index d'un champ Unique (l'option Aucun et les commandes de suppression d'index ne sont pas disponibles lorsque ce champ est sélectionné). Pour supprimer l'index d'un champ unique, vous devez d'abord retirer l'attribut Unique.
Exposer comme ressource REST
Cette option détermine si le champ est exposé aux requêtes REST.
- Cette option peut également être définie au niveau de la table.
- Elle est utilisée dans le contexte des fonctionnalités de datastore distant ORDA.
Refuser la saisie de valeurs NULL
Cette propriété empêche le stockage de valeurs NULL. Lorsqu'elle est sélectionnée pour un champ, il est impossible d'y stocker la valeur NULL. Si un champ doté de cet attribut reçoit une valeur NULL, une erreur est générée. Cette propriété de bas niveau correspond exactement à l'attribut SQL NOT NULL.
Dans 4D, les champs peuvent également avoir l'attribut "Obligatoire" (voir ci-dessous). Les concepts sont similaires, mais leur portée diffère : l'attribut "Obligatoire" contrôle la saisie des données, tandis que l'attribut "Refuser la saisie de valeurs NULL" agit au niveau du moteur de la base de données.
Mapper les valeurs NULL sur les valeurs vides
Cette propriété uniformise le traitement des valeurs "vides" et NULL du champ dans le langage 4D.
L'utilisation de cette option n'est pas recommandée dans les développements basés sur ORDA, où les valeurs NULL sont entièrement prises en charge.
Pour des raisons de compatibilité, les valeurs NULL stockées dans les tables 4D sont automatiquement converties en valeurs par défaut lorsqu'elles sont manipulées avec le langage 4D. Par exemple, dans l'instruction suivante :
$myTextVar:=[myTable]myTextField
... si le champ myTextField contient une valeur NULL, la variable $myTextVar contiendra "" (chaîne vide). Les valeurs par défaut dépendent du type de données. En revanche, ce mécanisme ne s'applique en principe pas aux traitements effectués au niveau du moteur de base de données 4D, tels que les requêtes. Une recherche de valeur "vide" (par exemple $myvalue=0) ne trouve donc pas les enregistrements contenant NULL, et inversement. Lorsque les deux types de valeurs (valeurs par défaut et NULL) sont présents dans les enregistrements d'un même champ, certains traitements peuvent être modifiés ou nécessiter du code supplémentaire. Pour éviter ces inconvénients, l'option Mapper les valeurs NULL sur les valeurs vides permet d'uniformiser tous les traitements dans le langage 4D. Les champs contenant NULL sont alors systématiquement considérés comme contenant des valeurs par défaut.
- Les champs Alpha au format UUID qui ne sont pas générés ne sont pas considérés comme NULL (voir Format UUID).
- Cette propriété est prise en compte à un niveau très bas du moteur de base de données. Elle agit notamment sur la commande
Is field value Null.
Incrémentation automatique
La propriété Incrémentation automatique génère des numéros de séquence dans la table. Elle peut être utilisée avec les champs de type Integer, Long Integer et Integer 64 bits.
Un champ doté de cette propriété est incrémenté automatiquement à chaque création d'un enregistrement dans la table. Le numéro de séquence attribué correspond au "compteur interne" de la table, géré par 4D. Ce compteur est également accessible avec les commandes 4D Sequence number et Get database parameter, ainsi qu'avec le marqueur #N (voir Valeurs par défaut).
Les numéros attribués ne sont jamais réutilisés dans la table, même après la suppression d'enregistrements. Les numéros générés pendant une transaction annulée sont "perdus". La propriété Incrémentation automatique correspond à l'attribut SQL AUTO_INCREMENT. Le libellé AUTO INCREMENT apparaît également dans la zone d'informations SQL de l'Inspecteur pour les champs dotés de cet attribut.
Bien qu'ils soient uniques dans la table au moment de leur génération, les numéros incrémentés automatiquement ne sont PAS recommandés pour remplir les champs de clé primaire identifiant de manière unique les enregistrements, notamment lorsque la structure utilise plusieurs fichiers de données : le compteur interne pourrait alors être désynchronisé. En outre, le compteur interne d'une table peut être réinitialisé avec la commande SET DATABASE PARAMETER. Pour créer des ID d'enregistrement uniques, il est fortement recommandé d'utiliser des UUID, qui présentent les avantages suivants :
- les UUID génèrent des ID uniques entre toutes les tables et bases de données ;
- pour générer un UUID, vous pouvez combiner l'option UUID auto (voir ci-dessous) et la commande
Generate UUID.
Stockage dans l'enregistrement, dans le fichier de données ou en dehors
Ce menu n'est disponible que pour les champs de type Text, BLOB, Picture et Object type. Il permet de définir l'emplacement de stockage des données du champ.
Dans l'enregistrement
Les données sont stockées avec chaque enregistrement. En général, cette option n'est pas recommandée pour les champs contenant des données volumineuses. Elle est toutefois sélectionnée par défaut pour les champs Text, car ce type de stockage est nécessaire pour utiliser des index B-Tree "standard". Le menu de sélection d'index est masqué lorsque les données Text sont stockées en dehors des enregistrements.
Dans le fichier de données
Les données sont stockées dans le fichier de données, mais en dehors de chaque enregistrement. Cette option est sélectionnée par défaut pour les champs BLOB et Picture. Pour optimiser le fonctionnement de la base avec des données volumineuses, vous pouvez stocker les textes, images, Blobs et objets en dehors des enregistrements.
En dehors du fichier de données
Les données sont stockées dans des fichiers séparés, en dehors du fichier de données. Cette option est décrite dans la section Stockage externe des données.
- Cette option ne s'applique qu'aux nouveaux enregistrements créés ensuite dans la table. Si vous l'activez pour une table contenant déjà des enregistrements, ceux-ci ne sont pas modifiés et la table utilise un mode de stockage mixte, interne et externe. Pour appliquer ce mode aux enregistrements existants, vous devez compacter les données avec l'option Forcer la mise à jour des enregistrements.
- Les données stockées en dehors du fichier de données ne sont pas prises en charge par la fonctionnalité de chiffrement des données, si celle-ci est activée.
- Cette option n'est pas disponible pour les champs de type Object.
Taille maximale de stockage interne
Par défaut, les données des champs BLOB, Picture, Text et Object sont stockées en dehors des enregistrements ou du fichier de données pour optimiser les performances. Il peut être utile, pour des raisons de performance, de forcer le stockage dans les enregistrements lorsque la taille des données est limitée. Cette méthode est particulièrement optimisée lorsque l'application manipule des données BLOB, Picture, texte ou objet de tailles variables. La valeur saisie représente la taille en octets en dessous de laquelle les données du champ sont stockées dans l'enregistrement. Par exemple, avec une valeur de 30 000 pour un champ Picture, une image de 20 Ko sera stockée dans l'enregistrement et une image de 40 Ko à l'emplacement défini dans les paramètres (dans le fichier de données ou en dehors). La valeur par défaut est 0 : toutes les données du champ sont stockées en dehors des enregistrements.
Format UUID
Cette propriété est disponible pour les champs de type Alpha. Elle indique que le champ stocke des identifiants UUID. Les données stockées doivent respecter le format UUID (combinaison de 32 lettres (A-F, a-f) et chiffres (0-9)). Vous pouvez utiliser la propriété UUID auto, la commande Generate UUID ou un algorithme personnalisé.
Si vous essayez de stocker dans ce champ une chaîne qui ne respecte pas le format UUID, 4D la convertit automatiquement. La même opération s'applique au contenu des champs existants qui ne sont pas de type Alpha et qui sont convertis en champs UUID : lors du chargement des enregistrements, les valeurs sont reformattées puis stockées à nouveau.
Les champs au format UUID peuvent être affichés dans des formulaires et restent saisissables. Leur contenu apparaît en majuscules. Pour afficher des caractères minuscules, vous devez passer par une variable.
- Les champs au format UUID ne peuvent pas être associés à des index par mots-clés ni à des listes de choix.
- Vous pouvez créer une relation entre deux champs au format UUID, mais pas entre un champ Alpha standard et un champ au format UUID.
- Un champ UUID initialisé (généré) dont la valeur est NULL renvoie une chaîne vide. Un champ UUID non généré n'est pas NULL et renvoie "000..." (le nombre de zéros correspond au nombre de caractères). La propriété n'est pas prise en compte pour les champs UUID non générés (affichage de "000...").
UUID auto
Cette option est active uniquement lorsque la propriété Format UUID est sélectionnée. Elle permet de générer automatiquement un UUID dans le champ.
Ce numéro est calculé automatiquement dans les cas suivants :
- lors de la création d'un enregistrement ;
- lors du chargement d'un enregistrement dont le champ UUID contient une valeur Null. Cela concerne notamment les enregistrements créés et sauvegardés avant l'ajout du champ UUID dans la table, lorsque l'option Mapper les valeurs NULL sur les valeurs vides n'était pas sélectionnée.
Dans tous les cas, l'enregistrement doit être sauvegardé pour que l'UUID généré automatiquement soit enregistré dans le champ.
Lors de l'importation de données, même si cette propriété est sélectionnée, 4D ne génère pas de nouveau numéro : il utilise les valeurs importées (et les transforme si nécessaire lorsque le format n'est pas valide). Toutefois, si la valeur du champ importé est vide, un UUID est généré automatiquement.
Class
Cette propriété est disponible pour les champs de type Objet (dans les projets 4D uniquement). Elle vous permet de définir un champ de type classe d'objet, ce qui améliore la complétion de code, la vérification syntaxique et la validation d'exécution lors de la saisie de code impliquant des champs objet.
Vous pouvez saisir n'importe quel nom de classe valide dans cette propriété, y compris :
- des classes utilisateurs (par exemple
cs.MyClass) - des classes 4D intégrées (par exemple
4D.File,4D.Folder) - des classes exposées définies par les composants (par exemple
cs.MyComponent.MyClass)
Si vous saisissez un nom de classe non valide, la saisie est rejetée.
Les classes non sérialisables telles que les classes du modèle de données ORDA, la classe FileHandle, WebServer... ne peuvent pas être associées à des champs objets.
Dans votre code, lors de l'affectation d'une valeur à un champ de type classe d'objet, 4D vérifie qu'elle appartient à la classe déclarée. Si ce n'est pas le cas ou si l'objet n'a pas de classe, une erreur est déclenchée. L'accès à des attributs inconnus entraîne également des erreurs de syntaxe.
Pour récupérer le nom de la classe associée lors de l'exécution, utilisez la propriété classID, par exemple ds.MyTable.MyField.classID.
4D.Vector class
If you assign 4D.Vector as the class of an Object type field, you define a vector field. Such fields store embessings and can be used to query data using AI features. See the 4D.Vector class documentation to see how to query with vectors.
Note that the 4D Embedding Studio component can help you configuring and updating your 4D.Vector fields.
When you assign 4D.Vector as the class of an Object type field, a specific icon is displayed as field type in the Structure editor: