De functies Relate en Unrelate
Van toepassing op: Canvas-apps Modelgestuurde apps
Records van twee tabellen verbinden en de verbinding opheffen door middel van een een-op-veel- of veel-op-veel-relatie.
Beschrijving
Met de functie Relate koppelt u twee records aan elkaar via een een een-op-veel- of veel-op-veel-relatie in Microsoft Dataverse. Met de functie Unrelate keert u het proces om en ontkoppelt u de records.
Voor een-op-veel-relaties heeft de tabel Veel een veld voor refererende sleutel dat verwijst naar een record van de tabel Eén. Relate stelt dit veld in op aanwijzen voor een specifieke record van de ene tabel, terwijl Unrelate dit veld instelt op leeg. Als het veld al is ingesteld wanneer Relate wordt aangeroepen, gaat de bestaande koppeling verloren ten gunste van de nieuwe koppeling. U kunt dit veld ook instellen met de functie Patch of een besturingselement Edit form. U hoeft de functie Relate niet te gebruiken.
Voor veel-op-veel-relaties onderhoudt het systeem dat de records koppelt, een verborgen join-tabel. U hebt geen directe toegang tot deze join-tabel. De tabel kan alleen worden gelezen via een een-op-veel-projectie en worden ingesteld met de functies Relate en Unrelate. Geen van beide gerelateerde tabellen heeft een refererende sleutel.
De gegevens voor de tabel die u in het eerste argument opgeeft, worden vernieuwd om de wijziging weer te geven, maar de gegevens voor de tabel die u opgeeft in het tweede argument niet. Die gegevens moeten handmatig worden vernieuwd met de functie Refresh om het resultaat van de bewerking weer te geven.
Deze functies zullen nooit een record maken of verwijderen. Ze koppelen of ontkoppelen alleen twee records die al bestaan.
U kunt deze functies alleen gebruiken in gedragsformules.
Notitie
Deze functies maken deel uit van een voorbeeldfunctie en hun gedrag is alleen beschikbaar wanneer de functionaliteit Relationele gegevens, optiesets en andere nieuwe functies voor CDS is ingeschakeld. Dit is een instelling op app-niveau die standaard is ingeschakeld voor nieuwe apps. Om deze functieschakelaar te vinden selecteert u Instellingen en vervolgens Komende functies. Uw feedback is zeer waardevol voor ons. Laat via de Power Apps community-forums weten wat u ervan vindt.
Syntaxis
Relate( Tabel1RelatedTabel, Tabel2Record )
- Table1RelatedTable - Vereist. Voor een record van Table1 legt de tabel met Table2 records vast die zijn gerelateerd via een één-op-veel- of veel-op-veel-relatie.
- Table2Record - Vereist. De Table2-record die moet worden toegevoegd aan de relatie.
Niet-gerelateerd( Tabel1GerelateerdeTabel, Tabel2Record )
- Table1RelatedTable - Vereist. Voor een record van Table1 legt de tabel met Table2 records vast die zijn gerelateerd via een één-op-veel- of veel-op-veel-relatie.
- Table2Record - Vereist. De Table2-record die moet worden verwijderd uit de relatie.
Voorbeelden
Overweeg een tabel Producten met de volgende relaties zoals te zien is in de tabelviewer van de Power Apps-portal:
Weergavenaam van relatie | Gerelateerde tabel | Relatietype |
---|---|---|
Productreservering | Reservering | Eén-op-veel |
Product ↔ Contact | Contactpersoon | Veel-op-veel |
producten en reserveringen zijn aan elkaar gerelateerd via een één-op-veelrelatie. U kunt als volgt de eerste record van de tabel Reserveringen verbinden met de eerste record van de tabel Producten:
Relate( First( Products ).Reservations, First( Reservations ) )
Als u de relatie tussen deze records wilt verwijderen:
Unrelate( First( Products ).Reservations, First( Reservations ) )
We hebben op geen enkel moment een record gemaakt of verwijderd. Alleen de relatie tussen records is gewijzigd.
producten en contacten zijn aan elkaar gerelateerd via een veel-op-veelrelatie. U kunt als volgt de eerste record van de tabel Contactpersonen verbinden met de eerste record van de tabel Producten:
Relate( First( Products ).Contacts, First( Contacts ) )
Omdat veel-op-veel-relaties symmetrisch zijn, hadden we dit ook in de tegenovergestelde richting kunnen doen:
Relate( First( Contacts ).Products, First( Products ) )
Als u de relatie tussen deze records wilt verwijderen:
Unrelate( First( Products ).Contacts, First( Contacts ) )
of:
Unrelate( First( Contacts ).Products, First( Products ) )
De volgende stap voert precies deze bewerkingen uit op deze tabellen met behulp van een app met besturingselementen Gallery en Combo box voor het selecteren van de betrokken records.
Deze voorbeelden zijn afhankelijk van de voorbeeldgegevens die in uw omgeving zijn geïnstalleerd. U kunt ofwel een proefomgeving maken met voorbeeldgegevens of voorbeeldgegevens toevoegen aan een bestaande omgeving.
Eén-op-veel
Relateer functie
U maakt eerst een eenvoudige app om de reserveringen die aan een product zijn gekoppeld, weer te geven en opnieuw toe te wijzen.
Maak een lege tablet-app.
Selecteer op het tabblad View de optie Gegevensbronnen.
Selecteer in het deelvenster Gegevens de optie Gegevens toevoegen> selecteer Producten.
De tabel Producten maakt deel uit van de voorbeeldgegevens die hierboven zijn geladen.Voeg op het tabblad Insert een leeg verticaal besturingselement Gallery toe.
Zorg ervoor dat het besturingselement dat u zojuist hebt toegevoegd, een naam Gallery1 heeft en verplaats het besturingselement en pas het formaat aan zodat het de linkerkant van het scherm vult.
Stel op het tabblad Eigenschappen de eigenschap Items van Gallery1 in op Products en stel de Layout in op Image en titel.
Zorg ervoor dat in Gallery1 het besturingselement Label de naam Title1 heeft en stel de eigenschap Text in op ThisItem.Name.
Selecteer het scherm om te voorkomen dat u het volgende item in Gallery1 invoegt. Voeg een tweede leeg verticaal besturingselement Gallery toe en zorg ervoor dat die de naam Gallery2 krijgt.
Galerij2 toont de reserveringen voor elk product dat de gebruiker selecteert in Galerij1.
Verplaats Gallery2 en pas het formaat ervan aan om er het kwadrant rechtsboven in het scherm mee te vullen.
(optioneel) Voeg het blauwe besturingselement Label toe boven Gallery2, zoals in de volgende afbeelding is te zien.
Stel in de formulebalk de eigenschap Items van Gallery2 in op Gallery1.Selected.Reservations.
Stel in het eigenschappenvenster de Layout van Gallery2 in op Titel.
Voeg in Gallery2 een besturingselement Combo box toe, zorg dat dit de naam ComboBox1 krijgt en verplaats dit besturingselement en pas het formaat ervan aan om te voorkomen dat het andere besturingselementen in Gallery2 blokkeert.
Stel op het tablad Eigenschappen de eigenschap Items van ComboBox1 in op Products.
Scrol omlaag op het tabblad Eigenschappen en stel de eigenschap Allow multiple selection van ComboBox1 in op Uit.
Stel op de formulebalk de eigenschap DefaultSelectedItems van ComboBox1 in op ThisItem.'Productreservering'.
Stel in Gallery2 de eigenschap OnSelect van NextArrow2 in op deze formule:
Relate( ComboBox1.Selected.Reservations, ThisItem )
Wanneer de gebruiker dit pictogram selecteert, verandert de huidige reservering in het product dat de gebruiker heeft geselecteerd in ComboBox1.
Druk op F5 om de app in de previewmodus te testen.
Met deze app kan de gebruiker een reservering van het ene product naar het andere verplaatsen. Voor een reservering voor het ene product kan de gebruiker een ander product selecteren in ComboBox1 en vervolgens NextArrow2 selecteren om die reservering te wijzigen.
Functie niet meer relateren
Op dit moment kunt u de relatie van de ene record naar de andere verplaatsen, maar u kunt de relatie niet helemaal verwijderen. U kunt de functie Unrelate gebruiken om een reserveringsrecord van een product los te koppelen.
Selecteer op het tabblad View de optie Gegevensbronnen.
Selecteer in het deelvenster Gegevens de optie DataSource toevoegen>Microsoft Dataverse>Reservations>Verbinden.
Stel in Gallery2 de OnSelect-formule voor NextArrow2 in op deze formule:
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
Kopieer Gallery2 naar het klembord door dit besturingselement te selecteren en vervolgens op Ctrl+C te drukken.
Plak een duplicaat van Gallerie2 naar hetzelfde scherm door op Ctrl-V te drukken en verplaats het vervolgens naar het kwadrant rechtsonder op het scherm.
(optioneel) Als u een label hebt toegevoegd boven Gallery2, herhaalt u de vorige twee stappen voor dat label.
Zorg ervoor dat het duplicaat van Gallery2 de naam Gallery2_1 heeft en stel vervolgens de eigenschap Items in op deze formule:
Filter( Reservations, IsBlank( 'Product Reservation' ) )
Er verschijnt een delegeringswaarschuwing, maar dat maakt niet uit omdat we met maar een kleine hoeveelheid gegevens werken in dit voorbeeld.
Met deze wijzigingen kunnen gebruikers de selectie in ComboBox1 wissen voor een contactpersoon als die persoon geen product heeft gereserveerd. Contactpersonen die geen product hebben gereserveerd, verschijnen in Gallery2_1 waar gebruikers iedere contactpersoon aan een product kunnen toewijzen.
Veel-op-veel
Een veel-op-veel-relatie maken
De voorbeeldgegevens bevatten geen veel-op-veel-relatie, maar u maakt er wel een tussen de tabel Producten en de tabel Contactpersonen. Gebruikers kunnen elk product aan meer dan één contactpersoon koppelen en iedere contactpersoon aan meer dan één product koppelen.
Selecteer op deze pagina de optie Gegevens in de linkernavigatiebalk en selecteer vervolgens Tabellen.
Wijzig het tabelfilter om alle tabellen op te nemen.
Standaard worden voorbeeldtabellen niet weergegeven.
Scroll naar beneden, open de tabel Product en selecteer Relaties.
Selecteer Relatie toevoegen>Veel-op-veel.
Selecteer de tabel Contactpersoon voor de relatie.
Selecteer Gereed>Tabel opslaan.
Contactpersonen aan een of meer producten koppelen of ze ontkoppelen
U gaat een andere app maken die lijkt op de app die u eerder in dit onderwerp hebt gemaakt, maar de nieuwe app biedt een veel-op-veel-relatie. Iedere contactpersoon kan meerdere producten reserveren in plaats van slechts één.
Maak in een lege app voor tablets Gallery1 zoals de eerste procedure in dit onderwerp beschrijft.
Voeg nog een leeg verticaal besturingselement Gallery toe, zorg ervoor dat dit de naam Gallery2 krijgt en verplaats het besturingselement vervolgens naar de rechterbovenhoek van het scherm.
Verderop in dit onderwerp voegt u een besturingselement van het type Combo box onder Gallery2.
Stel in de formulebalk de eigenschap Items van Gallery2 in op Gallery1.Selected.Contacts.
Stel op het tabblad Eigenschappen de optie Layout in op Image en titel.
Zorg ervoor dat in Gallery2 het besturingselement Label de naam Title2 heeft en stel de eigenschap Text hiervan in op ThisItem.'Full Name'.
Er verschijnt geen tekst in dat besturingselement totdat u deze procedure hebt voltooid en een contactpersoon aan een product toewijst.
Verwijder NextArrow2, voeg het pictogram Annuleren toe en zorg ervoor dat dit pictogram de naam icon1 heeft.
Stel de eigenschap OnSelect van het pictogram Annuleren in op deze formule:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
Selecteer op het tabblad View de optie Gegevensbronnen.
Selecteer in het deelvenster Gegevens de optie DataSource toevoegen>Microsoft Dataverse>Contacts>Verbinden.
Voeg onder Gallery2 een besturingselement Combo box in, zorg dat dit besturingselement de naam ComboBox1 krijgt en stel de eigenschap Items hiervan in op Contacts.
Stel op het tabblad Eigenschappen de optie Allow multiple selection in op Uit.
Voer een pictogram Add in en stel de eigenschap OnSelect hiervan in op deze formule:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
Met deze app kunnen gebruikers nu vrijelijk een reeks contactpersonen koppelen aan of loskoppelen van elk product.
Als u een contactpersoon aan een product wilt toevoegen, selecteert u de contactpersoon in de keuzelijst met invoervak onder aan het scherm en selecteert u vervolgens het pictogram Add.
Als u een contactpersoon van een product wilt verwijderen, selecteert u het pictogram Annuleren voor deze contactpersoon.
Gebruikers kunnen met een veel-op-veel-relatie dezelfde contactpersoon aan meerdere producten koppelen, terwijl dat met een een-op-veel-relatie niet mogelijk is.
Omgekeerd: producten koppelen aan of loskoppelen van meerdere contactpersonen
Veel-op-veel-relaties zijn symmetrisch. U kunt het voorbeeld uitbreiden en producten aan een contactpersoon toevoegen om vervolgens tussen de twee schermen te schakelen om na te gaan hoe de relatie in beide richtingen eruitziet.
Stel de eigenschap OnVisible van Screen1 in op Refresh( Products ).
Wanneer u een één-op-veel- of veel-op-veel-relatie bijwerkt, worden alleen de gegevens van de eerste argumenttabel van de aanroep Relate of Unrelate vernieuwd. De tweede moet handmatig worden vernieuwd als u tussen de schermen van deze app wilt schakelen.
Duplicaat Screen1.
Het duplicaat krijgt de naam Screen1_1 en vormt de basis om voor het kijken naar de relaties vanaf de kant van de contactpersonen.
Als u de omgekeerde weergave wilt maken, wijzigt u deze formules voor de besturingselementen van 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 )
Het resultaat lijkt erg op dat in het vorige scherm, maar komt uit de relatie aan de kan van de Contacts.
- Screen1_1.OnVisible =
Voeg een pictogram Pijlen naar boven en naar beneden toe en stel de eigenschap OnSelect hiervan in op Navigate( Screen1, None ). Doe hetzelfde voor Screen1 met de formule Navigate( Screen1_1, None ).
Met dit nieuwe scherm kunnen gebruikers een contactpersoon aan een product toevoegen en vervolgens overschakelen naar een weergave van contactpersonen en het bijbehorende product bekijken. De relaties zijn symmetrisch en worden gedeeld tussen de twee schermen.