Flow’lla toteutettujen työnkulkujen määrä kasvaa organisaatioissa nopeasti. Työnkulut ovat omien kansalaiskehittäjien, IT:n ja/tai ulkopuolisten toimittajien toteuttamia. Usein haasteeksi nousee näiden erilaisten työnkulkujen monitorointi. Onko niiden suorituksissa ollut ongelmia? Mitä ne ovat tehneet? Ovatko ne tehneet mitään?
Voimme seurata tilannetta Power Platform admin centeristä.

Tällöin on yleensä jo myöhäistä.
Flow’n omistajat saavat viikottain myös yhteenvedon, mikäli flow’t ovat päättyneet virheeseen.

Tällöinkin on helposti myöhäistä. Viikon aikana voi tapahtua paljon.
Työnkulkuihin onkin syytä rakentaa mekanismi, joka ilmoittaa häiriöstä. Mutta ilmoitetaan minne? Se tulee luonnollisesti sopia. Olen nähnyt käytettävän ainakin seuravia.
- Luodaan tiketti helpdeskiin
- Lähetetään sähköpostia flow’n tekijälle
- Lähetetään sähköpostia ryhmälle X
- Lähetetään Teams-viesti ryhmälle X
- Lähetetään viesti IT:n Teamsiin kanavaan X
- Lähetetään viesti kyseisen ratkaisun Teamsiin kanavaan X
Tärkeintä on että joku saa tiedon siitä ettei flow toimi normaalisti. Jotta tähän voidaan reagoida.
Käydän seuraavaksi läpi, miten tämä käytännössä tehdään.
Virheestä ilmoittaminen Teams kanavalle
Ensimmäiseksi meidän tulee havaita virhe flow’n suorituksen aikana. Tämä on käyty läpi aiemmassa kirjoituksessa.
Idea on yksinkertainen. Suoritettavat toiminnot ovat yhden scope-toiminnon (1) sisällä. Sen perässä on toinen scope-toiminto (2), joka sisältää virhetilanteessa suoritettavat toiminnot.

Jotta Scope – On Error osuus suoritetaan ainoastaan edeltävän vaiheen päätyttyä virheeseen, tulee sen run after -asetuksia muuttaa.

Näin tartumme virhetilanteeseen. Mutta mitä teemme Scope – On Error osion sisällä?
Viestin lähettämminen
Haluamme lähettää viestin Teamsiin. Viestistä
- käy ilmi minkä niminen työnkulku on mennyt virheeseen
- näkee missä ympäristössä sitä on suoritettu
- pääsee avaamaan flow’n suoritushistoriasta virheeseen mennen suorituksen
Onneksemme näitä tietoja ei tarvitse kovakoodata työnkulkuun. Flow’n workflow()-funktio palauttaa nimittäin seuraavanlaisen tietopaketin.
{
"id": "/subscriptions/754abb9d-e636-47dd-b406-0a8f58702e36/xxxxxx",
"name": "e9204d0e-d58c-55c9-874f-3d30470907a1",
"type": "Microsoft.Logic/workflows",
"location": "westeurope",
"tags": {
"flowDisplayName": "Error Handling Vol2",
"environmentName": "fabc5837-e335-4410-aaba-1b943979cf9c",
"logicAppName": "e9204d0e-d58c-55c9-874f-3d30470907a1",
"environmentWorkflowId": "fabc5837:2De335:2D4410:2Daaba:xxxxx",
"xrmWorkflowId": "dcb8736b-3f48-ec11-8c62-000d3adeadbd",
"environmentFlowSuspensionReason": "fabc5837:2De335:2D4410:2Daaba:x-None",
"sharingType": "CommonDataService"
},
"run": {
"id": "/subscriptions/754abb9d-e636-47dd-b406-0a8f58702e36/resourceGroups/x",
"name": "08585643849809129753439549826CU132",
"type": "Microsoft.Logic/workflows/runs"
}
}
Sieltä löytyy lähes kaikki, mitä tarvitsemme.
Lisätään On Error – osion alkuun Parse JSON -toiminto, joka parsii workflow()-funktion tuloksen helpommin käytettävään muotoon.

