Edellisessä kirjoituksessa kävimme läpi miten SharePointin Create site -toiminnolla luodaan sivustoja käyttäen räätälöityä sivustomallia. Ratkaisusta jäi kuitenkin puuttumaan muutama perinteiselle provisiontiratkaisulle tyypillinen elementti.

Täydennetään ratkaisua seuraavasti

  • Sivuston tilaaja voi tilauksen yhteydessä antaa lisätietoja, joita hyödynnetään sivuston luonnissa
  • Lisätään tilaamiseen hyväksyntäprosessi

Vaihe 1 – Sivustojen tilaukset -lista

Ratkaisun pohjaksi tarvitsemme listan, johon tilaukset tallennetaan.

site order list.pngListan kentät ovat:

  • Title – Sivuston otsikko
  • Owner – Sivuston omistaja (ja tilaaja)
  • SiteUrl – Sivuston osoite
  • Status – Tilauksen tila
  • Project description – Projektin kuvaus (nyt tilataan sivustoja projekteille)
  • Project size – Projektin koko (yli tai alle 100 htp)
  • PnPTemplate – PnP-mallipohja jota käytetään sivuston luonnissa
  • Handler – Tilauksen käsittelijä
  • Approval comments – Hyväksymisen/hylkäämisen kommentit

Vaihe 2 – Sivuston omistajan ja otsikon selvittäminen

Sivuston luontiprosessiin pääsee kiinni Flow:n avulla. Valitettavasti ainoa tieto tilatusta (oikeastaan luodusta) sivustosta on sen url-osoite. Tämä ei riitä mihinkään. Tehdään Functions, joka PowerShellin avulla selvittää sivustoston omistajan sekä otsikon.

Eli ajetaan

Get-SPOSite -Identity 'sivuston osoite'
Jonka jälkeen tiedot löytyvät helposti
$Group = $site.Owner
$title = $site.Title

Valmis funktio näyttää tältä.

functions for groupid.png

Vaihe 3 – Projektin kuvauksen lisääminen PnP-mallipohjaan

Tarkoituksemme on pyytää käyttäjältä projektin kuvaus ja liittää se sivustolla oikeaan paikkaan. Tehdään tätä varten edellisen jutun esimerkkiin pari muutosta.

Vaihdetaan PnP-mallipohjan ohjeteksti ”Todo: Kirjoita tähän projektin lyhyt kuvaus” muotoon ”PlaceHolderForDescription”.

pnptemplatenew.png

Lisätään sivustolle muutokset tekevään functionsiin (Apply-PnPProvisioningTemplate) uudeksi parametriksi projektin kuvaus (description). 

$Description = $requestBody.Description

Korvataan samaisessa functionsissa PnP-mallipohjasta teksti ”PlaceHolderForDescription” parametrina saadulla kuvauksella. Lopputulos tallennetaan väliaikaiseen tiedostoon (pnp_template_tmp.xml).

PowerShell komento tälle on

(Get-Content -Path $Path$PnpTemplateFile).Replace("Placeholderfordescription",$Description) | Set-Content -Path $Path$temporaryPnPTemplate

Lopuksi tehdään sivustolle muutokset käyttäen tätä väliaikaista mallipohjaa, jossa oikea projektin kuvaus on paikoillaan.

Päivitetty Functions näyttää tältä.

change functions.png

Vaihe 4 – Uuden tilauksen käsittely

Käyttäjän tilatessa uuden projektisivuston, käynnistyy edeltävässä kirjoituksessa määrittelemämme Flow. Muokataan Flowta siten ettei se teekkään sivustolle muutoksia vaan

  • selvittää tilatun sivuston omistajan ja otsikon
  • tallentaa tilauksen SharePoint-listaan

Näin saamme tilauslistaamme rivin jokaista uutta sivustotilausta kohden.

Voimme jatkaa tilauksen käsitellyä aivan miten haluamme hyödyntäen kaikkia Office 365:n mahdollisuuksia.

Katsotaan kuitenkin vielä hieman tarkemmin miten tuo tilausrivi saadaan synnytettyä.

