Viime viikolla rakensimme Power Appsin, jolla pyöritetään erilaisia aloittavaan työntekijään liityviä tehtäviä. Lounaskortin, lisenssien ja läppärin tilaamista jne. Tehtäviä jotka tehdään ennen työntekijän ensimmäistä työpäivää.
Tällä viikolla laajennetaan ratkaisua ja otetaan mukaan tehtävät, joita tehdään työntekijän ensimmäisenä työpäivänä ja sen jälkeen. Näitä tehtäviä varten luodaan Planneriin oma suunnitelma, jonka tehtävät vastuutetaan uudelle työntekijälle ja/tai hänen perehdyttäjälleen (Forward Coach).
Aloitetaan!
Planner – Mallipohja
Aloitetaan luomalla Planner-suunnitelmasta mallipohja, joka aina kopioidaan uudelle työntekijälle ja hänen perehdyttäjälleen.
Ensimmäinen versio näyttää tältä. Työntekijän tehtäviä ovat ne, joita ei ole vastuutettu mallipohjassa. Perehdyttäjän tehtäviä taas ne, jotka on vastuutettu palvelutunnukselle (Marko Fakiiri).

Tulevaisuudessa voimme haluta vastuuttaa tehtäviä näiden kahden roolin lisäksi muillekin, jolloin tämä lähestyminen ei toimi.
Voisimme merkitä roolit myös omilla väreillään (label). Päädyin kuitenkin luomaan tehtävät roolikohtaisiin ämpäreihin (buckets).

Osalla tehtävistä on myös määräpäivä (Due date).
Määräpäivässä vertailukohtana käytetään aina tammikuun ensimmäistä päivää. Mikäli mallipohjan tehtävän määräpäivä on 14. tammikuuta, tarkoittaa se käytännössä määräpäivän olevan henkilön aloituspäivä + 14 päivää.
Flow – Planner-suunnitelman luominen työntekijälle ja perehdyttäjälle
Seuraavaksi luodaan uusi planner-suunnitelma työntekijälle ja hänen perehdyttäjälleen käyttäen hyväksi juuri tekemäämme mallipohjaa. Tämä tehdään tietenkin flow’lla.
Flow tullaan käynnistämään Power Appsista, josta saamme seuraavat tiedot
- Onboardaus-tietueen tunniste (OnboardGUID)
- Uuden työntekijän käyttäjätunnuksen tunniste (User1 GUID)
- Perehdyttäjän käyttätunnuksen tunniste (User2 GUID)
- Työntekijän aloituspäivä (First working day)

Lähtötietojen haku
Seuraavaksi haetaan mallisuunnitelman (Onboarding planner template) ämpärit (buckets) ja tehtävät (tasks).

Tarvitsemme työntekijän ja perehdyttäjän nimet, joten haetaan myös heidän profiilitietonsa.

Tiimin luonti
Luodaan uusi tiimi perehdytykselle ja sen materiaaleille.

Lisätään tiimin jäseneksi tuleva työntekijä ja omistajaksi perehdyttäjä.

Tiimin luomisen jälkeen on odotettava hetki. Muutoin voi käydä niin että suunnitelman luominen menee virheeseen kun omistajaa (tiimi) ei ole muka vielä olemassa.

Planner-suunnitelman luonti
Luodaan tyhjä Planner-suunnitelma, jonka omistajana on juuri luotu tiimi. Parsitaan toiminnon paluuarvo Parse JSON -komennolla myöhempää käyttöä varten.

Suunnitelmassamme kaikki tehtävät ovat yhdessä (To do) ämpärissä. Luodaan sellainen. Plan Id:nä käytetään luodun suunnitelman tunnistetta.

Tehtävien luonti
Vihdoin päästään kopioimaan niitä tehtäviä! Käydään läpi mallisuunnitelman ämpärit (Employee ja Forwarder Coach). Kunkin ämpärin kohdalla suodatetaan (Filter array) tehtäväjoukosta esiin kyseiseen ämpäriin sisältyvät tehtävät.
Suodatusehto on
@equals(item()?['bucketId'], items('Apply_to_each_-_Buckets')?['id'])

Käydään suodatetut tehtävät läpi ja luodaan kustakin kopio suunnitelmaamme.

Luonnissa on kaksi huomioinarvoista kohtaa.
Määräpäiväksi (Due Date Time) asetetaan arvo, mikäli sellainen on myös mallitehtävässä. Määräpäiväksi asetetaan ensimmäinen työpäivä + monesko vuoden päivä (DayOfYear) mallitehtävän määräpäivä on.
if(
equals(items('Apply_to_each_2')?['dueDateTime'],null),
null,
addDays(utcNow(), dayOfYear(items('Apply_to_each_2')?['dueDateTime']))
)
Tehtävän vastuuhenkilö taas riippuu siitä, missä ämpärissä tehtävä on. Työntekijän tehtävät työntekijälle ja perehdyttäjän tehtävät perehdyttäjälle.
if(
equals(items('Apply_to_each')?['name'], 'Employee'),
triggerBody()['text_1'],
triggerBody()['text_2']
)
Suunnitelman lisääminen tiimin välilehdeksi
Lisätään vielä tämä suunnitelma luodun tiimin General-kanavalle omaksi välilehdekseen.
Tarvitsemme tätä varten General-kanavan tunnisteen. Koska luomassamme tiimissä on vain yksi kanava, voimme käyttää List channels-toiminnon palauttamista kanavista ensimmäistä.
first(outputs('List_channels')?['body/value'])?['id']
Kanavan lisääminen tehdään Graph API -kutsulla.

Suunnitelman osoitteen lisäys perehdytyksen tietoihin
Viimeisenä vaiheena päivitetään onboarding-taulun riville luodun suunnitelman osoite (Planner Url).
Flow näyttää kokonaisuudessaan seuraavalta.

Power Apps – Flow’n käynnistys
Flow käynnistetään Onboarding-työkalusta käsin. Lisään sitä varten oma painike, joka on aktiivinen vasta kun työntekijän tietoihin on lisätty hänen tuleva sähköpostiosoitteensa.

Flow’n käynnistyksessä ei voi viitata lomakkeen kenttiin suoraan, joten näytöllä on piilossa kaksi tekstikenttää, joihin työntekijän ja perehdyttäjän käyttäjätunnuksien id:t haetaan.
lblCoachGUID: Text(Office365Users.UserProfileV2(cmbCoach.Selected.'Primary Email').id)
ja
lblEmployeeGUID: Text(Office365Users.UserProfileV2(inpEmpolyeeNewEmail.Value).id)
Näin kaikki on valmista! Miltä tämä näyttää käytännössä?
Aloitetaan luomalla tulevalle työntekijälle (Marko Fakiiri) Planner-suunnitelma. Perehdyttäjäksi (Coach) on merkitty Timo Pertilä.

Teamsiin ilmestyy uusi tiimi. Sen Tasks-välilehdeltä löytyy malipohjan perusteella luotu suunnitelma. Tehtävät on asetettu oikeille henkilöille ja jopa määräajat ovat kohdillaan.

Plannerin osoite löytyy myös aloittavan työntekijä tiedoista.

Yhteenveto
Näin olemme toteuttanet flow’lla Planner-suunnitelman provisioinnin Teamsiin. Yksinkertaisen sellaisen. Flow monimutkaistuu heti jos haluamme kopioida mallisuunnitelmasta mukaan tehtävän kuvaustekstin tai esimerkiksi siihen liittyvät tehtävät (checklist).
Tai mikäli haluamme tehtävien olevan varmasti samassa järjestyksessä kuin ne ovat mallisuunnitelmassa.