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.
Älä kuitenkaan tee niin.
- 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.
- 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ä
- 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ä.
Sekä ComboBoxValues -lista, jossa ylläpidetään valittavia arvoja.
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.
Nyt meillä on PowerApps, jolla voi ylläpitää kyseisen listan rivejä.
Lisätään EditScreen-näytön lomakkeelle oma kortti (custom card).
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
Lomakkeellamme on näennäisesti toimiva Combo box. Se ei kuitenkaan tallenna valittuja arvoja minnekkään.
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.
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.
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.
Tallennetu rivi näyttää SharePoint-listalla tältä.
Otetaan tallennettu rivi muokattavaksi. Tallennetut arvot löytyvät comboboxista, kuten pitääkin
Lisätään muutama uusi arvo ja tallennetaan.
Toimii!