Flow käynnistyy edelleen SharePointin generoimalla http-kutsulla. Kutsutaan ensimmäisenä luomaamme GetSiteOwnerGroup functionsia, joka palauttaa sivuston otsikon sekä sivuston omistajat -ryhmän id:n.

flow 1 step 1.png

Tallennetaan vastaukset Array-tyyppiseen muuttujaan.

flow 1 step 1_2.png

Haetaan sivuston omistaja-ryhmän jäsenet. Tarvittava Group Id kaivetaan hieman mystisellä tavalla muuttujasta.

variables('SiteTitleAndGroupID')[0]?['groupid']

Eli arrayn ensimmäisen alkion groupid -elementin arvo. Näin toimimalla vältytään Flow:n generoimilta for each -silmukoilta.

flow 1 step 2

Tallennetaan vastaus muuttujaan.

flow 1 step group members to variable.png
Lopuksi tiedot talletetaan yhdeksi riviksi SharePointin tilauslistaan.

flow 1 step 3.png

Title tallennetaan lauseella (expression)

variables('SiteTitleAndGroupID')[0]?['sitetitle']

Owner vastaavasti (mikäli omistajia on useita, käytämme ensimmäistä)

variables('ListGroupMembersResult')[0]?['mail']

Käyttäjän luodessa uuden projektisivuston Create site -toiminnolla, ilmestyy projektityötilojen tilaukset -listallemme uusi rivi.

order list phase 1

Valmis Flow ei ole kovin monimutkainen.

site provisioning flow 1 overview.png

Vaihe 5 – Lisätietojen kysyminen sivuston tilaajalta

Harmiksemme SharePointin sivuston tilauslomakketta ei ole mahdollista muokata. Tähän näkymään ei siis saa omia kenttiä.

order new site form.png

Haluamme tietää projektisivuston luontia varten projektin koon sekä kuvauksen. Kysytään ne tilaajalta lomakkeen täyttämisen jälkeen.

Tehdään toinen Flow, joka käynnistyy uuden rivin ilmestyessä tilauslistalle. Flow lähettää tilaajalle sähköpostin, jossa pyydetään täyttämään lisätietoja koskien tilattua sivustoa.

site provisioning flow 2 send email.png

Lisätiedot täytetään PowerAppsilla. Tehdään seuravaksi sellainen.

Vaihe 6 – Lisätietojen syöttäminen PowerAppsilla

Tehdään PowerApps-sovellus, joka saa paramterina SharePoint-listan rivin id:n. Käyttäjä voi päivittää sen avulla muutamaa rivin kenttää.

Lisätään tietolähteeksi (Data source) projektityötilojen tilaukset -lista. Lisätään näytölle lomake, joka avaa muokattavaksi listalta yhden rivin.

  • DataSource = ’Projektityötilojen tilaukset’
  • Item = LookUp(’Projektityötilojen tilaukset’, ID = Value(Param(”order_id”)))

powerapps.png

Käyttäjä syöttää tiedot ainoastaan Project size ja Project Description -kenttiin. Päivitämme itse rivin status-kentän arvoksi ”Additional Info filled”. Näin tiedämme käyttäjän lisänneen kysytyt tiedot.

powerapps 2.png

Tallennuksen ja julkaisun jälkeen käydään katsomassa mikä on PowerAppsin web-osoite.

site provisioning powerapps get url.png

Tätä urlia käytämme aiemmin tekemämme Flow:n lähettämän sähköpostin linkissä.

site provisioning powerapps url in email.png

Vinkki – Tässä tapauksessa PowerAppsia siistimpi ratkaisu olisi toiminnalliset viestit (actionable messages). Niitä käyttäen sivuston tilaajalle tulisi sähköpostiin lisätietopyyntö, johon hän voisi suoraan täyttää pyydetyt tiedot.

Eli tämännäköinen sähköposti.

adaptive cards

Vaihe 7 – Täydennetyn tilauksen käsittely

Tehdään kolmas Flow, joka hoitaa kaiken tästä eteenpäin. Flow käynnistyy aina kun tilausriviä muokataan.

Ensimmäisenä alustetaan muuttuja, jossa säilytetään käytettävän Pnp-mallipohjan nimeä.

