Tiimit (Teams) ovat vauhdilla syrjäyttämässä perinteiset SharePoint-työtilat. Jos ja kun näin käy, tarvitaan työkalu, jolla loppukäyttäjä voi tilata eri tarpeisiin viritettyjä tiimejä.

Tällaista automatisoitua tilauskokonaisuutta kutsutaan usein provisionniksi. Kuvio on yksinkertainen

  • Käyttäjä täyttää tilauslomakkeen
  • Tilaus lähtee hyväksyttäväksi
  • Mikäli tilaus hyväksytään, tiimi luodaan automaattisesti

Jotta tässä olisi mitään ideaa, tulee käyttäjän tilauslomakkeella antamien tietojen vaikuttaa lopputulokseen. Eli siihen millainen tiimi automatisoidusta putkesta tulee ulos.

Provisoiniin rakentaminen tuli mahdolliseksi Microsoftin julkaistessa Microsoft Graph -rajapinnat Teamsin hallintaan.

Arvasit oikein! Tällä kertaa toteutetaan tiimien provisiointiratkaisu. Ja ilman riviäkään koodia.

Esimerkkitoteutus on seuraavanlainen

  • Käyttäjä voi tilata tiimin joko projektin tai tiimin käyttöön (= kaksi mallipohjaa)
  • Tilaajasta tulee automaattisesti tiimin omistaja
  • Käyttäjä voi tilausvaiheessa halutessaan nimetä myös muut tiimin omistajat (owner) ja jäsenet (member)
  • Mikäli käyttäjä tilaa yksityisen (private) tiimin, täytyy hänen erikseen perustella miksi se on yksityinen (organisaatio haluaa tiimien olevan avoimia)
  • Yksityiset tiimit hyväksytään ennen luontia. Julkiset tiimit luodaan automaattisesti

Aloitetaan!

Vaihe 1 – Mallipohjien luominen

Tehdään ensimmäisenä mallipohjat eri tiimityypeille. Sama tarina kuin SharePointin työtilapohjien kanssa. Provisioinnin rakentaminen on helppoa. Toimivien mallipohjien suunnittelu ei välttämättä niinkään.

Luodaan kaksi tiimiä (template_tiimi ja template_projekti). Tehdään niihin seuraavat muutokset.

  • Luodaan valmiiksi tyypilliset kanavat (channel)
  • Poistetaan kaikista kanavista linkit Wiki-sivustoihin (koska en tykkää niistä)
  • Lisätään tiimi-pohjaan
    • linkki tuntikirjaus-raporttiin (Power BI)
    • linkki intranetin HR-sivuille, josta löytyy infoa mm poissaoloihin ja työterveyteen liittyen
  • Lisätään projekti-pohjaan linkki projektiprosessi-sivuille, sekä valittuja linkkejä muihin projekteja yleisesti kiinnostaviin resursseihin

teams teamplates.png

Mallipohjista voi halutessaan kopioida luotavaan tiimiin

  • käyttäjät (members)
  • välilehdet (tab)
  • sovellukset (app)
  • asetukset (settings)
  • kanavat (channels)

Mallipohjan omistajat (owners) kopioituvat uuteen tiimiin väkisin. Ne voi toki prosessissa automaattisesti poistaa.

Etenemme näillä kahdella upealla pohjalla.

Vaihe 2 – SharePoint-listat tilausten tallentamiseen

Luodaan tilausten tallennusta varten SharePoint-lista (TeamsRequests), jonka sarakkeina ovat

  • Title (tiimin otsikko)
  • Template id (käytetyn mallipohjan id)
  • Template name (käytetyn mallipohjan nimi)
  • Description (tiimin kuvaus)
  • isPrivate (onko tiimi yksityinen vai ei)
  • Comments for privacy (perustelut miksi tiimin pitää olla yksityinen)
  • Owners (tiimin omistajat)
  • Members (tiimin jäsenet)
  • Expiration date (tiimin viimeinen voimassaolopäivä)
  • Project id (projekinumero)
  • Status (tilauksen tila)

teams requests list.png

Tilauslomaketta varten teemme vielä listan, johon on tallennettu mallipohjien nimet ja id:t.

teams teamplates list.png

Hetkinen, mistä nuo tiimien id:t saa?

Jos ei muualta, niin kaivetaan esiin Microsoftin mainio Graph Explorer. Kirjaudutaan sisään omilla ko tenantin tunnuksilla ja ajetaan my joined teams -kysely. Vastauksena tulee kasapäin tietoa kaikista tiimeistä, joiden jäsenenä olen.

