Power Platform ympäristöissä, jotka käyttävät Dataverseä (tai Dataverse for Teamsia), on kussakin oma käyttäjähallintansa. Henkilöstä tulee ympäristön käyttäjä, kunhan hän on ympäristöä vastaavan AAD tai M365 -ryhmän jäsen.

Lisäksi hänellä tulee olla Dataversen käyttöön oikeuttava lisenssi.

Dataverse for Teamsissa riittää, että henkilö on kyseisen tiimin jäsen.

Hienoa.

Vastoinkäymiset alkaa, kun selviää ettei uuden käyttäjän lisääminen ympäristöä vastaavaan ryhmään (tai tiimiin) lisää häntä välittömästi ympäristön käyttäjäksi. Mikäli uudelle käyttäjälle jaetaan ympäristöstä sovellus ja hän avaa sen, lisätään hänet ympäristön käyttäjäksi. Muussa tapauksessa käyttäjä valuu ympäristön käyttäjäksi määrittelemättömän ajan sisällä.

Useimmiten tämä ei ole ongelma.

Kuvitellaan kuitenkin sovellus, jossa käsitellään rivejä. Kullakin rivillä on vastuuhenkilö, joka myös osallistuu rivien käsittelyyn prosessin aikana. Vastuuhenkilö on siis myös työkalun käyttäjä.

Luomme siis riville relaation Users-tauluun, joka kertoo rivin vastuuhenkilön.

Mitä tapahtuu kun järjestelmään tulee uusia käyttäjiä, jotka toimivat vastuuhenkilöinä? Heidät lisätään tietenkin oikeaan AAD/M365-ryhmään. Mutta heille ei voi vastuuttaa rivejä, ennen kuin heitä vastaava käyttäjä on luotu Dataverseen. Ja tähän voi mennä yllättävän kauan…

Käyttäjien reaaliaikainen synkronointi Dataverseen

Mikäli käyttäjien luomisen viiveestä syntyy ongelma, löytyy helpostusta flow’n Force Sync user -toiminnosta.

Sillä voi päivittää AAD-käyttäjän tiedot Dataverseen. Toiminnon suorittaminen edellyttää ylläpitäjän oikeuksia.

Dataverse for Teams

Dataverse for Teamsin kohdalla tilanne on suoraviivainen. Tyypillisesti tällöin ei ole erillistä testi/kehitys- ja tuotantoymäristöä. Luodaan flow, joka käynnistyy aina kun henkilö lisätään (tai poistetaan) tiimin taustalla olevaan M365-ryhmään. Tämän jälkeen kyseinen henkilö päivitetään ympäristön käyttäjäksi.

Flow’ssa on kovakoodattu sekä käytettävä M365-ryhmä, että ympäristö. Triggerissä käytettävää ryhmä id:tä ei edes pysty parametrisoimaan.

Silti tämä on soiva peli useimmissa tilanteissa.

Dataverse

Kuvitellaan ratkaisu, jota siirrellään ympäristöjen välillä.

Mikäli eri ympäristöissä käyttäjät määräytyvät saman M365-ryhmän perusteella, voimme käyttää edellä kuvattua ratkaisua. Vaihdamme vain ympäristöksi ajoympäristön id:n. Sen saa kaivettua workflow()-komennolla.

workflow().tags.environmentName

Useimmiten eri ympäristöissä käytetään kuitenkin eri ryhmiä määrittelemään käyttäjät. Tällöin voidaan luoda ympäristömuuttuja, johon tallennetaaan kyseisessä ympäristössä käytettävän ryhmän id.

Ja sitten ajastetusti päivitetään koko ryhmän käyttäjät Dataverseen.

Näin flow’n voi turvallisesti siirtää ympäristöstä toiseen. Siellä ei ole kovakoodattuja arvoja.

Ei tämä ajastettu lähestyminen ole kuitenkaan kovin järkevä. Käyttäjiä lisätään ja poistetaan todennäköisesti harvakseltaan.

Käyttäjien päivittäminen Power Appsista

Entäpä jos Dataversen käyttäjiä voisi päivittää suoraan sovelluksesta, jota käyttäjät muutoinkin käyttävät? Voimme aina luoda painikkeen, joka käynnistää yllä esitellyn flow’n.

Mikäli haluamme pärjätä ilman flow’ta, meidän tulee ensin luoda vielä toinen ympäristömuuttuja, johon tallennamme ympäristön id:n.

Lisätään Power Appsiin tarvittavat Dataversen taulut sekä PowerPlatformforAdmins -yhdistin.

Sync users -painikkeesta suoritetaan seuraava koodi.

  • Haetaan ympäristömuuttujasta (M365 group for Users) muuttujaan (gblM365Group) käytettävä ryhmä
  • Haetaan ympäristömuuttujasta (Current environment) muuttujaan (gblCurrentEnvironmentName) ympäristö, jossa ollaan
  • Haetaan ryhmän jäsenet ja päivitetään kukin ympäristön käyttäjiin (AddAdminPowerAppsSyncUser).
Set(
    gblM365Group,
    LookUp(
        'Environment Variable Values',
        'Environment Variable Definition'.'Display Name' = "M365 group for Users"
    ).Value
);
Set(
    gblCurrentEnvironmentName,
    LookUp(
        'Environment Variable Values',
        'Environment Variable Definition'.'Display Name' = "Current environment"
    ).Value
);
ForAll(
    Office365Groups.ListGroupMembers(gblM365Group).value,
    PowerPlatformforAdmins.AddAdminPowerAppsSyncUser(
        gblCurrentEnvironmentName,
        ThisRecord.id
    )
)

Näin painiketta painamalla M365-ryhmän jäsenet päivitetään Dataverseen.

Mikäli tämä kuulostaa raskaalta, voimme antaa käyttäjän valita tenantin käyttäjän ja päivittää ainoastaan valitun käyttäjän tiedot.

Mikäli päädyt jompaan kumpaan vaihtoehtoon, on toiminto syytä piilottaa käyttäjiltä joilla ei ole tarvittavia oikeuksia. Muutoin syntyy vain hämmennystä.

Yhteenveto

Mikäli ratkaisussa on tarve saada uudet käyttäjät välittömästi näkyville, käyttäisin ensimmäisenä esittelemääni lähestymistä. Flow, joka käynnistyy kun M365-ryhmään lisätään/poistetaan käyttäjiä. Kevyttä ja nopeaa.

Mikäli ratkaisua siirretään ympäristöstä toiseen, loisin tämän flow’n kaikkiin ympäristöihin ja varmistaisin ettei se se ole mukana siirrettävissä ratkaisupaketeissa.

Mikäli ympäristön käyttäjiä hallitaan AAD-ryhmän avulla, tarjoaisin pääkäyttäjille tavan päivittää koko käyttäjäkannan kerralla. Tämä voisi tapahtua esimerkiksi Power Appsista painiketta painamalla.