Microsoft ohjeistaa uudelleenjulkaisemaan PowerAppsit säännöllisesti. Näin pääsee nauttimaan bugikorjauksista ja suorituskykyparannuksista, joita Microsoft alustaan on tehnyt.

Vauhti on sitä luokkaa, että korjauksia ja parannuksia riittää.

Mutta kuka muistaa ja jaksaa uudelleenjulkaista säännöllisesti PowerAppsinsa?

Ei kukaan.

Siksi koko uudelleenjulkaisuprosessi on syytä automatisoida. Tietenkin Flow:lla.

PowerAppsin voi julkaista vain, jos siihen on muokkausoikeudet (editor). Pelkät ympäristön administrator-oikeudet eivät riitä.

Tämän vuoksi lisätään ensin oma hallitaryhmämme (PowerPlatformAdmins) muokkaajaksi kaikkiin organisaation PowerAppseihin.

Tämä on myös hallintamielessä järkevä käytäntö. Ilman mitään automatisoitua uudelleenjulkaisua.

Vielä pitäisi tehdä pari Flow:ta, niin homma on valmis.

Flow 1 – Hallintaryhmän lisääminen jokaiseen PowerAppsiin muokkaajaksi

Tämä Flow käynnistyy kerran päivässä. Alustetaan ensimmäisenä muuttuja (isAdminAllreadyAdded), johon tallennetaan tieto siitä onko PowerApps jo jaettu PowerPlatformAdmins ryhmälle.

Näyttökuva 2019-8-19 kello 18.58.39.png

Seuraavaksi haetaan kaikki ympäristöt (List Environments as Admin) ja käydään ne läpi (Apply to each). Kunkin ympäristön kohdalla haetaan kaikki siellä majailevat PowerAppsit (Get Apps as Admin).

Näyttökuva 2019-8-19 kello 19.00.40.png

 

Jokaisen PowerAppsin kohdalla alustetetaan isAdminAllreadyAdded -muuttujan arvoksi false. Emme vielä tiedä, onko IT:n ryhmä aiemmin lisätty PowerAppsin muokkaajiksi.

Tämän jälkeen haetaan PowerAppsin käyttäjät Get App Role Assignments as Admin -toiminnolla. Parametreina ovat

  • Environment Name
  • PowerApp Name

Näyttökuva 2019-8-19 kello 19.05.54.png

Flow-editori lisää automaattisesti tarvittavan Apply to each -toiminnon.

Näyttökuva 2019-8-19 kello 19.11.04.png

 

Seuraavaksi käydään läpi PowerAppsin käyttäjät. Mikäli niiden joukosta löytyy käyttämämme hallintaryhmä, päivitetään muuttujan isAdminAllreadyAdded arvoksi true.

Näyttökuva 2019-8-20 kello 18.22.37

Lopuksi tarkistetaan, oliko ryhmällä tarvittavat oikeudet. Mikäli ei ollut, annetaan ne Edit App Role Assignment as Admin -toiminnolla.

  • Role NameCanEdit
  • Principal Object IDPowerPlatformAdmins –ryhmän ID
  • Principal Type – 4 (= security group)

Näyttökuva 2019-8-20 kello 18.26.22.png

Vinkki: Kun vertaat ehdossa, onko boolean muuttujan arvo true, voit käyttää tähän bool(true) -lausetta.

Näyttökuva 2019-8-19 kello 19.16.09.png

Ja sitten tarkkana!

PowerAppsien seassa on kahdenlaisia PowerAppseja, joita ei voi jakaa muiden PowerAppsien tapaan.

  • PowerAppsit, jotka eivät ole itsenäisiä sovelluksia, vaan SharePoint-listan muokattuja lomakkeita (SharePoint Form). Näitä ei jaeta käyttäjille, vaan ne perivät käyttöoikeudet SharePoint-listalta, johon ne on liitetty.
  • PowerAppsit, jotka sisältyvät paketoituun ratkaisuun (Solution package).

