Power Appsin komponentit tulevat huhtikuussa kaikkien saataville (GA). Samalla niihin tulee lukuisia toivottuja uudistuksia kuten

  • Komponentteja voi käyttää gallerian ja lomakkeiden sisällä
  • Komponentissa voi käyttää kokoelmia
  • Komponentille voi välittää parametrina tietolähteen (connector).
  • Komponenteista voi koostaa komponenttikirjaston, jonka voi julkaista muiden käyttäjien käyttöön. Kun kirjaston komponentteihin tehdään muutoksia, tiedotetaan muutoksista automaattisesti kaikkia komponentin käyttäjiä.

Uutisen kunniaksi toteutetaan tällä kertaa komponentti.

Valinnan tekeminen ikoneita hyödyntäen

Lomakkeet ovat keskeinen osa Power Apps -toteutuksia. Aina välillä niissä on kätevä hyödyntää ikoneita perinteisten valinta-kontrollien (alasvetolista, radiobutton jne) sijaan.

Esimerkiksi

  • Mikä on fiilis juuri nyt? (Käyttäjä voi valita erilaisista hymynaamoista)
  • Mihin kategoriaan ilmoitus kuuluu (Käyttäjä valitsee kategorian niitä kuvaavista ikoneista)

Tehdään tätä varten uudelleenkäytettävä komponentti, joka

  • saa parametrina joukon valittavia kohteita. Kullakin kohteella on sitä kuvaava otsikko, ikoni ja väri
  • näyttää ikonit peräkkäin
  • osaa skaalata ikonit oikeaan kokoon riippuen komponentin omasta koosta
  • kertoo paluuarvona valitun ikonin otsikon

Komponenttia voi käyttää ratkaisuissa sellaisenaan tai sen voi jatkossa upottaa osaksi lomaketta tai galleriaa.

Aloitetaan.

Komponentin luominen ja mukautettujen ominaisuuksen lisääminen

Luodaan tyhjä Power Apps ja siihen uusi komponentti.

Näyttökuva 2020-1-30 kello 18.02.45

Lisätään komponetille mukautettu ominaisuus icons (custom property). Tietotyyppinä käytetään taulukkoa (kokoelmien käyttö ei ole vielä mahdollista).

Näyttökuva 2020-1-30 kello 18.08.42

Lisätään omaksi ominaisuudekseen väri, jolla valintaa korostetaan (selectedColor).

Näyttökuva 2020-1-30 kello 18.20.19

Komponentin ainoa tuloste (output property) on valitun ikonin otsikko (Value).

Näyttökuva 2020-1-30 kello 18.22.44

Vielä kun asetetaan icons-ominaisuudelle järkevä arvo, niin voimme aloittaa. Arvoa käytetään komponentin kehitysvaiheessa. Komponenttia käytettäessä arvo asetetaan kehitettävästä Power Appsista.

Näyttökuva 2020-1-30 kello 18.34.48

Table(
 {value: "Smile";
  icon: EmojiSmile;
  color: Green
 };
 {value: "Neutral";
  icon: EmojiNeutral;
  color: Yellow
 };
 {value: "Sad";
  icon: EmojiNeutral;
  color: Orange
 };
 {value: "Sad";
  icon: EmojiSad;
  color: Red
 }
)

Komponentin toiminnallisuuden rakentaminen

Aloitetaan lisäämällä komponenttiin tyhjä vaakasuuntainen valikoima (galleria).

Näyttökuva 2020-1-30 kello 18.36.27

Gallerian sisällöksi (Items) tulee komponentin icons-ominaisuuden arvo. Komponentin ominaisuuksiin viitataan tyylillä komponentinnimi.ominaisuus (ComponentSelection.icons).

Näyttökuva 2020-1-30 kello 18.40.04

Lisätään galleriaan ikoni (Lisää -> Kuvakkeet -> Valitse mikä tahansa) ja asetetaan sen kuvakkeeksi (icon) gallerian kohteen ikoni (ThisItem.icon).

Näyttökuva 2020-1-30 kello 18.45.47

Tehdään sama ikonin värin kanssa.

Näyttökuva 2020-1-30 kello 18.48.39

Komponentin skaalautuvuus

Haluamme komponenttimme skaalautuvan aina oikeaan kokoon. Tällöin meidän tulee huomioida kaksi muuttujaa

  • komponentin leveys
  • esitettävien ikonien lukumäärä

Näiden avulla voimme laskea

  • ikonien koon
  • ikonien välisen etäisyyden (käytännössä gallerian templaten koon)

