Utiliser des relations un-à-plusieurs

Effectué

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.

Diagramme de la relation un-à-plusieurs, montrant l’enregistrement d’emplacement du côté Un et plusieurs enregistrements de bureau s’affichant du côté Plusieurs de la relation.

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.

Capture d’écran d’un exemple d’interface utilisateur montrant la liste déroulante Emplacement 1 sélectionnée, suivie d’une liste de bureaux à l’emplacement sélectionné.

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 :

Capture d’écran d’une formule qui configure une source de données dans l’exemple précédent.

É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.

Capture d’écran de l’autre formule pour la propriété Items de la galerie de bureau.

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é.

Capture d’écran d’une formule affectée à la propriété text d’un contrôle.

Au lieu d’utiliser la formule Lookup(), vous pouvez utiliser la notation par points et la référence ThisItem.Location.Address.

Capture d’écran de la formule simplifiée pour attribuer l’adresse d’emplacement du bureau.

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.

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.

Capture d’écran d’un formulaire de modification pour l’enregistrement de bureau, où la recherche d’emplacement est représentée par un contrôle DropDown.

Les propriétés avancées du contrôle DropDown montrent comment la propriété Items est configurée.

Capture d’écran des propriétés avancées du contrôle DropDown qui sont utilisées pour la colonne de recherche d’emplacement.

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.

Capture d’écran de l’expression définissant la valeur par défaut de l’emplacement dans la liste déroulante.

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.