Ensimmäisen kohdalla Get App Role Assignments as Admin –toiminto päättyy virheeseen. Toisen kohdalla virheeseen menee taas Edit App Role Assignment as Admin -toiminto.

Muokataan Flow:ta vielä hieman. Kerätään muuttujiin talteen

  • Monelleko PowerAppsille IT:n ryhmä lisättiin
  • Mitkä SharePoint-listan muokatut lomakkeet ympäristöstä löytyi (= ei voida hakea PowerAppsin käyttäjiä)
  • Mitkä PowerAppsit ovat osana paketoituja ratkaisuja (= ei voida lisätä ryhmää editoriksi)

Valmis työnkulku näyttää tältä.

Näyttökuva 2019-8-20 kello 18.49.29.pngNäyttökuva 2019-8-20 kello 18.49.51

Nyt kaikki (canvas) PowerAppsit on jaettu sopivalle IT:n käyttämälle ryhmälle. Mikäli PowerAppsin omistaja poistaa ryhmän muokkaajista, lisätään se seuraavana päivänä taas automaattisesti uudelleen.

PowerAppsit on otettu väkisin IT:n haltuun.

Huom! Kannattaa hetken miettiä, mitkä PowerAppsit otetaan pakotetusti IT:n haltuun. Halutaanko ottaa kaikki, mukaanlukien käyttäjien omat kokeilut ja testit. Vai lisätäänkö IT:n ryhmä muokkaajien joukkoon vasta silloin, kun PowerApps on jaettu vähintään yhdelle henkilölle tai ryhmälle. Jolloin voidaan olettaa sen olevan oikeassa käytössä.

Flow 2 – Organisaation PowerAppsien automaattinen uudelleenjulkaisu

Ja sitten itse asiaan. PowerAppsien automaattiseen uudelleenjulkaisuun.

Tämä Flow ajetaan viikottain. Alustetaan alkuu pari tarvittavaa muuttujaa (VersionName ja LifeCycleId).

Näyttökuva 2019-8-21 kello 18.30.07.png

Alkuosa on identtinen edellisen esimerkin kanssa. Haetaan kaikki ympäristöt.

Näyttökuva 2019-8-21 kello 18.31.08.png

Jonka jälkeen haetaan ympäristön PowerAppsit. Ympäristön nimi (Environment name) löytyy edellisen toiminnon palauttamista arvoista.

Näyttökuva 2019-8-20 kello 21.39.19.png

Ympäristöjä voi olla useita, joten Flow luo automaattisesti käytä kaikkiin (For each) -toiminnon.

nc3a4yttc3b6kuva-2019-8-20-kello-21.41.34.png

Meitä kiinnostaa PowerAppsit, joiden edellisestä julkaisusta on yli 90 päivää. Eli joiden AppVersion < utcNow() – 90d.

Näyttökuva 2019-8-21 kello 18.19.30.png

Mikäli ehto täyttyy, uudelleenjulkaisemme PowerAppsin. Emme kuitenkaan halua tehdä julkaisua, mikäli PowerAppsista on julkaisemattomia työversioita.

Jos julkaisisimme alla olevan kuvan PowerAppsin, tulisi versiosta 6 uusi julkaistu versio. PowerAppsin tekijä tuskin haluaa näin tapahtuvan. Hänellä on todennäköisesti PowerAppsin kehitys vielä kesken.

Näyttökuva 2019-8-20 kello 21.47.18.png

Selvitetään siis seuraavaksi, onko PowerAppsin viimeisin versio jo valmiiksi julkaistu. Mikäli on, voimme suorittaa uudelleenjulkaisun. Muussa tapauksessa lähetämme PowerAppsin omistajalle pyynnön hoitaa julkaisu itse, mikäli se on mahdollista.

Tarvittavat tiedot löytyvät PowerAppsin versiohistoriasta, joka saadaan esiin Get App Versions –toiminnolla.