Miten ihmeessä ne lasketaan?

Suunnitelman hahmottelu paperille helpottaa. Lopputuloksena on varsin yksinkertainen logiikka.

Näyttökuva 2020-1-30 kello 19.04.14

Asetetaan ensin galleriassa esitettävän ikonin leveys oikeaksi (komponentin leveys / ikonien määrä + 1).

Näyttökuva 2020-1-30 kello 19.12.45

Ikoni asettuu oikeaan kokoonsa, kunhan sen korkeus asetetaan vielä kuin leveys.

Näyttökuva 2020-1-30 kello 19.14.39

Kaikki kuvakkeet eivät näy, sillä gallerian templaten koko väärä. Korjataan se suunnitelman mukaiseksi (komponentin leveys / ikonien lukumäärä).

Samalla asetetaan mallin täyttö -ominaisuus (marginaali) nollaksi.

Näyttökuva 2020-1-30 kello 19.19.07

Päivitetään lopuksi muutama muukin ominaisuus dynaamisiksi.

Gallerian leveys on aina sama kuin komponentin leveys

Näyttökuva 2020-1-30 kello 19.22.54

Ja gallerian korkeus sama kuin komponentin korkeus.

Height: ComponentSelectIcon.Height

Komponentin korkeus lasketaan samalla kaavalla kuin ikonien korkeus.

Height: ComponentSelectIcon.Width / (CountRows(ComponentSelectIcon.icons) +1)

Nyt ikonit täyttävät aina nätisi koko komponentin leveyden.

Valinnan tallentaminen

Käyttäjän tekemän valinnan tallentaminen ei ole hankalaa. Galleriassa olevaa ikonia klikattaessa (OnSelect) tallennetaan ikonin arvo (value) muuttujaan (varSelectedIcon).

Näyttökuva 2020-2-1 kello 12.28.06

Tätä muuttujaa käytetään komponentin output propertyn arvona.

Näyttökuva 2020-2-1 kello 12.29.53

Valinnan korostaminen

Haluamme korostaa käyttäjän tekemää valintaa jotenkin. Voisimme disabloida valitun kohteen tai himmentää muiden kuin valitun ikonin väriä.

Korostetaan valintaa kuitenkin yksinkertaisella alleviivauksella.

Tehdään alleviivaukselle tilaa muokkaamalla komponentin korkeudeksi sama kuin gallerian templaten korkeus (komponentin leveys / ikonien lukumäärä).

Näyttökuva 2020-2-1 kello 12.35.17

Lisätään galleriaan suorakulmio ja asetetaan sen väriksi parametrina saatu selectedColor.

Näyttökuva 2020-2-1 kello 12.37.38

Alleviivaus on näkyvillä ainoastaan mikäli kyseisen kohteen arvo (value) on sama kuin valitun kohteen arvo.

Visible: varSelectedIcon = ThisItem.value

Jotta alleviivaus on aina oikealla paikalla ja oikean kokoinen, asetetaan sille vielä seuraavat arvot.

Sijainti Y-akselilla määräytyy ikonin korkeuden perusteella.

Y: icoIcon.Height + (icoIcon.Height/10)

Samoin leveys.

Width: icoIcon.Width

Myös korkeus määräytyy ikonin korkeuden mukaan, mutta pykälittäin.

If(icoIcon.Height > 100; 4; icoIcon.Height > 50; 2;1)

Komponentin käyttö

Komponenttimme on valmis. Miten sitä hyödynnetään?

Voimme käyttää sitä suoraan canvasissa. Kuvassa samaa komponenttia on käytetty kolmella eri ikonijoukolla.

Näyttökuva 2020-2-1 kello 13.06.01

Tulevaisuudessa komponentteja voi käyttää gallerioiden ja lomakkeiden sisällä.

Näyttökuva 2020-2-1 kello 13.18.47

Näyttökuva 2020-2-1 kello 13.26.12

Toteutetut komponentit voi jatkossa jakaa muiden käyttöön komponenttikirjaston avulla.

Yhteenveto

Komponenttien teko saattaa tuntua aluksi hankalalta. Niihin kannattaa kuitenkin tutustua, sillä tulet jatkossa todennäköisesti vähintään hyödyntämään muiden tekemiä komponentteja.

Mikäli taas teet itse yhtään enempää Power Appseja, et voi jatkossa välttyä komponenttien teolta. Mikäli haluat niiden olevan suorituskykyisiä ja ylläpidettäviä.