Työpaikkamme tuntikirjaussovellus on erinomainen esimerkki Power Platform -kehittämisestä. Aluksi tehtiin todella kevyt toteutus (sekä työpöytä, että mobiiilikäyttöön), jolla pääsi kirjaamaan tunteja.

Työkohteiden ja työntekijöiden lukumäärän kasvaessa nostettiin esille tarve lisätä omia työkohteita ns. ”suosikeiksi”. Toiminnallisuus toteutettiin ja näin tuntien kirjaaminen jälleen helpottui.

Seuraava pieni viilaus oli olemassa olevan kirjauksen kopiointi.

Työkalua kehitetään pikkuhiljaa tarpeen mukaan.

Josta päästään luontevasti päivän aiheeseen.

Lomien merkitseminen

Viimeisenä päivä ennen talvilomaani tein jälleen kerran ne tutut rutiinitehtävät.

  • lisäsin jokaiselle lomapäivälle 7.5h tuntikirjauksen (vuosiloma)
  • merkitsin kalenteriini olevani lomalla
  • muokkasin ja ajastin automaattisen vastausviestin sähköpostiin
  • merkitsin jaettuun lomakalenteriin (SharePoint) olevani lomalla

Päätin samalla, että tämä sai olla viimeinen kerta. Kesälomiin mennessä täytyy olla joku mielekkäämpi tapa. Näin syntyi loma-sovellus, joka päätyi tuntikirjaussovelluksemme lisäominaisuudeksi.

Miten sellainen tehdään?

Käyttöliittymä (Power Apps)

Lomien merkitseminen (My Vacations) löytyy tuntikirjaussovelluksessa valikon takaa.

Koko toiminnallisuus on yhdellä näytöllä. Vasemman puolen lomakkeella voi lisätä lomia, jotka näkyvät oikean puoleisessa galleriassa.

Uusi loma lisätään kertomalla seuraavat tiedot

  • Loman alku- ja loppupäivä
  • Vuosilomakirjausten kirjausselite (oletuksena Vacation)
  • Lisätäänkö loma jaettuun lomakalenteriin?
  • Lisätäänkö loma henkilökohtaiseen kalenteriini? Mikäli lisätään niin millä otsikolla?
  • Asetetaanko loman ajaksi automaattinen vastausviesti? Viesti muodostetaan automaattisesti, mutta sitä voi vapaasti muokata

Tiedot tallennetaan Dataverseen omaan tauluun (Employee vacation). Näin eri järjestelmiin luodut lomamerkinnät voidaan tarvittaessa perua.

Työkalun tekemät toimenpiteet on jaettu omiin työnkulkuihinsa, jotka käynnistetään rinnakkain (Concurrent) Save-painikkeesta.

Mitä näissä työnkuluissa tapahtuu?

Tuntikirjausten teko (Flow)

Ensimmäisenä luodaan tuntikirjaukset loma-ajalle.

  • Haetaan ympäristömuuttujasta (Environment variable) vuosilomaa vastaavan työkohteen tunniste
  • Parsitaan Power Appsista JSON-muodossa saatu parametri (lomapäivät, tuntiselitteet ja lomailijan tunniste)
  • Käydään lomapäivät läpi ja lisätään jokaiselle tuntikirjaus

Eli aivan perustekemistä. Mutta miten luomme tuntikirjaukset ainoastaan arkipäiville? Lomahan voi olla useamman viikon pituinen.

Tämä hoidetaan Power Appsissa. Siellä luodaan kokoelma, joka sisältää ainoastaan arkipäivät käyttäjän valitsemalta väliltä.

  1. Luodaan Sequence-komennolla taulukko, jossa on annetun lomajakson verran nousevia numeroita. Viikon lomalle siis [0,1,2,3,4,5,6]
  2. Käydään tätä taulukkoa hyödyntäen lomajakso läpi ja lisätään kokoelmaan (colVacationDays) ainoastaan arkipäivät (Weekday välillä 2-6)
  3. Kokoelmaan lisätään samalla kirjausselite ja käyttäjän tunniste
ForAll(Sequence(dpEnd.SelectedDate - dpStart.SelectedDate + 1,0),
 If(
    Weekday(dpStart.SelectedDate + Value) > 1 
      And Weekday(dpStart.SelectedDate + Value) < 7,
    Collect(
      colVacationDays,
      {
       date: dpStart.SelectedDate + Value,
       Description: inpHourEntryDescription.Text,
       User: varCurrentCDSUser.User
      }
    )
  )
)

Muodostettu kokoelma välitetään JSON-muodossa Flow’lle.

Addhourentriesforthevacation.Run(JSON(colVacationDays,JSONFormat.IndentFour))

