Dataversessä voi kahden taulun välille muodostaa ns. moni-moneen yhteyden (many-to-many relationsip). Meillä on esimerkiksi opiskelijoita ja kursseja. Yhteen kurssiin liityy aina monta opiskelijaa, mutta samaan aikaan kukin opiskelija liittyy moneen eri kurssiin. Tällöin kurssin ja opiskelijan välillä on ns moni-moneen yhteys.
Dataversen moni-moneen yhteyden hyvä puoli on, että niitä voi käyttää näppärästi model-driven appseissa. Haittapuolena niihin ei voi luoda omia ominaisuuksia (sarakkeita). Esimerkiksi kurssin ja opiskelijan välinen yhteys on itseasiassa ”osallistuminen kurssille”. Osallistumiseen liittyy kaikenlaista tietoa kuten ilmoittautumispäivämäärä ja kurssista saatu arvosana. Mikäli näitä tietoja halutaan tallentaa osallistumiseen, tulee käyttää omaa yhteystaulua Dataversen vakio many-to-many -suhteen sijasta.
Usein näitä moni-moneen yhteyksiä kuitenkin Dataversestä löytyy ja niiden käsittely Canvas Power Appsissa saattaa tuntua hankalalta. Tutustutaankin tällä kertaa hieman siihen, miten tätä mystistä yhteyttä Power Appsissa oikein käsitellään.
Esimerkki – Ideat ja niiden luokittelut
Tehdään yksinkertainen sovellus, jolla käyttäjä ylläpitää ideoita. Idoita voi luokitella eri tavoin.
Luodaan ratkaisua varten Dataverseen 3 taulua.
Ideat
Tänne tallennetaan itse ideat.

Luokittelut (Category)
Täällä taas on kaikki ideoiden luokitteluihin käytettävät luokat.

Luokittelujen arvot (Category value)
Täältä löytyy luokittelujen mahdolliset arvot. Kukin arvo liittyy (LookUp) luokitteluun.

Luokittelujen arvojen ja ideoiden välillä on moni-moneen yhteys. Ideat voivat nyt liiittyä useaan luokitteluarvoon (esim prioriteetti = High ja Impact = 3).

Model-driven Appsissa ideoihin voi lisätä luokitteluja näppärästi.

Mutta miten tämä tehdään Canvas Power Appsissa?
Moni-moneen Canvas Power Appsin lomakkeella
Luodaan valmiin näyttöpohjan avulla sovellus, jolla voi lisätä ja muokata ideoita. Luokittelukenttämme on kuitenkin heti alussa virheessä.

Eikä lomakkeen kentän tiedot näytä lupaavalta. Moni-moneen kentälle on tarjolla ainoastaan kontrolli, joka näyttää arvon. Muokkausta ei tueta.

Ei lannistuta. Vaihdetaan kontrolli esittämään luokittelujen mahdollisia arvoja. Ei näytetä kaikkia, tällä kontrollilla valitaan ainoastaan idean avainsanat.
Filter('Category values', Category.Name ="Keyword")

Vaihdetaan lomakkeen kortin tilaksi Display Mode = Edit ja käydään määrittelemässä mikä Category values -taulun kenttä siinä näytetään (= name).

Nyt meillä on lomake, joka osaa näyttää idean ja sen avainsanat. Mutta se ei osaa vielä tallentaa lomakkeella tehtyjä muutoksia.

Valintojen tallennus
Moni-moneen yhteyksiä muokataan Canvas Power appsissa Power Fx:n Relate ja Unrelate-funktioilla. Pelkkä lomakkeen lähetys tai Patch -komento ei siis riitä. Lisäksi idea ja luokittelujen arvot -taulujen välillä oleva relaatio sisältää myös priorieetit ja vaikutukset. Lomakkeella kuitenkin ylläpidetään ainoastaan idean avainsanoja.
Tietoja tallennettaessa meidän tuleekin tehdä seuraavaa.
Selvittää mitkä avainsanat ideaan oli liitetty ennen tallennusta
UpdateContext({locOldRelated: Filter(CurrentItem.'Category values', Category.Name="Keyword")});
Selvittää mitkä aiemmin tallennetuista avainsanoista käyttäjä poisti (valinta poistettu combo boxista)
UpdateContext({locToUnrelate: Filter(locOldRelated, Not('Category value' in ShowColumns(cmbCategoryValues.SelectedItems,'Category value')))});
Poistaa yhteys (Unrelate) idean ja poistettujen avainsanojen väliltä.
ForAll(locToUnrelate, Unrelate(CurrentItem.'Category values', ThisRecord));
Luoda yhteys (Relate) valittujen avainsanojen ja idean välille.
ForAll(cmbCategoryValues.SelectedItems As SelectedItem,
Relate(CurrentItem.'Category values', SelectedItem));
Kaiken tämän voi tehdä esimerkiksi lomakkeen OnSuccess -tapahtumassa.

Näin meillä on lomake, jolla voi ylläpitää idean moni-moneen suhdetta avainsanoihin.
Entä jos vibe-koodaisin tämän?
No olihan tämä jo hieman kimuranttia. Pääsisikö helpommalla jos vain modernisti vibe-koodaisi lomakkeen?
Ei ainakaan Power Platformin työkaluilla. Generatives pagesilla luotu sivu ei kykene näyttämään ideoiden avainsanoja. Eikä tallentamaan niitä.

Vibe.powerapps.com ei tue (ainakaan vielä) moni-moneen yhteyksiä lainkaan.

Eli perinteisillä työkaluilla mennään. Toistaiseksi.