ORDA – Généalogie – Episode 1

Traduit automatiquement de Deepl

Nous sommes tous d’accord pour dire que ORDA est une grande fonctionnalité de 4D V17. Une sorte de révolution dans la façon de penser et de programmer. Les bases de données 4D ne seront plus jamais vues de la même manière qu’avant.

ORDA vous permet de concevoir des applications avancées en moins de temps, avec un code plus lisible et plus propre. Pour vous montrer la puissance d’ORDA, nous vous avons préparé une série de conseils, divisée en trois épisodes. Dans ce premier épisode, nous vous montrerons comment les liens doivent désormais être considérés davantage comme des entités et des collections d’entités, et nous vous montrerons comment les listboxes peuvent désormais être basées sur des sélections d’entités, plutôt que sur des sélections ou des tableaux.

Télécharger la généalogie – Premier épisode

Utilisation de relations récursives

Afin de démontrer la puissance de 4D et d’ORDA, nous allons utiliser une base de données hautement récursive à l’aide d’une seule table nommée PEOPLE.

Cette table contient cinq champs principaux : Nom, Prénom, Date de naissance, Sexe et ID (qui est évidemment unique).
Viennent ensuite trois autres champs : FatherID, MotherID et PartnerID qui relient chaque personne à trois autres personnes si elles existent (Partner) ou si elles sont connues (Mother et Father).

Définition de la relation

Concentrons-nous maintenant sur la définition de la relation. Dans les deux sens (1 vers N et N vers 1), les relations peuvent être nommées. En utilisant ORDA, ces noms vont devenir très significatifs et utiles. Dans la direction many to one , le nom n’est pas seulement une chaîne de caractères, c’est une entité de la table PEOPLE, de la même manière que l’entité PEOPLE d’où provient la relation. Dans le sens un vers plusieurs, c’est encore plus, le nom représente une sélection d’entités.

Sans trop anticiper, vous pouvez deviner qu’avec la notation objet, vous pourrez utiliser PEOPLE.Father, ainsi que PEOPLE.ChildrenAsFather, pour atteindre soit une seule personne (le père) soit un groupe de personnes (les enfants).

blank

Un nouveau type de boîte de liste

blank

Jusqu’à présent, le contenu des boîtes de liste (la source de données) était soit des tableaux, soit des sélections. Désormais, le contenu peut également provenir d’une collection ou d’une sélection d’entités. Voyons donc comment une sélection d’entité peut être utilisée dans une boîte de liste.

Tout d’abord, vous devez créer la sélection d’entité à l’aide de la nouvelle fonction ds. Dans cet exemple, nous allons créer une simple sélection d’entités contenant toutes les PERSONNES classées par date de naissance, nom de famille et prénom. Cela peut être fait en une seule ligne, comme indiqué ci-dessous. C’est tout ce que vous avez à savoir pour l’instant sur ds!

people:= ds.PEOPLE.all().orderBy("Birthday asc, Lastname asc, Firstname asc")

Une fois que vous avez obtenu la sélection de l’entité people, il suffit de la définir comme une propriété de la boîte de liste et vous avez – presque – terminé !

« CELA » est fantastique

Comme dans les boîtes de liste ordinaires, le contenu de chaque colonne doit être défini. Dans notre cas, tant que nous utilisons une sélection d’entité, le contenu de chaque colonne sera défini comme une expression. Pour ce faire, nous utiliserons un nouveau mot-clé (« This« ) qui fera référence à l’élément courant de la sélection d’entités.

Pour afficher les noms et les anniversaires de people, l’expression peut être aussi simple que :
Ceci.Lastname
Ceci.Firstname
Ceci.Lastname + " " +Ceci.Firstname
Ceci.Birthday

Maintenant vient le pouvoir et le plaisir : si vous voulez afficher le nom de famille du père, la date de naissance de la mère ou le prénom du partenaire, il suffit d’utiliser les noms d’entités que vous avez donnés dans les définitions des relations (père, mère, partenaire, etc.) et d’écrire :

Ceci.Father.Lastname
Ceci.Mother.Birthday
Ceci.Parter.Firstname

Bien sûr, vous pouvez aller encore plus loin si vous voulez connaître les noms des quatre grands-parents du partenaire du site people actuel en écrivant :

Ceci.Partner.Father.Father.Lastname
Ceci.Partner.Father.Mother.Lastname
Ceci.Partner.Mother.Father.Lastname
Ceci.Partner.Mother.Mother.Lastname

Une dernière étape (pour aujourd’hui !): Je veux aussi afficher le nombre d’enfants et de frères et sœurs de cette personne. Est-ce que je peux le faire ?
Bien sûr, c’est assez facile. Pour les enfants, il suffit d’utiliser la sélection d’entité ChildrenAsFather définie dans la définition de la relation. Comme toute sélection d’entité, elle possède une propriété de longueur. Il suffit de définir l’expression comme ceci :
This.ChildrenAsFather.length + This.ChildrenAsMother.length // l’un des deux sera égal à zéro, ChildrenAsFather.length pour les femmes et vice versa.

Pour les frères et sœurs, vous devrez « remonter » jusqu’à la mère (ou le père) et « descendre » jusqu’aux enfants. L’expression serait donc :
Ceci. Mother.ChildrenAsMother.length - 1 // minus 1 to remove the current people from the number of his/her siblings :-)

blank

Et voici le résultat… sans une seule ligne de code !

blank

A suivre, restez à l’écoute !

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.