PowerApps on varmaan ihan hyvä tuote, mutta kun sillä tehdyt sovellukset ovat kaikki niin kökön näköisiä.

Kuulen tätä usein. Totta, PowerAppsit ovat yleensä aika karun näköisiä. Ne saattavat olla toiminnallisuudeltaan hyvinkin mietittyjä, mutta kun kyseessä on organisaation sisäiseen käyttöön tarkoitettu työkalu, ei visuaaliseen suunnitteluun aina panosteta.

Tämä ei kuitenkaan tarkoita, etteikö PowerAppsista saisi siistin näköistä.

Tällä kertaa tehdään hieman tyyliteltympi PowerApps. Toteutetaan kopio Viking Linen kulutajille tarjoamasta mobiiliapplikaatiosta. Alkuperäinen sovellus näyttää tältä.

 

 

Saa nähdä onnistuuko. Aloitetaan!

Navigaatio

Rajataan kokeilumme kolmeen päänäyttöön (aloitusnäyttö, minun matkani ja tax-free). Luodaan kullekin oma tyhjä näyttö. Lisätään aloitusnäytölle mobiilisovelluksesta kopioitu kuva menun pohjaksi.

VL_Powerapps_buildmenu1.png

Mutta kuva on vain taustakuva. Varsinainen toiminnallisuus toteutetaan laatikoilla (rectangle). Lisätään jokaisen alareunan kuvakkeen päälle laatikko.

VL_Powerapps_buildmenu2.png

Lisätään jokaisen laatikon OnSelect-tapahtumaan siirtyminen ikonia vastaavalle näytölle.VL_Powerapps_buildmenu3.png

Lopuksi muutetaan laatikot läpinäkyviksi. Yhden näytön navigaatio on valmis.

Kopioidaan koko alaosa (taustakuva ja laatikot) muille näytöille. Vaihdetaan kullekin näytölle laaatikoiden takana oleva kuva sellaiseen, jossa kyseinen näyttö on punaisella korostettuna.

Näin meillä on toimiva navigaatio jokaisella näytöllä.

Staattinen tax-free näyttö

Tämä on helppo. Näytöllä on kuusi painiketta, joista avautuu eri asioita. Lisätään aluksi näytölle alkuperäisestä sovelluksesta kaapattu taustakuva.

VL_Powerapps_buildtaxfree.png

Painikkeet toteutetaan jälleen muotojen avulla. Lisätään ympärä (Icons -> Circle) ja säädetään sen koko täsmälleen näytöllä olevan ikonin kokoiseksi.

VL_Powerapps_buildtaxfree1.png

Vaihdetaan ympyrän taustaväri läpinäkyväksi ja ympyrää painettaessa näkyvä väri (PressedFill) läpikuultavaksi punaiseksi.

VL_Powerapps_buildtaxfree2.png

Näin luodaan illuusio siitä että taustakuvan kuvat reagoisivat kun niitä painetaan.

Lisätään vastaava ympyrä jokaisen kuvakkeen päälle.

VL_Powerapps_buildtaxfree4.png

Lopuksi lisätään kustakin kuvakkeesta linkit oikeisiin näyttöihin / verkkosivuihin.

Valmis.

Aloitusnäyttö

Käytetään näytön taustakuvana alkuperäisestä sovelluksesta kaapattua kuvaa, josta on poistettu tekstit (lukuunottamatta Viking Line -tekstiä, joka on omalla erikoisella fontillaan).

Lisätään näytölle

  • Tervetuloa käyttäjä -teksti (näyteään sovelluksen käyttäjän etunimi)
  • Varaa matka -painike

Näyttökuva 2018-9-28 kello 18.45.41.png

Painike on PowerAppsin painike (button). Asetetaan se läpinäkyväksi, vaihdetaan reunaväri valkoiseksi sekä lisätään kulmien pyöristystä.

Kelpaa minulle.

Minun matkani -näyttö

Tämä on hieman työläämpi osa. Minun matkani -näytöllä esitetään yhden risteilyn tärkeät hetket (lähtö, saapuminen, ruokailut jne) aikajanalla. Näytön oikeasta yläkulmasta klikkaamalla ilmestyy esiin toinen näyttö, jolta voi valita minkä matkan tietoja tarkastellaan.

