SharePointin kanssa työtä tekeville on varmasti tullut tutuksi Power Automaten erilaiset toiminnot listojen ja dokumenttikirjastojen kanssa.
Yksi yleisimpiä tarpeita, joihin itse olen törmännyt tässä vuosien aikana, on Power Automate Flowin käynnistäminen, kun SharePoint listassa jokin tietty kenttä saa jonkin tietyn arvon. Tähänhän ei ole olemassa Power Automatessa mitään täysin suoraa tapaa, hieman saa vääntää ruuvia.
Olen tässä esimerkissä tehnyt SharePoint-sivustolle listan käyttämällä mallipohjana ”Issue Tracker” -listaa.
Pohjassa tulee mukana mm. Status-kenttä (alasvetovalikko), jota käytämme tässä esimerkissä.
Haluamme että Power Automate lähtee käyntiin, kun Status-kenttä saa jonkin tietyn arvon. Tässä tapauksessa haluamme, että asioita alkaa tapahtumaan, kun kenttä saa arvon In progress.
Ensimmäiseksi laitetaan listalle versiointi päälle. Versiointi löytyy listan asetuksista. Tarve versioinnille selitetään myöhemmin.
Laitetaan versioille jokin maksimimäärä, minkä haluamme versiohistoriassa säilyttää:
Tallennetaan muutokset.
Sitten lähdetään luomaan itse Power Automate Flowia tuota kyseistä listaa vasten.
Valitaan käynnistimeksi When an item or file is modified.
Tällaisenaan kyseinen käynnistin ei vielä täytä tarpeitamme. Jos jätämme käynnistimen tuollaiseksi, käynnistyy Power Automate Flow aina kun listalla tapahtuu mitä tahansa muutoksia riveissä.
Onneksi voimme hienosäätää tuota käynnistintä sen asetuksista:
Asetusten takaa löytyykin alimpana sopivan oloinen ruuvi, joka voisi täyttää tarpeemme:
Lisätäänpä käynnistimeen ehto Add-painikkeella.
Tämän jälkeen avautuu kenttä, johon tulee kirjoittaa ehtolause käynnistykselle. Dynaaminen sisältö ei tosiaan ole tässä tarjolla, joten ehto pitää muotoilla ”raakana”.
Esimerkissämme haluamme, että Power Automate Flow lähtee käyntiin, kun listan kenttä Status saa arvon In progress.
Muotoillaan ehdoksi:
@equals(triggerOutputs()?[’body/Status/Value’], ’In progress’)
Seuraavaksi testataan toiminta, laitetaan vaikkapa sähköpostin lähetystoiminto seuraavaksi stepiksi:
Tallennetaan Flow ja mennään tekemään testirivi SharePoint-listalle ja muokataan riviä. Mitään ei pitäisi tapahtua ennen kuin rivillä Status muuttuu In progress.
Kun on tarpeeksi muokkailtu riviä, tehdään lopulta muutos Status-kenttään, laitetaan arvoksi In progress.
Nyt Flow:n pitäisi siis lähteä käyntiin:
Mennään tekemään listariville lisää muutoksia ja annetaan Status-kentän olla In progress -tilassa.
Hetkinen, nythän sieltä napsuu posteja aina kun joku päivittää listan riviä Status-kentän ollessa In progress.
Emme todellakaan halua näitä posteja aina kun joku tekee toimenpiteitä riville prosessin tässä vaiheessa!
Tässä vaiheessa astuu kuvioihin aikaisemmin päälle laitettu versioinnin hyödyntäminen!
Avataan Flow taas muokattavaksi ja lisätään ensimmäiseksi toiminnoksi Get changes for an item or a file (properties only).
Id
Laitetaan arvoksi käynnistimestä löytyvä rivin Id.
Since
Tässä halutaan verrata edelliseen versioon, käytetään ilmaisua:
sub(int(triggerOutputs()?[’body/{VersionNumber}’]),1)
Eli vähennetään 1 versio tämänhetkisestä versionumerosta, jolloin saadaan tulokseksi edellinen versio.
Tämän jälkeen tehdään Ehto-haarukointi, jossa tarkastetaan, onko Status-kenttä muuttunut viime versiosta.
- Jos ei ole = Ei tehdä mitään, koska riviä on muokattu Status-kentän jo ollessa In progress -arvossa, näistähän emme halua ilmoituksia.
- Jos on = Lähetetään sähköposti, koska tällöin Status on muuttunut In progress -arvoon jostain muusta arvosta. Näistä haluamme ilmoitukset.
Ehdon arvoksi, jota vasten testataan, laitetaan Get changes for an item or a file (properties only) toiminnon Has Column Changed: Status
Has Column Changed: Status
is equal to
true (boolean ilmaisu)
Tämän jälkeen laitetaan:
Kyllä-haaraan sähköpostinlähetys toiminto.
Ei-haaraan Terminate-toiminto ja siihen arvoksi Cancel.
Nyt on saavutettu tilanne, jossa ilmoitukset lähtevät vain, kun rivin Status-kenttä muuttuu jostain muusta arvosta In progress -arvoon.
Muokkaukset, jotka tapahtuvat rivillä Status-kentän ollessa jo In progress, menevät Ei-haaran Cancel:iin
Huomion arvoista on, että tämä logiikka kerryttää väkisinkin API-kutsuja tunnukselle joka Flowia pyörittää, jos muokkauksia tehdään paljon Status-ehdon täyttyessä (eli muokkaukset, jotka tapahtuvat Status-kentän jo ollessa In progress -tilassa). Toki käynnistimeen tekemämme ehto karsii paljon pois turhia ajoja, joita tapahtuisi, jos käynnistintä käyttäisi sellaisenaan.
”Normaalilla” O365/M365-lisenssillä päiväkohtainen API-kutsujen raja on 2 000.
Tämä on syytä pitää mielessä, jos listalle tekee enemmänkin tällaisia kenttäkohtaisia Floweja tai jos on tiedossa, että jokin tietty kohta prosessissa kerryttää paljon muokkauksia riveille.
– Pilviguru / Huru-ukko Jasu Snell