Näin itse Flow pysyy mukavan yksinkertaisena.

Kalenterimerkintä jaettuun kalenteriin (Flow)

Jaettu lomakalenteri löytyy SharePointista. Luodaan sinne loma-ajalle merkintä. Oleellista on palauttaa luodun kalenterimerkinnän tunniste Power Appsille. Haluamme tallentaa sen, jotta tehty kalenterimerkintä voidaan helposti myös halutessa poistaa.

Power Appsista käynnistettävä Flow käyttää Power Appsin käyttäjän yhteyksiä (connections). Kalenterimerkintä luodaan siis hänen nimissään.

Lomamerkintä näyttää seuraavalta.

Kalenterimerkintä omaan kalenteriin (Flow)

Merkinnän tekeminen henkilökohtaiseen kalenteriin on pykälän työläämpää. Käyttäjällä voi olla useita kalentereita, joten ensin tulee selvittää mikä näistä on hänen oletuskalenterinsa.

  • Haetaan kaikki käyttäjän kalenterit
  • Suodatatetaan (Filter array) kalenterijoukkoa siten, että jäljelle jää ainoastaan oletuskalenterit
  • Tehdään kalenterimerkintä oletuskalenterista (joita on yksi) ensimmäiseen

Tämän jälkeen kaikki onkin helppoa. Palautetaan jälleen luodun kalenterimerkinnän tunniste Power Appsille.

Ja jälleen… Koska Flow suoritetaan Power Appsia käyttävän käyttäjän yhteyksillä, tässä käsitellään hänen henkilökohtaista kalenteriaan.

Out of Office viesti (Flow)

Viimeinen Flow asettaa käyttäjälle ajastetun poissaoloviestin.

Kas näin.

Lomarivin tallennus Dataverseen

Flow’den tehtyä työnsä, tallennetaan Power Appsissa työntekijän lomarivi Employee vacations -tauluun. Näin mukaan saadaan luotujen kalenterimerkintöjen tunnisteet.

Patch(
  'Employee vacations',
  Defaults('Employee vacations'),
  {
    Name: varCurrentUser.FullName & " " & dpStart.SelectedDate & "-" & dpEnd.SelectedDate,
    Start: dpStart.SelectedDate,
    End: dpEnd.SelectedDate,
    'Create event in shared calendar': chkSharedCalendar.Value,
    'Create event in personal calendar': chkPersonalCalendar.Value,
    'Use Out of Office ': chkOutOfOffice.Value,
    'Personal calendar event id': varMyCalendarEventId,
    'Shared calendar event id': varSharedCalendarEventId
  }
)

Lisätty loma näkyy oikean laidan ”Minun lomani” galleriassa.

Tarkemmin ottaen listalla näytetään ainoastaan lomat, jotka eivät ole vielä päättyneet. Menneitä lomamerkintöjä ei ole tarpeen päästä perumaan.

Filter('Employee vacations', 'Employee vacations (Views)'.'User own Vacations', End > Today())

Lomamerkintöjen peruminen (Flow)

Mikäli käyttäjä haluaa perua lomamerkinnän, käynnistetään roskakori-ikonista työnkulku joka

  • poistaa lomakirjaukset lomamerkinnän ajalta
  • asettaa poissaoloviestin passiiviseksi
  • poistaa kalenterimerkinnän jaetusta kalenterista
  • poistaa kalenterimerkinnän omasta kalenterista
  • poistaa lomamerkintä rivin Dataversestä

Siivosusajo (Flow)

Menneillä lomamerkinnöillä ei tehdä mitään. Lomathan löytyy tuntikirjauksista ja kalentereista. Siivotaan dataversestä kuukausittain vanhat lomaerkinnät.

Yhteenveto

Näin kaikki on valmista. Ei kyllä jää ikävä niitä manuaalisia rutineeja.

Ratkaisulla on muutakin iloa.

  • Kaikki eivät aseta poissaoloviestiä ja/tai tee omaan kalenteriin loma-ajan merkintää. Ja joskus niiden teko kiireessä vain unohtuu. Nyt kun kaikki tehdään yhdestä paikasta, ei näin pääse (niin helposti) enää käymään.
  • Organisaatio voi tarjota työntekijöidensä käyttöön vakiomuotoisen poissaoloviestin. Tai vaikka useamman vaihtoehdon.

Jos omassa organisaatiossasi on näiden lisäksi vielä muita rutiineja lomalle lähdön kynnyksellä, niin sinne vain listan jatkeeksi. Voit tietenkin automatisoida prosesseja cloud flow’n lisäksi myös desktop flow’lla (RPA).

Kaikki mitä (helposti ja kustannustehokkaasti) voi, kannattaa ja tulee automatisoida.