Tarvitsemme kaksi SharePoint-listaa.

Omat varaukseni, joka sisältää varauksien perustiedot.

vl_my_trips.png

Matkatapatumat, joka sisältää jokaisen matkan yksityiskohtaiset tapahtumat.

vl_my_trips_details.png

Lisätään minun matkani -näytölle otsikko kuvakkeineen. Käytetään PowerAppsin vakiokuvakkeita.

vl_my_trip1.png

Lisätään käytettävät SharePoint-listat tietolähteiksi (Data source).

vl_my_trip2.png

Seuraavaksi tehdään jotain villiä. Lisätään näytölle suorakulmio, mutta sijoitetaan se näkyvän näytön ulkopuolelle (position x = 640).

vl_my_trip3.png

Rakennetaan piilotetulle näytöllemme otsikkopalkki. Asetetaan kaikkien piilossa olevalla näytöllä sijaitsevien kontrollien x-koordinaatit viittaamaan piilotetun näytön x-koordinaatteihin. Kun jatkossa liikutamme piilotettua näyttöä, liikkuvat muut kontrollit mukana.

vl_my_trip4.png

Lisätään otsikko ja vaaleanharmaa viiva (=yhden pikselin korkuinen laatikko).

vl_my_trip5.png

Tälle toistaiseksi piilotetulle näytölle toteutetaan matkan valinta. Lisätään galleria ja liitetään se SharePointin MyTrips-listaan.

vl_my_trip6.png

Viritetään gallerian sisältöä ja ulkoasua seuraavilla tavoilla.

  • Gallerian riveillä esitetään SharePoint-listan kenttien arvot nätisti kahdessa rivissä
  • Säädetään fonttikoot oikeiksi
  • Vaihdetaan erotinviivan väri
  • Lisätään ruksi rivin poistamista varten, sekä pieni väkänen jolla rivi valitaan
  • Asetetaan aktiivisen rivin kirjainten väri punaiseksi
  • Siirretään galleria oikealle paikalleen

Lopputulos näyttää tältä.

Näyttökuva 2018-9-26 kello 18.35.05

Palataan rakentamaan varsinaista minun matkani -näyttöä. Lisätään näytön yläreunaan aktiivisen (= piilossa olevalta näytöltä valitun) risteilyn tiedot.

Näyttökuva 2018-9-26 kello 17.46.24

Lopuksi kasaamme valitun risteilyn tapahtumat kuvaavan aikajanan. Lisätään galleria, jossa näytetään kaikki risteilytiedot (se toinen SharePoint-lista).

Näyttökuva 2018-9-26 kello 17.48.49

Suodatetaan galleria näyttämään ainoastaan valitun risteilyn tiedot.

Items = Filter(VinkingLine;varausnumero = Gallery3.Selected.Title)

Lisätään galleriapohjaan (template) vihreä pystyviiva ja pallo. Lisätään sisällöksi kaikki SharePoint-listalta löytyvät tiedot. Asetetaan fonttikoot sopiviksi.

Näyttökuva 2018-9-26 kello 17.52.21

Kellonaikojen perässä on lippu, joka kuvaa kumman maan ajasta on kyse. Lippu on kuva-elementti, jossa käytettävä kuva määräytyy listan flag-kentän arvon perusteella.

Näyttökuva 2018-9-26 kello 17.54.32

Aikajanalla esitetään aina lähdön jälkeen ”Palvelut laivalla” -osio, jonka sisältö poikkeaa muista riveistä. Lisätään tätä varten galleriapohjaan kuva, jossa on palveluiden logot. Kuva kuitenkin astetaan paikoilleen ainoastaan, kun rivin otsikko on ”Palvelut laivalla”.

Näyttökuva 2018-9-26 kello 17.55.34

Fly-out valikko

Mutta miten ihmeessä saamme piilossa olevan näytön liukumaan nätisti olemassaolevan päälle ja pois? Tietenkin ajastimen avulla (timer).

