ORDA a été l’une des principales annonces du 4D Summit 2018, ouvrant un monde de nouvelles possibilités en 4D. Pour en savoir plus sur ORDA et ses avantages, consultez ce billet pour voir comment ORDA va changer votre façon de travailler.
INTRODUCTION
Avec ORDA, l’accès aux données se fait par le biais d’une couche d’abstraction : le datastore. Un datastore est un objet fournissant une interface à la base de données et à ses données par le biais d’objets. Par exemple, une table est mappée à un objet de classe de données, un champ est un attribut d’une classe de données. La commande new ds renvoie une référence sur le datastore de l’application. Si vous souhaitez en savoir plus, consultez l’article de présentation dans la documentation.
Pour vous guider dans l’exploration des fonctionnalités d’ORDA , nous avons préparé un glossaire des différents termes et concepts, ainsi que leur définition.
ORDA fournit également des informations utiles sur la structure de la base de données.
Ceci peut être très utile lors de l’écriture de code générique…. sans connaître la structure d’une base de données.
Téléchargez l’outil de tri dynamique TIP
Voici un exemple :
Puisque le dataStore retourné par la commande ds est un objet, il peut être itéré à l’aide d’une boucle for each pour obtenir ses attributs (c’est-à-dire les dataClasses).
Cela vous permet d’écrire du code générique applicable à toutes les tables exposées dans le dataStore.
Dans l’exemple ci-dessous, nous construisons une collection d’objets contenant les dataClasses.
C_OBJECT($dataClassObj)
C_TEXT ($dataClassName)
For each ($dataClassName;ds)
$dataClassObj :=New object
$dataClassObj .name:=$dataClassName
$dataClassObj .value:=ds[$dataClassName]
Form .dataClassList.push($dataClassObj)
End for each
Cette collection peut être affichée dans une boîte de liste pour permettre aux utilisateurs de sélectionner une dataClass. Ensuite, on peut continuer avec le code générique sur la dataClass sélectionnée.
Un objet dataClass peut également être parcouru à l’aide d’une boucle for each pour obtenir ses attributs contenant des propriétés utiles :
-
- name: nom de l’attribut dataClassAttribute dans le modèle de données
- kind: la catégorie de l’attribut :
- « storage » : équivalent à un champ dans la base de données 4D
- « relatedEntity » : un attribut de relation N -> 1
- « relatedEntities » : attribut de relation 1 -> N
- relatedDataClass: le nom de la classe de données liée à l’attribut (si le type est « relatedEntity » ou « relatedEntities »)
Avec toutes ces informations, vous pouvez écrire du code générique sans connaître la structure de votre base de données.
Dans la base de données d’exemple TIP fournie, vous apprendrez comment dynamiquement:
- sélectionner une dataClass du dataStore,
- construire une boîte de liste avec toutes les propriétés de la dataClass, y compris l’entité liée de premier niveau, et
- créer un outil de tri.
Voici un aperçu de ce TIP :