Tämän jälkeen toiminta haarautuu (Switch) sen mukaan, mikä muokatun rivin tila on.

flow 3.png

Haara 1 – Lisätiedot täytetty

Mikäli käyttäjä on juuri syöttänyt pyydetyt lisätiedot (projektin kuvaus ja koko), edetään Additional Info filled -haaraan. Se käynnistää Flown hyväksymisprosessin (Start an approval).

flow 3_2.png

Hyväksyjä saa pyynnön sähköpostilla sekä suoraan Flow-mobiilisovellukseen, mikäli hänellä se on asennettuna.

Flow jää odottamaan hyväksyjän kuittausta. Mikäli pyyntö hyväksytään, tarkistetaan onko projektin kooksi määritelty suuri (yli 100htp). Tällöin vaihdetaan käytettävä PnP-mallipohja toiseksi (big_project_template.xml).

site provisioning approval ok

Lopuksi päivitetään tilausrivin tiedot.

site provisioning approval ok update list.png

Mikäli tilaus hylätään, päivitetään tilaukselle uusi status, hylkäyksen syy sekä hylkääjän nimi.

flow 3_4.png

Haara 2 – Tilaus hyväksytty

Tilausrivin tilan saadessa arvon ”Approved”, suoritetaan sama Flow päättyen Approved -haaraan. Siellä sivustolle tehdään varsinaiset muutokset kutsumalla Functionsia, joka suorittaa Apply-PnPProvisioningTemplate -komennon.

Huomaa että sivustoon tehtävät muutokset riippuvat siitä mitä PnP-mallipohjaa (PnP Template file) käytetään. Esimerkissämme mallipohja riippuu projektin koosta.

site provisioning approved call functions

Lähetetään tilaajalle sähköposti, jossa kerrotaan sivuston olevan valmiina käyttöön.

site provisioning approved send email.png

Lopuksi päivitetään tilauksen tilaksi luotu (Created).

flow update status.png

Haara 3 – tilauksen hylkääminen

Mikäli tilaus hylätään, lähetetään tilaajalle tieto hylkäämisestä sekä IT:lle muistutusviesti jo luodun sivuston poistamisesta.

flow 3_7.png

Turhaan luotujen sivustojen poistamisen voi automatisoida Functionsissa ajettavalla PowerShellillä. Säästin sen lisäharjoitukseksi.

Valmis työnkulku kokonaisuudessaan

Varsinaisen työn tekevä Flow on jo hieman monimutkaisempi. Kokonaisuudessaan se näyttää tältä.

site provisioning flow 3 overview

Punaisella merkityn haaran sisältö näyttää tältä.

site provisioning flow 3 overview part 2

Miltä valmis ratkaisu näyttää?

Käyttäjä tilaa uuden sivuston.

demo 1

Sivusto luodaan ja siihen tehdään sivumallin pohjalta muutokset. Lopuksi käynnistyy työnkulku.

demo 2

Käyttäjä saa sähköpostin, jossa pyydetään täyttämään lisätiedot.

demo 3Käyttäjä täyttää lisätiedot.

demo 4

Käyttäjä saa vahvistuksen sivuston lopullisesta valmistumisesta.

demo 5

Valmis sivusto näyttää tältä.

demo 6

Yhteenveto

Hyvää

  • Loppukäyttäjä voi tilata yhdestä ja samasta paikasta vakiosivustot (tiimityötilat / viestintäsivustot) sekä räätälöidyt sivustot.
  • Luotavia sivustoja voi muokata PnP:n avulla monipuolisesti
  • Ratkaisu ei sisällä käytännössä ollenkaan koodia

Huonoa

  • Sivuston luontiprosessissa Flow ajetaan viimeisenä. Sivuston tilausta hyväksyttäessä sivusto on käytännössä jo luotu. Toivottavasti pian tulee mahdollisuus lisätä sitescriptiin Flow, joka ajetaan ennen sivuston luontia.

Mutta onko sivustoprovisiointien aika jo ohi?

Käytin esimerkkinä perinteistä projektisivuston tilaamista. Mikäli olisin asiakas, miettisin hetken haluanko projektien käyttöön perinteiset sivustot vai tähän tarpeeseen muokatut Teamsit.