Écrire du code générique avec ORDA

Traduit automatiquement de Deepl

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 :

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.