Pour mon premier Tip je vais parler d’ORDA et plus précisément comment accéder à une sélection d’entités lorsque l’on est dans une relation de type N-N.
Imaginons la structure suivant :
Ici nous voulons donc accéder à tous les acteurs d’un film spécifique. Comment faire?
Essayons de regarder la différence entre le langage 4D classique et ORDA.
4D Classique : ALL RECORDS([Movie]) // FIRST RECORD([Movie]) // Implicite, ALL RECORDS charge automatiquement le premier record QUERY([Actor];[ActorMovie]UUID_Movie=[Movie]UUID)
ORDA : $actors:=ds.Movie.all().first().actorMovieSelection.actor // en une ligne
Si on décompose en 2 lignes : // $movie est une entity de type Movie $movie:=ds.Movie.all().first() // actorMovieCollection est une entitySelection de type ActorMovie // La magie arrive dans le fait que actorMovieSelection.actor va retourner dans $actors, une entitySelection de type Actor $actors:=$movie.actorMovieSelection.actor
L’astuce ici est que l’on utilise l’attribut « actor » qui est un attribut de type entity sur l’entitySelection « actorMovieSelection », ORDA sait que dans ce cas, il doit retourner l’entitySelection de type Actor.
Si on va plus loin, on peut aussi écrire :
$actors_firstNames:=$movie.actorMovieSelection.actor.firstName
Cela va retourner une collection de tous les firstName de tous les acteurs.
Ce phénomène est expliqué dans la doc ici : entitySelection.{attributeName}
Dans le prochain tips nous verrons l’intérêt d’un bon nommage pour coder efficacement. (Tip #2 Relations : Bien nommer ces tables.)