Flow ja PowerApps ovat kansalaiskehittäjien työkaluja. Kansalaiskehittäjät harvoin ajattelevat erästä ohjelmistokehittäjille varsin tuttua asiaa. Nimittäin virheiden käsittelyä.

Ajoittain olisi syytä.

Virheenkäsitelly tarkoittaa sitä, että ohjelmakoodissa varaudutaan virheisiin ja jos (ja kun) virhe tapahtuu, se käsitellään hallitusti.

Virheen sattuessa voi olla järkevää

  • lähettää/tallentaa jonnekin tieto virheestä
  • näyttää käyttäjälle ymmärrettävä virheilmoitus
  • keskeyttää tapahtumaketjun suorittaminen

Käydään seuraavaksi läpi, miten virheisiin voi varautua PowerAppsissa ja Flow:ssa.

PowerApps

PowerAppsissa virheet tapahtuvat tyypillisesti tietoja tallennettaessa. Syy voi olla joku seuraavista

  • käytetyn tietovaraston rakenne on muuttunut (esim. lisätty uusi sarake)
  • päivitettävää tietuetta ei (enää) ole (joku muu on ehtinyt poistanut sen)
  • tallennettava sisältö on väärässä muodossa (liian pitkä merkkijono)
  • tietovarastoon ei saada yhteyttä
  • tilapäinen toimintahäiriö yhdistimessä (connector)
  • jotain muuta selittämätöntä

Miten toimia jos lomakkeen (Form) tallennus ei onnistu?

Tehdään yksinkertainen lomake, jolla käyttäjä tilaa asian X. Tallennuksen jälkeen käyttäjälle lähetetään kiitosviesti, jossa tilaus todetaan vastaanotetuksi ja se luvataan käsitellä mahdollisimman pian.

Suurinpiirtein näin:

Näyttökuva 2019-3-12 kello 19.34.49.png

Nyt kiitosviesti lähtee tilaajalle silloinkin, kun tilauksen tallennus epäonnistuu. Tällöin koko tilausta ei oikeasti ole olemassa.

Noloa.

Tallennuksen jälkeen on syytä tarkistaa onnistuiko se. Tämän voi tehdä Errors-funktiolla. Sen parametreina ovat käytetty tietolähde sekä tietue, jota toiminto koski.

Errors(Orders, frmOrder.LastSubmit)

Mikäli Errors palauttaa tyhjän joukon, on kaikki kunnossa (=virheitä ei ole) ja voimme lähettää tilaajalle sähköpostin.

Näyttökuva 2019-3-12 kello 19.46.59.png

Miksi kuitenkaan tyytyä tähän? Samalla vaivalla voimme lähettää sähköpostin sovelluksen ylläpitäjälle aina kun virhe tapahtuu.

Näyttökuva 2019-3-12 kello 19.48.50.png

Vielä fiksumpaa on tallentaa kustakin virheestä rivi tietokantaan tai SharePoint-listaan. Näin syntyy sovelluksen virheloki, joka auttaa vikojen selvittämisessä. Lokin avulla voi myös hahmottaa miten paljon erilaisia virheitä tapahtuu.

Miten saan lisätietoa virheestä?

Virhelokiin (ja/tai sähköpostiin) kannattaa sisällyttää kaikki mahdollinen tieto virheestä.

  1. Milloin virhe tapahtui?
  2. Käyttäjä joka suoritti virheeseen päätyneen toiminnon
  3. Mitä tietolähdettä ja sen tietuetta virhe koskee?
  4. Varsinainen virheilmoitus

Mikäli virhe liittyi lomakkeeseen, löydät PowerAppsin käyttäjälle näyttämän virheilmoituksen lomakkeen Error-ominaisuudesta (Form1.Error).

Virheen tarkemmat tiedot löytyvät kuitenkin Errors-funktion palauttamasta taulukosta. Se kertoo usein enemmän kuin lomakkeen oma virheilmoitus.

Mitä jos Patch-komento epäonnistuu?

PowerAppsissa tietoja tallennetaan joko lomakkeella tai Patch-komennolla. Patch palauttaa aina arvonaan päivitetyn tietueen.

Mikäli Patch-komento palauttaa tyhjän joukon, on päivitys epäonnistunut. Voimmekin aina tarkistaa Patch:in paluuarvon ja päättää sen perusteella, mitä tehdään seuraavaksi.

Set(
    varPatchResult,
    Patch(
        Orders,
        Defaults(Orders),
        {Title: DataCardValue1.Text}
    )
);
If(
    IsEmpty(varPatchResult), ...

Untitled

Flow

Entäs Flow? Voiko niissä varautua virheisiin?

Voi.

Luodaan työnkulku joka hakee kaikki 12 kuukautta vanhat tilaukset ja poistaa ne.

Näyttökuva 2019-3-13 kello 17.15.37.png

Lisätään poiston (delete item) perään toiminto, joka lähettää ylläpidolle tiedon poiston epäonnistumisesta.

flow error email

Mutta miten saamme sähköpostin lähtemään ainoastaan tilanteessa, jossa rivin poistaminen ei ole onnistunut?

Avataan sähköpostin lähetys -toiminnon lisävalinnat (klikkaamalla kolmea pistettä). Ja valitaan ”Määritä suorita jälkeen”.

Näyttökuva 2019-3-13 kello 17.19.55.png

Nyt voimme määritellä, missä tilanteissa toiminto suoritetaan. Valitaan

  • Delete item on epäonnistunut
  • Delete item on aikakatkaistu

Näyttökuva 2019-3-13 kello 17.20.33.png

Työnkulkumme näyttää nyt tältä. Punainen katkoviiva kertoo, ettei seuraava toimintoa suoriteta normitilanteessa.

Näyttökuva 2019-3-13 kello 17.24.17.png

Mutta…  Flow:ssa voi mikä tahansa toiminnoista päätyä virheeseen.

Esimerkissämme haetaan 12 kuukautta vanhat rivit.  Entä jos toiminto suoritetaan käyttäjätunnuksella, jonka salasana on vanhentunut? Kyllä. Se päättyy virheeseen.

Harvoin on järkevää lisätä jokaisen toiminnon perään erillinen haara virhetilanteelle. Suoraviivaisinta on lisätä työnkulkuun alue (scope), jonka sisällä kaikki toiminnot ovat.

Näyttökuva 2019-3-13 kello 17.28.26.png

Lopuksi tälle alueelle määritellään toiminto, joka tehdään virheen sattuessa.

Näyttökuva 2019-3-13 kello 17.30.58.png

Mikäli mikä tahansa alueen sisällä olevista toiminnoista epäonnistuu, lähetetään ylläpitäjälle sähköpostia

Kätevää.