Utiliser des relations un-à-plusieurs
Les relations un-à-plusieurs sont les relations les plus courantes que vous utiliserez dans Dataverse. Cette unité poursuit le scénario concernant la solution d’espaces de travail partagés (partage de bureau) chez Contoso. Pour expliquer comment utiliser les relations dans une application canevas, les exemples suivants utiliseront la relation entre les tables Location et Desk. Le diagramme suivant est une visualisation de la relation et des données correspondantes.
Si vous souhaitez autoriser un utilisateur à sélectionner un emplacement et que les bureaux de cet emplacement s’affichent dans une galerie en dessous, vous pouvez créer un écran similaire à l’exemple suivant.
Comme avec la plupart des sources de données, vous pouvez utiliser la fonction Filter() pour filtrer les bureaux afin d’afficher uniquement les bureaux de l’emplacement sélectionné. Une formule similaire à l’exemple suivant devrait s’afficher :
Étant donné que vous utilisez une relation un-à-plusieurs dans Dataverse, vous pouvez à la place utiliser la notation par points pour référencer les bureaux de l’emplacement en utilisant Control.Selected.Desks, comme indiqué dans la formule suivante.
Dans cet exemple, les deux formules produisent la même liste de bureaux associés à l’emplacement sélectionné. Utiliser la notation par points est plus simple et plus concis que d’utiliser la fonction Filter().
Lorsque vous parcourez une relation un-à-plusieurs à l’aide de la syntaxe de notation par points, vous obtenez par défaut tous les enregistrements associés. Vous pouvez utiliser un filtre pour appliquer plus de critères aux lignes associées. L’expression suivante utilise la relation un-à-plusieurs et filtre également les résultats en fonction du statut actif.
Filter(FilterLocation_1.Selected.Desks, Status= 'Status (Desks)'.Active)
De plus, vous pouvez utiliser la relation à partir de la ligne du bureau. Prenons un exemple où, dans la galerie, vous souhaitez afficher l’adresse d’emplacement de chaque bureau. Vous êtes peut-être habitué à utiliser une recherche pour récupérer l’enregistrement d’emplacement, puis à accéder à la colonne d’adresse en tant que propriété.
Au lieu d’utiliser la formule Lookup(), vous pouvez utiliser la notation par points et la référence : ThisItem.Location.Address
.
Vous n’êtes pas limité à un seul niveau de navigation dans les relations. Par exemple, si vous avez un emplacement qui a un contact principal associé et que vous souhaitez afficher la colonne Nom complet, vous pouvez composer la formule suivante :
ThisItem.Location.'Primary Contact'.'Full Name'
En utilisant la notation par points, vous pouvez rapidement inclure des données associées, quel que soit le côté de la relation d’où vous partez.
Ajouter et mettre à jour des lignes associées
Le moyen le plus simple d’établir la relation un-à-plusieurs consiste à utiliser un formulaire de modification pour créer ou mettre à jour la ligne associée. Lorsque vous ajoutez la colonne de recherche au formulaire, il utilise la fonction Choices() pour présenter les valeurs possibles à l’utilisateur. L’exemple suivant montre le processus d’ajout d’une ligne de bureau où la colonne de recherche d’emplacement est ajoutée au formulaire.
Les propriétés avancées du contrôle DropDown montrent comment la propriété Items est configurée.
En utilisant la fonction Choices(), vous éliminerez le besoin d’ajouter la table de recherche en tant qu’autre source de données. Le résultat de la fonction Choices() est une table, vous pouvez donc ajouter plus de filtrage et de tri, comme suit :
Filter(Choices([@Desks].contoso_Location), Status='Status (Locations)'.Active)
Si vous aviez déjà la valeur de recherche que vous vouliez définir (par exemple lors de la création d’un enregistrement de bureau à partir de l’écran Location), vous pouvez définir la propriété DefaultSelectedItems sur la valeur de la carte de données, puis définir la propriété Visible du champ de formulaire sur Désactivé. Ce paramètre permet à la valeur par défaut d’être transmise lorsque la fonction SubmitForm() est invoquée.
Si vous utilisez la fonction Patch() pour définir une colonne de recherche, définissez la valeur de la colonne sur un enregistrement de la table principale. L’exemple suivant montre l’établissement d’une relation entre une ligne de bureau et une ligne d’emplacement principal actuellement sélectionnée dans la liste déroulante d’emplacements.
Patch(Desks, ThisItem, {Location:FilterLocation_1.Selected})
Vous pouvez également obtenir le même résultat en utilisant la fonction Relate(). Le premier paramètre est la liste des lignes (bureaux) qui sont associées à la ligne principale (emplacement), et le deuxième paramètre est la ligne (bureau) à ajouter à cette liste ou à associer.
Relate(FilterLocation_1.Selected.Desks,ThisItem)
De même, vous pouvez utiliser la fonction Unrelate() pour dissocier les lignes, par exemple en supprimant ThisItem (Desk) des bureaux associés à l’emplacement sélectionné FilterLocation_1.Selected.
Unrelate(FilterLocation_1.Selected.Desks,ThisItem)
Lorsque vous utilisez la fonction Unrelate(), n’oubliez pas qu’elle définit la valeur de la recherche principale sur l’enregistrement associé sur Rien (ou Null). Évitez d’avoir des lignes orphelines, car l’application peut ne pas avoir la possibilité d’afficher la ligne sans l’association principale. Dans l’exemple de Contoso, si la liste des bureaux s’affiche uniquement en fonction de l’emplacement, tout bureau sans emplacement sera orphelin et inaccessible via l’application. Cette situation peut également se produire comme effet secondaire de la suppression de la ligne principale lorsque la propriété de comportement de relation est configurée de façon à supprimer le lien vers les lignes associées.