4D v19 R4 est livré avec un nouveau concept ORDA : Les alias. Ils sont la suite logique et complémentaire des attributs calculés.
Ce billet de blog explique ce que sont les alias et souligne leurs avantages, notamment quand utiliser l’un ou l’autre… ou les deux.
Qu’est-ce qu’un alias ?
Comme son nom l’indique, un alias n’est rien d’autre qu’un synonyme ou un raccourci d’un objet de datastore existant. Comme les attributs calculés, ils sont définis dans la « classe de données de l’entité », comme nous le verrons plus tard.
Il peut s’agir, par exemple, d’un attribut existant dans la classe de données elle-même, ou plus souvent dans une autre classe de données. Comme un attribut calculé, un alias est utilisé pour référencer une valeur scalaire, une entité ou une sélection d’entités.
Alias ou attributs calculés ?
Vous vous demandez peut-être pourquoi vous devriez utiliser des alias alors que vous disposez déjà d’attributs calculés.
La règle est simple, et vous pouvez l’appliquer sans risque :
Un alias devrait être utilisé si aucun calcul n’ est nécessaire et que le résultat (scalaire, entité ou sélection d’entités) peut être exprimé comme un chemin.
Par exemple : pèresPapa = père.père
Si un calcul doit être effectué (capitalisation, concaténation, recherches, formules, etc.), il doit s’agir d’un attribut calculé.
Ex. : fullname = uppercase (lastname) + firstname
Un exemple SIMPLE ET concret
Prenons l’exemple classique des Sociétés et des Employés.
Dans la classe de données Employé, vous voulez un attribut companyName.
Comme il s’agit d’un attribut simple accessible via un chemin, un simple alias suffit. 4D optimisera les recherches, les requêtes et les tris comme si la cible était utilisée directement.
//Employees Class
Class extends Entity
Alias companyName company.name
De la même manière, dans la classe de données Companies, vous voulez accéder à la liste de employees (cette fois, une sélection d’entités) ; un alias sera également suffisant.
//Companies Class
Class extends Entity
Alias companyEmployees employees
Par contre, si dans le dataclass Employee vous voulez accéder à l’attribut coworkers (liste des employés ayant le même manager), vous devrez créer un attribut calculé qui sera une sélection d’entité () calculée comme ceci :
//Employees Class
Class extends Entity
Function get coworkers()->$entitySelection : cs.Employees
$entitySelection := this.manager.directReports.minus(this)
Il en va de même pour la table company ; un attribut calculé sera obligatoire si vous souhaitez afficher la liste des chefs de département, etc.
Exemples d’utilisation d’alias
Les exemples suivants sont basés sur la structure physique décrite ci-dessous : Les personnes peuvent être des étudiants ou des professeurs (ou les deux) et enseigner et apprendre des langues. Les Leçons sont la classe de données centrale qui relie les Personnes (professeurs et étudiants) et les Langues.
« Aplatir » une table
Vous souhaitez masquer les relations et faire « comme si » les attributs appartenaient directement à une classe de données plutôt qu’à une autre.
Ex : Plutôt que d’utiliser professor.name, student.name et Language.name en fonction de la relation entre Leçons, Personnes et Langue, vous pouvez préférer aplatir la classe de données Leçons en utilisant des alias :
//LessonsEntity Class
Class extends Entity
Alias professorName professor.name
Alias studentName student.name
Alias languageName language.name
Cela permettra d’afficher les leçons en utilisant des alias directs !
CACHER LES RELATIONS « N->P
Les classes de données intermédiaires Lessons peuvent même être entièrement cachées, à condition que toutes les relations soient définies.
Dans l’exemple ci-dessus, on peut définir pour chaque personne :
-
- les leçons qu’ils suivent
- les leçons qu’ils donnent
- les étudiants qu’ils ont (s’ils offrent des cours)
- les professeurs qu’ils ont (s’ils suivent des cours)
//PeopleEntity Class
Class extends Entity
// entity selection of followed lessons
Alias followedLessons learning.language
// entity selection of given lessons
Alias givenLessons teaching.language
// entity selection of professors
Alias professors learning.professor
// entity selection of students
Alias students teaching.student
Conclusion
Consultez l’IDH ci-dessus et apprenez-en davantage sur les cas d’utilisation des alias. Vous trouverez également plus de détails sur le centre de documentation.
Pour plus de détails, la documentation peut être trouvée ici.