Fonctions Relate et Unrelate
S’applique à : Applications canevas Applications pilotées par modèle
Les enregistrements Relate et Unrelate de deux tables via une relation un-à-plusieurs ou plusieurs-à-plusieurs.
Description
La fonction Relate associe deux enregistrements via une relation un-à-plusieurs ou plusieurs-à-plusieurs dans Microsoft Dataverse. La fonction Unrelate inverse le processus et supprime le lien.
Pour les relations un à plusieurs, la table Many a un champ de clé étrangère qui pointe vers un enregistrement de la table One. Relate définit ce champ sur pointer à un enregistrement spécifique de la table One, tandis que Unrelate définit ce champ sur vide. Si le champ est déjà défini lorsque Relate est appelé, le lien existant est perdu au profit du nouveau lien. Vous pouvez également définir ce champ en utilisant la fonction Patch ou le contrôle Edit form ; vous n’avez pas besoin d’utiliser la fonction Relate.
Pour les relations plusieurs-à-plusieurs, le système qui relie les enregistrements conserve une table de jointure masquée. Vous ne pouvez pas accéder directement à cette table de jointure ; elle ne peut être lue que par une projection une-à-plusieurs et définie par les fonctions Relate et Unrelate. Aucune des tables associées n’a de clé étrangère.
Les données de la table que vous spécifiez dans le premier argument seront actualisées pour refléter le changement, mais pas les données de la table que vous spécifiez dans le deuxième argument. Ces données doivent être actualisées manuellement avec la fonction Refresh pour afficher le résultat de l’opération.
Ces fonctions ne créent ni ne suppriment jamais un enregistrement. Ils relient ou dissocient uniquement deux enregistrements qui existent déjà.
Utilisez ces fonctions ensemble uniquement dans les formules de comportement.
Note
Ces fonctions font partie d’une fonction d’aperçu et leur comportement n’est disponible que lorsque la fonctionnalité Données relationnelles, groupes d’options et autres nouvelles fonctionnalités pour CDS est activée. Il s’agit d’un paramètre au niveau de l’application qui est activé par défaut pour les nouvelles applications. Pour trouver ce commutateur de fonctionnalité, sélectionnez Paramètres, puis sélectionnez Fonctionnalités à venir. Vos commentaires nous sont très utiles. Donnez-nous votre avis sur les forums de la communauté Power Apps.
Syntaxe
Relation( Table1RelatedTable, Table2Record )
- Table1RelatedTable - Obligatoire. Pour un enregistrement de Table1, la table des enregistrements Table2 liés par une relation un-à-plusieurs ou plusieurs-à-plusieurs.
- Table2Record - Obligatoire. L’enregistrement Table 2 à ajouter à la relation.
Sans rapport( Table1RelatedTable, Table2Record )
- Table1RelatedTable - Obligatoire. Pour un enregistrement de Table1, la table des enregistrements Table2 liés par une relation un-à-plusieurs ou plusieurs-à-plusieurs.
- Table2Record - Obligatoire. L’enregistrement Table 2 à Supprimer de la relation.
Exemples
Considérez une table Produits avec le Relations suivant comme on le voit dans la visionneuse de table du portail Power Apps :
Nom d’affichage de la relation | Table associée | Type de relation |
---|---|---|
Réservation de produit | Réservation | Un-à-plusieurs |
Produit ↔ Contact | Contact | Plusieurs-à-plusieurs |
Les produits et les réservations sont liés via une relation un-à-plusieurs. Pour lier le premier enregistrement de la table Réservations au premier enregistrement de la table Produits :
Relate( First( Products ).Reservations, First( Reservations ) )
Pour supprimer la relation entre ces enregistrements :
Unrelate( First( Products ).Reservations, First( Reservations ) )
À aucun moment, nous n’avons créé ou supprimé un enregistrement, seule la relation entre les enregistrements a été modifiée.
Les produits et contacts sont liés via une relation plusieurs-à-plusieurs. Pour lier le premier enregistrement de la table Contacts au premier enregistrement de la table Produits :
Relate( First( Products ).Contacts, First( Contacts ) )
Comme les relations plusieurs-à-plusieurs sont symétriques, nous aurions également pu le faire dans la direction opposée :
Relate( First( Contacts ).Products, First( Products ) )
Pour supprimer la relation entre ces enregistrements :
Unrelate( First( Products ).Contacts, First( Contacts ) )
ou :
Unrelate( First( Contacts ).Products, First( Products ) )
La procédure qui suit effectue exactement ces opérations sur ces tables à l’aide d’une application avec les contrôles Gallery et Combo box de sélection des enregistrements concernés.
Ces exemples dépendent des exemples de données installés dans votre environnement. Soit créer un environnement d’essai comprenant des exemples de données, soit ajouter des exemples de données à un environnement existant.
Une-à-plusieurs
Fonction Relate
Vous allez d’abord créer une application simple pour afficher et réaffecter les réservations associées à un produit.
Créez une application de tablette à partir de zéro.
Sous l’onglet Affichage, sélectionnez Sources de données.
Dans le volet Données, sélectionnez Ajouter des données> sélectionnez Produits.
La table Produits fait partie des exemples de données chargés ci-dessus.Sous l’onglet Insérer, ajoutez un contrôle Gallery vertical vide.
Assurez-vous que le contrôle que vous venez d’ajouter est nommé Gallery1, puis déplacez-le et redimensionnez-le pour remplir le côté gauche de l’écran.
Sur l’onglet Propriétés, définir la propriété Items de Gallery1 sur Produits et sa Disposition sur Image et titre.
Dans Gallery1, assurez-vous que le contrôle Label est nommé Title1, puis définissez sa propriété Text sur ThisItem.Name.
Sélectionnez l’écran pour éviter d’insérer l’élément suivant dans Gallery1. Ajouter un deuxième contrôle Gallery vertical vide et s’assurer qu’il est nommé Gallery2.
Gallery2 affichera les réservations pour tout produit sélectionné par l’utilisateur dans Gallery1.
Déplacer et redimensionner Gallery2 pour remplir le quadrant supérieur droit de l’écran.
(facultatif) Ajoutez le contrôle Label bleu au dessus de Gallery2, comme le montre le graphique suivant.
Dans la barre de formule, définissez la propriété Items de Gallery2 sur Gallery1.Selected.Reservations.
Dans le volet des propriétés, définissez la Disposition de Gallery2 sur Titre.
Dans Gallery2, ajouter un contrôle Combo box, assurez-vous qu’il est nommé ComboBox1, puis déplacez-le et redimensionnez-le pour éviter de bloquer les autres contrôles dans Gallery2.
Sur l’onglet Propriétés, définir la propriété Items de ComboBox1 sur Produits.
Faites défiler vers le bas dans l’onglet Propriétés et définissez la propriété Allow multiple selection de ComboBox1 sur Off.
Dans la barre de formule, définissez la propriété DefaultSelectedItems de ComboBox1 sur ThisItem.’Product Reservation’.
Dans Gallery2, définissez la propriété OnSelect de NextArrow2 sur cette formule :
Relate( ComboBox1.Selected.Reservations, ThisItem )
Lorsque l’utilisateur sélectionne cette icône, la réservation actuelle change pour le produit que l’utilisateur a sélectionné dans ComboBox1.
Appuyez sur F5 pour tester l’application en mode Aperçu.
Avec cette application, l’utilisateur peut déplacer une réservation d’un produit à un autre. Pour une réservation sur un produit, l’utilisateur peut sélectionner un autre produit dans ComboBox1, puis sélectionner NextArrow2 pour modifier cette réservation.
Fonction sans rapport
À ce stade, vous pouvez déplacer la relation d’un enregistrement à un autre, mais vous ne pouvez pas supprimer complètement la relation. Vous pouvez utiliser la fonction Unrelate pour déconnecter un enregistrement de réservation de tout produit.
Sous l’onglet Affichage, sélectionnez Sources de données.
Dans le volet Données, sélectionnez Ajouter une source de données>Microsoft Dataverse>Réservations>Connecter.
Dans Gallery2, définissez la formule OnSelect de NextArrow2 sur cette formule :
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
Copiez Gallery2 dans le Presse-papiers en la sélectionnant, puis en appuyant sur Ctrl-C.
Collez un doublon de Gallery2 sur le même écran en appuyant sur Ctrl-V, puis déplacez-le dans le quadrant inférieur droit de l’écran.
(facultatif) Si vous avez ajouté une étiquette ci-dessus Gallery2, répétez les deux étapes précédentes pour cette étiquette.
Assurez-vous que le double de Gallery2 est appelé Gallery2_1, puis définissez sa propriété Items de cette formule :
Filter( Reservations, IsBlank( 'Product Reservation' ) )
Un avertissement de délégation apparaît, mais cela n’aura pas d’importance avec la petite quantité de données dans cet exemple.
Avec ces modifications, les utilisateurs peuvent effacer la sélection dans ComboBox1 pour un contact si cette personne n’a pas réservé de produit. Les contacts qui n’ont pas réservé de produit apparaissent dans Gallery2_1 où les utilisateurs peuvent affecter chaque contact à un produit.
Plusieurs-à-plusieurs
Créer une relation plusieurs à plusieurs
Les exemples de données n’incluent pas de relation plusieurs-à-plusieurs, mais vous en créerez une entre la table Produits et la table Contacts. Les utilisateurs peuvent associer chaque produit à plusieurs contacts et chaque contact à plusieurs produits.
Dans cette page, sélectionnez Données dans la barre de navigation de gauche, puis Tables.
Modifiez le filtre de table pour inclure toutes les tables.
Par défaut, les exemples de tableaux n’apparaissent pas.
Faites défiler vers le bas, ouvrez la table Produit et sélectionnez Relations.
Sélectionnez Ajouter une relation>Plusieurs à plusieurs.
Sélectionnez la table Contact pour la relation.
Cliquez sur Terminé>Enregistrer la table.
Relier et dissocier des contacts avec un ou plusieurs produits
Vous allez créer une autre application qui ressemble à celle que vous avez créée précédemment dans ce sujet, mais la nouvelle application offrira une relation plusieurs-à-plusieurs. Chaque contact pourra réserver plusieurs produits au lieu d’un seul.
Dans une application vierge pour tablettes, créez Gallery1 comme première procédure dans ce sujet décrit.
Ajoutez un autre contrôle Gallery vertical vide, assurez-vous qu’il est nommé Gallery2, puis déplacez-le dans le coin supérieur droit de l’écran.
Plus tard dans ce sujet, vous ajouterez un contrôle Combo box sous Gallery2.
Dans la barre de formule, définissez la propriété Items de Gallery2 sur Gallery1.Selected.Contacts.
Sur l’onglet Propriétés, définissez Layout sur Image and title.
Dans Gallery2, assurez-vous que le contrôle Label est nommé Title2, puis définissez sa propriété Text sur ThisItem.’Full Name’.
Aucun texte n’apparaîtra dans ce contrôle tant que vous n’aurez pas terminé cette procédure et affecté un contact à un produit.
Supprimer NextArrow2, insérez une icône Annuler et assurez-vous qu’elle est nommée icon1.
Définissez la propriété OnSelect de l’icône Annuler sur la formule suivante :
Unrelate( Gallery1.Selected.Contacts, ThisItem )
Sous l’onglet Affichage, sélectionnez Sources de données.
Dans le volet Données, sélectionnez Ajouter une source de données>Microsoft Dataverse>Contacts>Connecter.
En dessous de Gallery2, ajoutez un contrôle Combo box, assurez-vous qu’il est nommé ComboBox1, puis définissez sa propriété Items sur Contacts.
Sur l’onglet Propriétés, définissez Allow multiple selection sur Désactivé.
Insérez une icône Ajouter, puis définissez sa propriété OnSelect sur la formule suivante :
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
Avec cette application, les utilisateurs peuvent désormais associer et dissocier librement un ensemble de contacts à chaque produit.
Pour ajouter un contact à un produit, sélectionnez le contact dans la zone de liste déroulante en bas de l’écran, puis sélectionnez l’icône Ajouter.
Pour supprimer un contact d’un produit, sélectionnez l’icône Annuler pour ce contact.
Contrairement à une relation une à plusieurs, une relation plusieurs à plusieurs permet aux utilisateurs d’associer le même contact à plusieurs produits.
Inverse : associer et dissocier des produits avec plusieurs contacts
Les relations plusieurs-à-plusieurs sont symétriques. Vous pouvez étendre l’exemple pour ajouter des produits à un contact, puis basculer entre les deux écrans pour montrer comment la relation apparaît dans les deux sens.
Définissez la propriété OnVisible de Screen1 sur Refresh( Products ).
Lorsque vous mettez à jour une relation un-à-plusieurs ou plusieurs-à-plusieurs, seules les données de la première table d’arguments de l’appel Relate ou Unrelate est actualisé. La seconde doit être actualisée manuellement si vous souhaitez basculer entre les écrans de cette application.
Dupliquer Screen1.
Le duplicata sera nommé Screen1_1 et à partir de la base pour regarder le Relations du côté des contacts.
Pour créer la vue inversée, modifiez ces formules sur les commandes de Screen1_1 :
- Screen1_1.OnVisible =
Refresh( Contacts )
- Gallery1_1.Items =
Contacts
- Title1_1.Text =
ThisItem.'Full Name'
- Label1_1.Text =
"Selected Contact Products"
- Gallery2_1.Items =
Gallery1_1.Selected.Products
- Title2_1.Text =
ThisItem.Name
- Icon1_1.OnSelect =
Unrelate( Gallery1_1.Selected.Products, ThisItem )
- ComboBox1_1.Items =
Products
- Icon2_1.OnSelect =
Relate( Gallery1_1.Selected.Products, ComboBox1_1.Selected )
Le résultat sera très similaire à l’écran précédent, mais vient à la relation côté Contacts.
- Screen1_1.OnVisible =
Insérez une icône Flèches haut et bas et définissez sa propriété OnSelect sur Navigate( Screen1, None ). Faites la même chose sur Screen1 avec la formule Navigate( Screen1_1, None ).
Avec ce nouvel écran, les utilisateurs peuvent ajouter un contact à un produit, puis basculer vers une vue des contacts et voir le produit associé. Les Relations sont symétriques et partagées entre les deux écrans.