PowerAppsin Combo box -kontrolli on todellinen sveitsiläinen linkkuveitsi. Se on käytännössä alasvetolista (dropdown list), josta voi halutessaan valita usean arvon. Mikäli lista on pitkä, voi käyttäjä suodattaa sitä haulla. Näin valinnan tekeminen  isostakin joukosta on helppoa.

Kun rakennat PowerAppsia SharePoint-listan päälle, on Combo boxia luontevaa käyttää valinta-tyyppiseen sarakkeen (choice column) käyttöliittymäkontrollina.Screenshot 2018-10-28 at 9.45.56.png

Älä kuitenkaan tee niin.

  1. SharePoint-lista ei tue delegointia choice-kenttien osalta. Listan rivimäärän kasvaessa hommat hidastuu ja lopulta et voi enää suodattaa listan rivejä choice-kentän perusteella.
  2. SharePoint-listan choice-kentän arvojen ylläpito ei ole järin näppärää. Sinne hillottu arvojoukko ei ole helposti muiden sovellusten käytettävissä
  3. Jatkossa voi tulla tarve lisätä kullekin valittavalle arvolle lisätietoja. Kuvaus, prioriteetti, omistaja tms. Ei onnistu choice-kentän kanssa.

No miten sitten toteutan Combo boxin?

Ratkaisu on tylsä. Ylläpidetään valintalistan arvoja omassa SharePoint-listassa ja tallennetaan Combo boxista valitut arvot pilkuilla erotettuna varsinaisen SharePoint-listan tekstikenttään.

Käydään läpi miten tämä käytännössä tehdään.

Huom! Mikäli käyttäjä voi valita listalta ainoastaan yhden arvon, voit toteuttaa sen yksinkertaisemmin. Tällä kertaa pihvi on monivalinnan tallennus.

Tarvittavat SharePoint-listat

Luodaan ComboBoxExample -lista, johon käyttäjä täyttää PowerAppsilla rivejä.

Screenshot 2018-10-25 at 18.47.25.pngSekä ComboBoxValues -lista, jossa ylläpidetään valittavia arvoja.

Screenshot 2018-10-25 at 18.47.05.png

Combo boxin lisääminen PowerAppsiin

Nopeiten pääsemme alkuun luomalla uuden PowerAppsin valmiin datan pohjalta (Start from data). Pohjaksi valitsemme tietenkin juuri luomamme ComboBoxExample -listan.

Screenshot 2018-10-25 at 18.54.55.png

Nyt meillä on PowerApps, jolla voi ylläpitää kyseisen listan rivejä.

Lisätään EditScreen-näytön lomakkeelle oma kortti (custom card).

Screenshot 2018-10-25 at 18.57.43.png

Lisätään luodulle kortille kontrolliksi Combo box (Insert -> Controls -> Combo box). Asetetaan sen tietolähteeksi SharePoint-lista ComboBoxValues ja määritellään

  • näytettävä kenttä (Primary text) = Title
  • hakukenttä (SearchField) = Title

Screenshot 2018-10-25 at 19.01.38.png

Lomakkeellamme on näennäisesti toimiva Combo box. Se ei kuitenkaan tallenna valittuja arvoja minnekkään.

Screenshot 2018-10-25 at 19.05.02.png

Combo boxista valittujen arvojen tallennus

Tarkoituksemme on tallentaa käyttäjän Combo boxista valitsemat arvot ComboBoxExample -listan Title-kenttään. Pilkulla erotettuna. Tehdään tämä Title-kortin update-tapahtumassa.

Screenshot 2018-10-28 at 9.05.01.png

Aluksi muodostetaan Concat-funktion avulla valituista riveistä pilkuilla erotettu merkkijono.

Concat(ComboBox1.SelectedItems,Title &",")

Harmiksemme Concat lisää jokaisen valitun arvon perään pilkun. Myös viimeisen. Poistetaan merkkijonon viimeinen merkki (se turha pilkku) Mid-funktiolla.

Mid(Concat(ComboBox1.SelectedItems,Title &","), 1, Len(Concat(ComboBox1.SelectedItems,Title &",")) - 1)

Tallennus on valmis.

Tallennettujen arvojen esivalinta Combo boxissa

Tietojen onnistunut tallennus on vasta puolet toteutusta. Riviä muokatessa Combo boxissa tulisi olla valittuna aiemmin tallennetut arvot. Tämä onnistuu Combo boxin DefaultSelectedItems -ominaisuudella.

Screenshot 2018-10-28 at 9.17.13.png

Asetetaan sen arvoksi

Filter(ComboBoxValues, Title in DataCardValue2.Text)

Suomeksi: Suodatetaan ComboBoxValues -listasta ne arvot, joiden otsikko löytyy muokattavan rivin Title-kentästä. Filter-funktio palauttaa arvonaan taulukon (table). Juuri sellaista DefaultSelectedItems-ominaisuus odottaa.

Lopuksi poistetaan Title-kenttä lomakkeelta.

Toimiiko se?

Tallennetaan PowerAppsilla SharePoint-listalle uusi rivi.

Screenshot 2018-10-28 at 9.25.43.png

Tallennetu rivi näyttää SharePoint-listalla tältä.

Screenshot 2018-10-28 at 9.27.15.png

Otetaan tallennettu rivi muokattavaksi. Tallennetut arvot löytyvät comboboxista, kuten pitääkin

Lisätään muutama uusi arvo ja tallennetaan.

Toimii!