Näyttökuva 2019-8-20 kello 21.43.24.png

Se palautaa kilometrin pituisen vastauksen, jossa jokaisesta PowerAppsin versiosta on kerrottu vaikka mitä.

Olemme kiinnostuneita ainoastaan sovelluksen viimeisestä versiosta, joka on vastauksessa ensimmäisenä. Poimitaan se käyttöömme first-lauseella.

Näyttökuva 2019-8-20 kello 21.57.24.png

Tämän jälkeen parsitaan tämän viimeisen version tiedot Jäsennä JSON -toiminnolla.

Näyttökuva 2019-8-20 kello 22.01.19

Parsimisessa käytetään seuraavaa rakennetta (schema).

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "properties": {
      "type": "object",
      "properties": {
        "lifeCycleId": {
          "type": "string"
        }
      }
    }
  }
}

Näin meille jää käsiteltäväksi vain kiinnostava osuus

  • Version nimi (name)
  • Version julkaisun tila (lifeCycleId)

Tallennetaan nämä muuttujiin, jolloin niitä on helpompi käyttää jatkossa.

Flow for publishing - set variables.png

Mikäli viimeisimmän version LifeCycleId -kentän arvo on Published, on se julkaistu. Tällöin voimme julkaista sen uudelleen.

Flow for publishing - is published.png

 

Mutta… Tuoreinta versiota ei voi suoraan uudelleenjulkaista. Siitä on tietenkin tehtävä ensin uusi versio. Tämä onnistuu Restore App Version -toiminnolla. Käytänössä palautamme tuoreimman version uudeksi julkaisemattomaksi versioksi.

Flow for publishing - restore.png

Vihdoin pääsemme suorittamaan itse julkaisun.

Flow for publishing - publish.png

Mikäli PowerAppsin viimeisintä versiota ei oltu julkaistu, lähetetään omistajalle sähköpostia.

Flow for publishing - email to owner.png

Ja jälleen tarkkana!

PowerAppsilla muokatut SharePoint-listojen lomakkeet aiheuttavat jälleen harmaita hiuksia.

  • Get App Versions -toiminto on tarkoitettu PowerAppsin muokkajalle. Mikäli sinulla ei ole oikeuksia SharePoint-listaan, jonka lomaketta on muokattu, et voi toimintoa tehdä (Forbidden).
  • Mikäli muokkaat SharePoint-listan lomaketta PowerAppsilla ja tämän jälkeen poistat listan, jää ko PowerApps kuitenkin järjestelmään (NotFound).

Yllämainituista syistä teemme muutaman lisäyksen työnkulkuun. Lopputulos näyttää tältä.

flow for publishing all.png

 

Vaadittavat käyttöoikeudet ja lisenssit

Yllä esitellyt esimerkit edellyttävät käyttäjiltään joko

  • kaikkiin ympäristöihin System Administrator -oikeudet,
  • tenantin Dynamics 365 service administrator -oikeudet tai
  • tenantin Global Administrator –oikeudet.

Lisäksi käyttäjällä tulee olla PowerApps P2 -lisenssi. Tämä vaatimus tulee tosin poistumaan lokakuun lisenssimalliuudistuksen myötä.

Yhteenveto

Power Platformin hallintayhdistimet (connectors) ovat mahtavia. Niiden avulla voi automatisoida tylsät ja hankalat ympäristöjen hallintaan liittyvät toimet.

Mikäli esimerkin kaltainen täysautomaatio tuntuu rajulta, voit tehdä kevyemmän version. Keräät Flow:lla ympäristöistä listat PowerAppseista joita ei ole

  • julkaistu 90 päivän sisällä
  • jaettu IT:n hallintaryhmälle

Teet sitten manuaalisia toimia tämän tiedon pohjalta.

Lupaan että kyllästyt pian ja haluat automatisoida tämänkin työn.