Näin meillä on käytössämme työnkulun tiedot. Lukuunottamatta ajoympäristön nimeä. Mikäli haluamme sisällyttää viestiin myös sen, tulee meidän hakea vielä kaikkien ympäristöjen tiedot (List My Environments).

Tämän jälkeen suodatamme (Filter array) ympäristölistasta esiin haluamamme rivin (ympäristö, jossa flow’ta parhaillaan ajetaan).

Lähetetään lopuksi IT:n Teams kanavalle ilmoitus.

Flow’n nimi (flowDisplayName) löytyy parsitusta workflow()-funktion tuloksesta. Ympäristön nimi taas on Filtter Array:llä suodatetun tulosjoukon ensimmäisen (ja ainoan) alkion displayName.
first(body('Filter_array'))?['properties']?['displayName']
Harjoituksen hankalin osuus on luoda hyperlinkki kyseiseen flow’n suoritukseen.
Lisätään viestiin teksti (1) joka määritellään hyperlinkiksi (2,3).

Vaihdetaan koodinäkymään (4). Ja lisätään linkin kohteeksi concat-funktiolla kasaan parsittu osoite.

Käytetty funktio on seuraava.
concat('https://emea.flow.microsoft.com/manage/environments/',body('Parse_JSON_-_Workflow()')?['tags']?['environmentName'],'/flows/',body('Parse_JSON_-_Workflow()')?['name'],'/runs/',body('Parse_JSON_-_Workflow()')?['run']?['name'])
Mikäli flow’ssa tapahtuu virhe, tulee IT:n Teamsiin seuraava viesti.

Linkistä aukeaa virheellinen suoritus.

Suorituksesta näemme, ettei flow pääty virhetilaan. Koska ohitamme virheen ja jatkamme matkaa On Error -osioon.
Lisätään On Error scopen viimeiseksi toiminnoksi Terminate, jolla saadaan flow’n lopputilaksi failed.
Nyt flow näyttää kokonaisuudessaan seuraavalta.

Mikä parasta, voit kopioida koko virheenkäsittelyn (Scope – On Error) sellaisenaan toiseen flow’hun.
Tiedoksi – N toimenpidettä tehty
Ajoittain haluamme välittää tiedon myös onnistuneista flow’n suorituksista. Kuvitellaan tilanne jossa flow tarkistaa päivittäin puuttuuko taulun X joltain riviltä arvo sarakkeesta Y. Mikäli puuttuu, lähetetään muistus rivin vastuuhenkilölle.
Normaalitilanteessa puuttuvia arvoja ei ole. Mutta jos sellainen löytyy, haluaa myös IT siitä tiedon. Lisäksi flow’n suoritushistoriasta olisi hyödyllistä erottaa suoritukset, jotka ovat lähettäneet muistutuksia.
Käytännössä teemme flow’ssa seuraavaa
- Haetaan rivit, joilta puuttuu vaadittava tieto (Get items)
- Mikäli tällaisia rivejä ei löytynyt (length(outputs(’Get_items’)?[’body/value’]) = 0), päätetään Terminate komennolla flow’n suoritus Cancelled tilaan.
- Mikäli toimenpiteitä vaativia rivejä löytyi, lähetetään asianosaisille muistutus ja lopuksi IT:lle viesti montako muistutusta lähti.
- Mikäli työnkulussa joku vaihe menee virheeseen, lähetetään myös siitä tieto IT:lle (Scope – On Error)

Mikäli ajossa jäi jotain haaviin, lähetetään IT:n Teamsiin tämännäköinen viesti.

Nyt suoritushistoriasta erottaa ajot, jotka ovat lähettäneet muistutuksia.
