Les Dataclasses fournissent des interfaces objet aux tables de la base de données. Toutes les dataclasses d'une application 4D sont disponibles en tant que propriété du datastore ds. Par exemple, considérez la table suivante dans une structure 4D :

La table [Company] est automatiquement disponible en tant que dataclass dans le datastore ds. Vous pouvez écrire :
C_OBJET(compClass)
compClass:=ds.Company
Ce code attribue à compClass une référence à la dataclass Company.
Un objet dataclass peut contenir :
- des attributs
- des attributs relationnels
La dataclass offre une abstraction de la base de données physique et permet de gérer un modèle de données conceptuel. La dataclass est le seul moyen d'interroger le datastore. Une requête est effectuée à partir d'une seule dataclass. Les requêtes sont construites autour des attributs et des noms d'attributs relationnels des dataclasses. Les attributs relationnels sont ainsi les moyens d'impliquer plusieurs tables liées dans une requête.
Les attributs de la Dataclass sont disponibles en tant que propriétés de leurs classes respectives. Par exemple :
nameAttribute:=ds.Company.name
revenuesAttribute:=ds.Company["revenues"]
Ce code attribue à nameAttribute et revenuesAttribute des références aux attributs name et revenues de la class Company. Cette syntaxe ne renvoie PAS les valeurs contenues dans l'attribut, mais renvoie les références aux attributs eux-mêmes. Pour gérer les valeurs, vous devez passer par Entités.
Note : Les attributs de la Dataclass sont des objets avec des propriétés. Celles-ci sont détaillées dans la section ORDA - DataClassAttribute.
Les attributs de la Dataclass sont de plusieurs types : storage, relatedEntity et relatedEntities. Les attributs scalaires (c'est-à-dire qui ne fournissent qu'une seule valeur) prennent en charge le type de données standard (Entier long, texte, objet, etc.).
- Un attribut de stockage (storage) est équivalent à un champ dans la base de données 4D et peut être indexé. Les valeurs affectées à un attribut de stockage sont stockées en tant que partie de l'entité lors de son enregistrement. Lorsqu'on accède à un attribut de stockage, sa valeur provient directement du datastore. Les attributs de stockage sont le bloc de construction le plus élémentaire d'une entité et sont définis par un nom et un type de données.
- Un attribut relationnel (relatedEntity et relatedEntities) donne accès à d'autres entités. Les attributs relationnels peuvent aboutir soit à une entité unique (ou à aucune entité), soit à une sélection d'entité (0 à N entités). Les attributs relationnels s'appuient sur les relations "classiques" dans la structure relationnelle pour fournir un accès direct à une entité associée ou à des entités connexes. Les attributs relationnels sont directement disponibles dans ORDA en utilisant leurs noms.
Par exemple, considérons la structure partielle de la base de données et les propriétés de relation :

Tous les attributs de stockage seront automatiquement disponibles :
- dans la dataclass Project : "ID", "name", et "companyID"
- dans la dataclass Company : "ID", "name", et "discount"
En outre, les attributs relationnels suivants seront également disponibles automatiquement :
- dans la dataclass Project : l'attribut theClient, du type "relatedEntity" ; il y a au plus une compagnie pour chaque projet (le client)
- dans la dataclass Company : l'attribut companyProjects, du type "relatedEntities" ; pour chaque compagnie, il existe un certain nombre de projets reliés.
Note : La propriété "Manuel" ou "Automatique" d'une relation dans la base de données n'a aucun effet dans ORDA.
Tous les attributs de la dataclass sont exposés en tant que propriétés de la dataclass :

Gardez à l'esprit que ces objets décrivent des attributs, mais ne donnent pas accès aux données. La lecture ou l'écriture des données se fait à travers des objets d'entité. Pour plus d'iformations sur l'utilisation des attributs associés dans les entités, reportez-vous à Utilisation des attributs d'entités.
Certaines méthodes ORDA acceptent les références de chaîne comme noms d'attribut et peuvent également accepter des réféernces d'attribut. Par exemple, considérez ce qui suit :
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection("lastName")
Ce code définit une sélection d'entités d'employés dont le code postal est 95113. Il produit ensuite une collection de noms de famille. Au lieu d'une valeur de chaîne représentant un attibut, vous pouvez également utiliser une référence d'attribut comme ceci :
lastNameAtt:=ds.Employee.lastName
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection(lastNameAtt)
L'objet dataclass lui-même ne peut pas être copié en tant qu'objet :
$mydataclass:=OB Copier(ds.Employee)
Les propriétés de la dataclass sont toutefois énumérables :
TABLEAU TEXTE($prop;0)
OB LIRE NOMS PROPRIETES(ds.Employee;$prop)