Power Platform: App Maker Challenge, deel 23

Ingediend door Dirk Hornstra op 06-jun-2022 22:52

Het drie-en-twintigste deel, verwachte tijd: een kleine drie kwartier.
Dit deel gaat over het maken van formules die gebruik maken van tabellen, records en verzamelingen in een canvas app in Power Apps.

In de vorige modules is er gekeken naar formules om een enkel record aan te passen. Maar als je complexere apps maakt, dan moet je soms met een formule meerdere records gebruiken.

Sommige functies wijzigen niets, maar gebruiken je data. Zoals CountRows geeft je het aantal rijen in een tabel terug.
En natuurlijk heb je Sum, Average.

Je kunt een record niet zomaar in je app weergeven. Je kunt data aan elkaar plakken met de Concat functie. Of je gaat data juist opsplitsen met de Split functie.

Als er geen standaard functie is, kun je met de dynamische ForAll-functie zelf acties uitvoeren op elk record wat je als input geeft.

En tabellen zijn flexibel. Je kunt zelf met Filter(..) al zaken filteren en zo een kleinere bron van data hebben.

Alle functies die je aan kunt roepen kun je hier bekijken: link.

Je hebt verschillende Count functies om aantallen records te tellen;

  • Count, aantal records in een tabel met 1 kolom met een cijfer.
  • CountA, aantal records in een tabel met 1 kolom die geen lege waarde hebben (dus NULL, maar ook "").
  • CountIf, aantal records met voorwaarden bv. CountIf(TaskTable, Complete="No").
  • CountRows, aantal records in een tabel.


Aggregate Functies

Werden al een beetje genoemd, de Average, Max, Min, Sum, StdevP (standaard deviatie), VarP (variance).
En je kunt die aanroepen met een tabel en veld, maar ook komma-gescheiden waarden.

ForAll functie
Al kort genoemd, voorbeeld is ForAll(CustomerOrdres, Office365.SendEmail(Email, "Thank you", "Fine customer " & FirstName))

Aandachtspunten

In een formule kan een actie uitgevoerd worden, het aanpassen van records met Patch en Collect functies.
Je kunt de tabel waar je de ForAll op uitvoert niet aanpassen, ook Patch en Collect niet.
De formule kan methodes op connecties aanroepen.
De flow kan parallel zijn, dus het het eerste record kan na het laatste record gemaild worden. Vertrouw dus niet op de volgorde. Daarom kun je ook niet gebruik maken van Set, UpdateContext, Clear en ClearCollect. Je kunt wel Collect gebruiken, maar de volgorde van records is (dus) ongedefinieerd.

Alle regels voor ForAll kun je hier nalezen: link.

Hierna volgt een voorbeeld waarbij ForAll in een gallerij gebruikt wordt.
We hadden al eerder het voorbeeld gebruikt van de steden met land en aantal inwoners, nu kun je door een checkbox aan te vinken deze in een lijst toevoegen.

Clear(NewCity);
 ForAll(Gallery1.AllItems, If(Checkbox1.Value = true, Collect(NewCity, {City: City, Country: Country, Population: Population})))

De vragen, toch een foutje. Wordt namelijk gevraagd hoe je kunt zorgen dat je toch iets met Set en UpdateContext kunt doen in een stuk ForAll code. Ik had gekozen voor Collect, maar het is de Patch-functie die je dan moet gebruiken.