Asetetaan vohveli-ikonin (sekä leijuvan näkymän nuolen) OnSelect arvoksi

UpdateContext({startMyTimer:false}); UpdateContext({showMenu: !showMenu, startMyTimer:true})

Meillä on siis kaksi boolean muuttujaa:

  • showMenu, joka kertoo onko menu (eli se piilossa oleva näyttö) näkyvillä vai ei
  • startMyTimer, jonka avulla käynnistetään ajastin

Aina kun päänäytön oikeasta yläkulmasta painetaan, muuttuu showMenu -muuttujan arvoksi true ja startMyTimer muuttujan arvo pyöräytetään false -> true.

Näyttökuva 2018-9-26 kello 18.42.38.png

Lisätään näytölle ajastin, jonka kestoksi asetetaan 300 millisekuntia ja käynnistymisen (Start) arvoksi yllä asetettu StartMyTimer muuttuja.

Ajastin käynnistyy aina startMyTimer muuttujan arvon vaihtuessa false -> true. Ja Fly-out näyttömme valuminen paikalleen kestää 300 millisekuntia.

Näyttökuva 2018-9-26 kello 18.45.46.png

Miten tämä sitten tapahtuu? Asetetaan piilossa olevan näyttömme x-akselin arvoksi

If(!showMenu;0 + ChooseTrip.Width * Timer1.Value/Timer1.Duration;
ChooseTrip.Width-ChooseTrip.Width * Timer1.Value/Timer1.Duration
)

Eli jos näyttö tulee piilosta, sen x-akselin arvo on 640 – 640 * (ajastimen tämän hetken arvo/600). Ajastimen arvo lähtee aina nollasta ja päättyy kuuteen sataan.

Kun näyttö siirretään piiloon, sen x-akselin arvo on 0 + 640 * (ajastimen tämän hetken arvo/600).

Loogista.

Näyttökuva 2018-9-26 kello 18.47.33.png

Jos sepustukseni oli aivan hepreaa, kannattaa katsoa tämä mainio video aiheesta.

Suorituskyky – tiedon tallentaminen päätelaitteelle

Alkuperäinen Viking Line -sovellus tallettaa käyttäjän matkojen tiedot matkapuhelimeen. Mekään emme halua hakea jokaisen käynnistyksen yhteydessä matkoja ja niiden tietoja SharePointista. Tallennetaan mekin ne puhelimeen.

Näyttökuva 2018-9-28 kello 19.09.33.png

Käytännössä aina PowerAppsin käynnistyessä yritetään ladata matkatiedot puhelimen paikallisesta tietovarastosta muistiin. Mikäli se ei onnistu, haetaan tiedot SharePoint-listasta ja tallennetaan ne muistiin ja sieltä puhelimen paikalliseen tietovarastoon.

LoadData(myReservations,"local_mytrips"; true); 
If(IsEmpty(myReservations), ClearCollect(myReservations, VikingLine_MyTrips);SaveData(myReservations, "local_mytrips"));
LoadData(myTrips,"local_mytripEvents", true); 
If(IsEmpty(myTrips), ClearCollect(myTrips,VinkingLine);SaveData(myTrips, "local_mytripEvents"))

Yhteenveto

Miltä lopputulos näyttää ja tuntuu verrattuna alkuperäiseen? Mielestäni oikein hyvältä. Parhaiten se selviää katsomalla molemmista sovelluksista kuvaamani lyhyet videoklipit.

PowerApps

Alkuperäinen

Vaikka kaikki näyttää esimerkissämme hyvältä, on PowerAppsissa omat rajoituksensa. Myös käyttöliittymän rakentamisessa.

  • Eri fontteja on käytettävissä hyvin rajallinen määrä. Jos tehdään ulkoasua tiukasti brandin mukaan, on tämä helposti ongelma
  • PowerAppsissa ei ole pyyhkäisy (swipe) kontrollia. Tämän vuoksi jätin toteuttamatta sovelluksen etusivulla eri osioiden välillä navigoinnin sivua pyyhkäisemällä. Tämän voi toteuttaa sliderin avulla, mutta siitä ei saa yhtä hyvää kuin oikeasta.