Jokainen PowerAppseja vähääkään enemmän toteuttanut on törmännyt tähän viattoman näköiseen siniseen huutomerkkiin.

powerapps delegate.jpg

Huutomerkki kertoo sinun tehneen kyselyn, jota ei voida delegoida. Laittamalla hiiren lauseen päälle, näet informatiivisen ilmoituksen. Ei tämä nyt niin kauhealta vaikuta?

delegate warning.jpg

Varoituksen jälkeen kannattaa jatkaa ainoastaan mikäli tietää mitä on tekemässä.

Siniseen huutomerkkiin törmää ennen pitkää kaikki, joten avataan hieman mistä tässä delegoinnissa on kyse.

Toiminnon suorittaminen – PowerApps vs. tietolähde

Delegointi liittyy PowerAppsin käyttämiin tietolähteisiin (SharePoint, SQL Server, Excel-tiedosto, Dynamics..). Kuvitellaan seuraava tilanne.

  • Tietovarastossa on tuotetietoja. Tuoterivejä on miljoona.
  • Tuotteet on jaettu tuoteryhmiin
  • Meitä kiinnostaa tuoteryhmän ”kahvit” tuotteet (40 kpl), joiden hintoja haluamme päivittää mobiilisovelluksella

Teemme PowerAppsin, joka hakee gallerialistaan kaikki kahvituotteet käyttäen Search-toimintoa (function).

Mikäli tietolähteenä on SQL-kanta, ei sinistä huutomerkkiä ilmesty. SQL-palvelu osaa rajata tietojoukon pyydetyllä tavalla ja palauttaa ainoastaan oikeat tuoterivit PowerAppsin käyttöön.

delegation sql.png

SQL-palvelu tukee delegointia ja kaikki toimii hienosti.

Tehdään sama ratkaisu käyttäen tietovarastona SharePoint -listaa (toivottavasti kenelläkään ei ole miljoonaa riviä SharePoint listassa). SharePoint ei tue tekemämme kyselyn osalta delegointia.

delegation sharepointSharePoint palauttaa PowerAppsille 500 ensimmäistä tuoteriviä. PowerApps hakee itse näiden rivien joukosta kaikki, jotka kuuluvat tuoteryhmään ”kahvi”.

Voitte arvata miten moni etsimistämme tuotteista on ensimmäisten 500 joukossa. Tuotteita on kuitenkin miljoona.

Ymmärsit aivan oikein. Yli 500 rivimäärillä ollaan tilanteessa, jossa PowerAppsissa ei ole käsiteltävänä kaikkia tietolähteen rivejä. Peliä pelataan 500 ensimmäisellä rivillä.

Delegointia tukevat tietolähteet

Kun sinisen huutomerkin takana oleva kauheus on selvinnyt, käydään katsomassa Microsoftin sivuilta mitkä tietolähteet tukevat delegointia.

Lista näyttää varsin hyvältä.

  • Common Data Service – Yes
  • SharePoint – Yes
  • SQL Server – Yes
  • Dynamics 365 – Yes
  • Salesforce – Yes
  • Dynamics 365 for Operations – Not yet
  • Dynamics 365 for Financials – Not yet
  • Dynamics NAV – Not yet
  • Google Sheets – Not yet

Hetkinen. Äskeisessä esimerkissä SharePoint palautti vain 500 riviä. Mutta sehän on delegointia tukevien tietolähteiden joukossa!

Niinpä. Saman artikkelin loppuosassa kerrotaan tarkemmin, mitkä operaatiot tukevat delegointia missäkin tietolähteessä.

Esimerkiksi SharePoint tukee seuraavia toimintoja (functions).

  • Filter
  • LookUp
  • Sort
  • SortByColumns

Seuraavia ei tueta

  • Average
  • Max
  • Min
  • Search
  • Sum

Käytimme esimerkissämme Search -toimintoa, joka ei ole tuettujen joukossa. Tällä kertaa ratkaisu on helppo. Voimme käyttää Searchin sijasta  Filter -toimintoa ja sen StartsWith -operaatiota (predicate).

Huomaa että vaikka joku toiminto tukee delegointia, eivät kaikki sen operaatiot sitä välttämättä tee. Esimerkiksi  (SharePointin) Filter/LookUp toiminnot tukevat ainoastaan seuraavia operaatioita (predicates)

  • =
  • And, Or, Not
  • StartsWith

Vinkki: SQL Serverin kanssa toimii sitten lähes kaikki.

Voiko 500 rivin rajoitusta muuttaa?

Mikäli tietojoukkosi on 600 tai 700 riviä, voi olla perusteltua fuskata ja kasvattaa tuota 500 rivin rajoitusta. Voit tehdä tämän PowerAppsin asetuksista (App settings).

delegate settings.jpg

Yhteenveto

Mikäli PowerApps käsittelee hyvin pieniä tietojoukkoja, ei delegointiin välttämättä tarvitse kiinnittää huomiota. Delegoinnin puute toki hidastaa sovellustasi.

Isommilla tietomäärillä tulee aivan aluksi selvittää, voidaanko haluttua toiminnallisuutta toteuttaa annetuilla tietolähteillä. Mikäli tietolähteet ovat vapaasti valittavissa, on SQL palvelimessa selvästi vähiten rajoituksia kyselyjen suhteen.