Sieltä löytyy myös tämä kaivattu id.

get teams id.png

Vaihe 3 – Teamsin tilauslomake (PowerApps)

Luodaan tyhjä PowerApps ja lisätään sille lomake, joka kytketään tilauslistaan. Kevyen kenttien järjestelyn ja nimeämisen jälkeen PowerApps näyttää tältä.

teams order powerapps.png

Tehdään lomakkeelle seuraavat muokkaukset

  • Mikäli tiimin valitaan olevan yksityinen, ilmestyy perustelukenttä (Comments for privacy), johon on pakko antaa perustelut
  • Käytettävä template valitaan alasvetovalikosta, jonka arvot haetaan Teams templates -listasta. Valinnan perusteella tallenetaan arvot tilauksen Template name ja Template id -kenttiin
  • Projekti-tiimi’ tilattaessa, tulee kertoa projektin id
  • Mahdollista syöttää tiimin viimeinen voimassaolopäivä (Expiration date)
  • Lisätään painike, jolla lomakkeen tiedot tallennetaan

Siistitään hieman ulkoasua. Lopputulos näyttää tältä.

teams order powerapps ready.png

Tehdään lomakkeella muutama tilaus.

teams orders.png

Kaikki näyttää hyvältä. Siirrytään harjoituksen työläämpiin osuuksiin.

Vaihe 4 – Azure AD Application -rekisteröinti

Tulemme käyttämään Microsoft Graphin tarjoamaa API:a tiimien luomiseen ja muokkaamiseen. API:a käytetettäessä meidän tulee luonnollisesti tunnistautua jollain tavalla. Tässä tapauksessa luontevinta on käyttää Azure AD:hen rekisteröityä Applicationia.

Mikäli Microsoft Graphin käyttäminen Flowsta käsin on sinulle täysin uutta, suosittelen lukemaan Laura Kokkarisen mainion blogitekstin aiheesta.

Tässä silti pikaohjeet. Idea on yksinkertainen

  • Luodaan Azure AD:hen ”tunnus” (Application registration)
  • Pyydetään luodulle oliolle tarvittavat käyttöoikeudet. Tällä kertaa Microsoft Graphiin
  • Microsoft Graphia voi käyttää rekisteröidyn applicationin avulla, kun tunnistautuu (Active Direcrory oAuth) applicationin id:llä sekä sille luodulla salaisuudella. Lisäksi tarvitaan tenantin id.

Luodaan uusi Application Azure AD:hen (Azure Active Directory -> App registrations -> New application registration).

azure ad step 1.png

Pyydetään applikaatiolle oikeudet käyttää Microsoft Graphia (Settings -> Required permissions -> Add – > Microsoft Graph).

Listasta valitaan tarvittavat oikeudet. Tällä kertaa:

  • Group.ReadWrite.All
  • Directory.ReadWrite.All
  • User.ReadWrite.All

Käyttöliittymän nimet ovat tietenkin eri kuin Microsoft Graphin dokumentaatiossa käytetyt nimet (yllä). Kyllä ne sieltä silti löytyy.

Screenshot 2018-11-21 at 18.34.46.png

Lopuksi administratorin tulee hyväksyä pyydetyt oikeudet. Yleensä viimeistään tässä kohtaa loppuu omat käyttöoikeudet ja pitää selvittää kuka pyynnön voisi hyväksyä.

Tällä kertaa voin suorittaa hyväksynnän itse.

azure ad step 3.png

Luodaan lopuksi salaisuus (secret) ja otetaan sen avain (key) talteen. Tunnistautumisessa avaimen parina käytetään application id:ta

azure ad step 4.png

Tarvitsemme vielä tenantin id:n. Se löytyy esimerkiksi Azure Ad:n asetuksista (directory id).

azure ad step 5.png

Tunnus on valmis. Voimme siirtyä rakentamaan varsinaista työnkulkua.

Vaihe 5 – Tiimien automaattinen luominen – Flow

Uusi tiimi luodaan Flow:lla, joka käynnistyy aina uuden rivin ilmesteyessä tilauslistalle.

Työnkulun alussa alustetaan muuttujiin (variables) Microsoft Graph APIn käyttöön tarvittavat tiedot

  • Tenant Id
  • Azureen rtekisteröidyn applicationin id (client id)
  • Azureen rekisteröidyn applicationin salaisuus (secret)

Lisäksi alustetaan omaan muuttujaansa luotavan tiimin oletusnäkyvyydeksi julkinen (Public).

flow.png

Tilauksen hyväksyminen (yksityiset tiimit)

Mikäli käyttäjä on tilannut yksityisen tiimin, käynnistetään hyväksymistyönkulku.

  • Päivitetään tilauksen tilaksi ”waiting for approval”
  • Aloitetaan hyväksyntätyönkulku
  • Mikäli tilaus hylätään
    • lähetetään hylkäyksestä tieto tiimin tilaajalle
    • päivitetään tilauksen tilaksi ”hylätty” (rejected)
    • lopetetaan työnkulku (Terminate)
  • Päivitetään luotavan tiimin näkyvyydeksi yksityinen (Private)

flow-21.png

Ylläesitetty prosessi ohitetaan kokonaan, mikäli tilattu tiimi on julkinen.

Tiimin luominen (kloonaaminen mallipohjasta)

Seuraavaksi luodaan tilattu tiimi. Itseasiassa luodaan kopio jommasta kummasta luomastamme mallipohjasta.

Tämä tehdään varsin yksinkertaisella http-kutsulla, jonka body-osassa laitetaan paikoilleen kaikki tarvittava.

Screenshot 2018-11-21 at 18.48.42

Tiimiä ei kuitenkaan luoda heti, vaan se menee jonoon. Tästä tulee hieman lisää vaivaa, sillä emme ole vielä valmiit. Tarkoitus on lisätä tiimiin vielä käyttäjät.

Lisätään seuraavaksi vaiheeksi JSON parsinta, jolla parsimme tehdyn http-kutsun vastauksen otsikosta kaikki kentät helposti käytettävään muotoon.

Kenttien joukosta löytyy location. Se on url-osoite, josta voimme kysyä onko tiimi jo valmis ja mikä sen guid on.

Oikaistaan hieman ja odotellaan rauhassa 15 minuuttia, jotta kaikki on valmista. Hätäisemmät voivat rakentaa tähän loopin, joka pollaa hieman tiheämmin onko tiimi jo luotu ja jatkaa matkaa heti kun tiimi on valmis.

flow4.png

Nyt tiimi on luotu. Seuraavaksi selvitämme Microsoft Graphin ja Parse JSON- toiminnon avulla luodun tiimin guidin, jota tarvitsemme jatkossa.

Screenshot 2018-11-21 at 18.56.31.png

Omistajien lisääminen

Vihdoinkin voimme viimeistellä luomamme tiimin.

Lisätään tiimin tilaaja sen omistajaksi. Haetaan tilaajan Id (Microsoft Graph API:lla tietenkin), jonka jälkeen voimme lisätä ko käyttäjän tiimin omistajaksi.

Screenshot 2018-11-21 at 18.59.27.png

Samalla tavalla lisäämme omistajiksi tilaajan mahdollisesti ilmoittamat muut omistajat.

Screenshot 2018-11-21 at 19.01.45.png

Jäsenten lisääminen

Ja aivan samalla tavalla lisätään tilauslomakkeelta löytyvät tiimin jäsenet. Ainoa pieni ero on kutsuttavassa url-osoitteessa. Owners sanan tilalla onkin members.

https://graph.microsoft.com/v1.0/groups/{teamguid}/members/$ref

Screenshot 2018-11-21 at 19.05.21.png

Alkuperäisen omistajan poistaminen

Tiimin kloonaamisessa uuden tiimin omistajiksi tulee automaattisesti myös alkuperäisen tiimin omistajat. Nämä halutaan tietenkin poistaa.

Tuskin tulee yllätyksenä, että tämä tehdään http-kutsulla Microsoft Graph -palveluun.

Screenshot 2018-11-21 at 19.25.48.png

Yhteenveto

Ratkaisumme on provisoinnin runko, joka osaa luoda tilauksesta erilaisia tiimejä sekä lisätä niihin omistajia ja jäseniä.

Microsoftin tarjoama kloonaustoiminto on varsin näppärä. Tiimien nimeämisen suhteen on syytä kuitenkin olla esimerkkiä tarkempi. Rajapintaa käyttäen voi luoda useita tiimejä identtisillä nimillä. Se ei ole välttämättä toivottavaa.

Seuraavassa jutussa täydennetään ratkaisua seuraavasti

  • Lisätään projekti-tiimiin välilehti, jossa on linkki projektityökaluun. Linkkiä klikkaamalla avautuu kyseisen projektin tiedot.
  • Toteutetaan vanhentuneiden tiimien poisto
  • Korvataan työnkulun 15min odottelu jollain fiksummalla

Katsotaan jos keksitään jotain muutakin. Ja tutkitaan mitä tarpeellisia ominaisuuksia rajapinnasta mahdollisesti vielä puuttuu.