Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: Canvas-apps
Copilot Studio
Desktop stromen
Modelgestuurde apps
Power Platform CLI
Dataverse-functies
Power Pages
Berekent waarden en voert acties uit voor alle records in een tabel.
Beschrijving
De ForAll functie evalueert een formule voor alle records in een tabel. De formule kan een waarde berekenen en/of acties uitvoeren, zoals het wijzigen van gegevens of het werken met een verbinding. Gebruik de functie With om de formule voor een enkele record te evalueren.
Gebruik de functie Reeks met de ForAll functie om te herhalen op basis van een telling.
Velden van de momenteel verwerkte record zijn beschikbaar in de formule. Gebruik de operator ThisRecord of verwijs gewoon met de naam naar velden, zoals u dat ook bij andere waarden zou doen. De operator As kan ook worden gebruikt om een naam te geven aan de record die wordt verwerkt, wat kan helpen uw formule begrijpelijker te maken en geneste records toegankelijk te maken. Meer informatie vindt u in de voorbeelden hieronder en in werken met recordbereik.
Retourwaarde
Het resultaat van elke formule-evaluatie wordt in een tabel geretourneerd in dezelfde volgorde als de invoertabel.
Als het resultaat van de formule één waarde is, is de resulterende tabel een tabel met één kolom. Als het resultaat van de formule een record is, bevat de resulterende tabel records met dezelfde kolommen als de resultaatrecord.
Als het resultaat van de formule een lege waarde is, is er geen record in de resultatentabel voor die invoerrecord. In dit geval zijn er minder records in de resultaattabel dan de brontabel.
Actie uitvoeren
De formule kan functies bevatten die actie ondernemen, zoals het wijzigen van de records van een gegevensbron met de functies Patch en Collect. De formule kan ook methoden aanroepen bij verbindingen. Met de ;-operator kunnen meerdere acties per record worden uitgevoerd. U kunt de tabel die het onderwerp van de ForAll functie is, niet wijzigen.
Houd bij het opstellen van uw formule in gedachten dat records in elke willekeurige volgorde en, indien mogelijk, parallel kunnen worden verwerkt. De eerste record van de tabel kan mogelijk na de laatste record worden verwerkt.
Wees voorzichtig om afhankelijkheden in de volgorde te voorkomen. Daarom kunt u de functies UpdateContext, Clear en ClearCollect niet binnen een ForAll functie gebruiken, omdat ze eenvoudig kunnen worden gebruikt voor het opslaan van variabelen die vatbaar zijn voor dit effect. U kunt Collect gebruiken, maar de volgorde waarin de records worden toegevoegd, is niet gedefinieerd.
Verschillende functies die gegevensbronnen kunnen wijzigen, inclusief Collect, Remove en Update, retourneren de gewijzigde gegevensbron als hun geretourneerde waarde. Deze retourwaarden kunnen groot zijn en aanzienlijke resources verbruiken als ze worden geretourneerd voor elke record van de ForAll tabel. U kunt ook merken dat deze retourwaarden niet zijn wat u verwacht, omdat ForAll ze parallel kunnen werken en de neveneffecten van deze functies kunnen scheiden van het verkrijgen van hun resultaat. Als de retourwaarde ForAll niet wordt gebruikt, wat vaak het geval is bij functies voor het wijzigen van gegevens, wordt de retourwaarde niet gemaakt en zijn er geen problemen met resources of orders. Maar als u het resultaat gebruikt van een ForAll en een van de functies die een gegevensbron retourneren, moet u zorgvuldig nadenken over de structuur van het resultaat en het eerst uitproberen op kleine gegevenssets.
Alternatieven
Veel functies in Power Apps kunnen meerdere waarden tegelijk verwerken met behulp van een tabel met één kolom. De functie Len kan bijvoorbeeld een tabel met tekstwaarden verwerken, waardoor een tabel met lengten op dezelfde manier kan worden ForAll geretourneerd. Dit kan de noodzaak voor gebruik ForAll in veel gevallen elimineren, kan efficiënter zijn en is gemakkelijker te lezen.
Een andere overweging is dat ForAll niet delegeerbaar is terwijl andere functies mogelijk zijn, zoals Filter.
Delegering
Als deze functie wordt gebruikt met een gegevensbron, kan deze niet worden overgedragen. Alleen het eerste deel van de gegevensbron wordt opgehaald en vervolgens wordt de functie toegepast. Het resultaat is mogelijk niet volledig. Tijdens het schrijven ziet u mogelijk een waarschuwing om u te herinneren aan deze beperking en om u erop te wijzen dat u waar mogelijk kunt overschakelen naar alternatieven met overdrachtmogelijkheden. Zie het overdrachtoverzicht voor meer informatie.
Syntaxis
ForAll(Tabel, formule)
- Tabel - Verplicht. Tabel waarvoor actie moet worden uitgevoerd.
- Formule - Verplicht. De formule die moet worden geëvalueerd voor elke record van de Tabel.
Voorbeelden
Berekeningen
De volgende voorbeelden gebruiken de Kwadraten-gegevensbron:
Stel de eigenschap OnSelect van een besturingselement Button in op de volgende formule, open de voorbeeldmodus en selecteer de knop om deze gegevensbron als een verzameling te maken:
ClearCollect( Squares, [ "1", "4", "9" ] )
| Formule | Beschrijving | Resultaat |
|---|---|---|
|
ForAll( Vierkanten, Sqrt( Waarde ) ) Sqrt( Kwadraten ) |
Berekent voor alle records van de invoertabel de vierkantswortel van de kolom Waarde. De functie Sqrt kan ook worden gebruikt met een tabel met één kolom, zodat u dit voorbeeld zonder gebruik ForAllkunt uitvoeren. |
|
| ForAll( Vierkanten, Power( Waarde, 3 ) ) | Verhoogt de kolom Waarde voor alle records van de invoertabel tot de derde macht. De Power-functie biedt geen ondersteuning voor tabellen met één kolom. ForAll Daarom moet in dit geval worden gebruikt. |
|
Een verbinding gebruiken
De volgende voorbeelden gebruiken de Uitdrukkingen-gegevensbron:
Stel de eigenschap OnSelect van een besturingselement Button in op de volgende formule, open de voorbeeldmodus en selecteer de knop om deze gegevensbron als een verzameling te maken:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Dit voorbeeld gebruikt ook een verbinding met Microsoft Translator. Raadpleeg het artikel over verbindingen beheren om deze verbinding aan uw app toe te voegen.
| Formule | Beschrijving | Resultaat |
|---|---|---|
| ForAll(Expressies, MicrosoftTranslator.Translate(Waarde, "es")) | Vertaal de inhoud van de kolom Waarde voor alle records in de tabel Uitdrukkingen in het Spaans (afgekort tot "es"). |
|
| ForAll(Expressies, MicrosoftTranslator.Translate(Waarde, "fr")) | Vertaal de inhoud van de kolom Waarde voor alle records in de tabel Uitdrukkingen in het Frans (afgekort tot "fr"). |
|
Een tabel kopiëren
Soms moet u gegevens filteren, vormen, sorteren en manipuleren. Power Apps biedt veel functies om dit te doen, zoals Filter, AddColumns en Sort. Power Apps behandelt elke tabel als een waarde, zodat deze door formules kan stromen en eenvoudig kan worden gebruikt.
En soms wilt u een kopie van dit resultaat maken voor later gebruik of wilt u informatie van de ene gegevensbron naar de andere overbrengen. Power Apps heeft de functie Collect om gegevens te kopiëren.
Maar voordat u die kopie maakt, moet u goed nadenken als dat nodig is. Veel situaties kunnen worden aangepakt door de onderliggende gegevensbron op aanvraag te filteren en vorm te geven met een formule. Een aantal nadelen van het maken van een kopie:
- Twee kopieën van dezelfde informatie betekent dat een ervan mogelijk niet langer wordt gesynchroniseerd.
- Het maken van een kopie kan veel computergeheugen, netwerkbandbreedte en/of tijd kosten.
- Voor de meeste gegevensbronnen kan kopiëren niet worden gedelegeerd, waardoor wordt beperkt hoeveel gegevens kunnen worden verplaatst.
De volgende voorbeelden gebruiken de Producten-gegevensbron:
Stel de eigenschap OnSelect van een besturingselement Button in op de volgende formule, open de voorbeeldmodus en selecteer de knop om deze gegevensbron als een verzameling te maken:
ClearCollect( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
Het is ons doel om te werken met een afgeleide tabel die alleen de artikelen bevat waarvan er meer zijn gevraagd dan er beschikbaar zijn, en waarvoor we dus een bestelling moeten plaatsen:
We kunnen deze taak uitvoeren op een aantal verschillende manieren die allemaal hetzelfde resultaat met diverse voordelen en nadelen opleveren.
Tabel vormgeven op aanvraag
Maak geen kopie! We kunnen de volgende formule gebruiken waar we hem maar nodig hebben:
// Table shaping on demand, no need for a copy of the result
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Er wordt een recordbereik door de functies Filter en AddColumns gemaakt om de vergelijkings- en aftrekbewerkingen uit te voeren met de velden 'Gevraagde hoeveelheid' en 'Beschikbare hoeveelheid' van elk record.
In dit voorbeeld kan de functie Filter worden gedelegeerd. Dit is belangrijk omdat hij alle producten kan vinden die aan de criteria voldoen - zelfs als dat slechts een paar records uit een tabel met miljoenen records zijn. Op dit moment kunnen ShowColumns en AddColumns niet worden gedelegeerd, dus het werkelijke aantal producten dat moet worden besteld, is beperkt. Als u weet dat de grootte van dit resultaat altijd relatief klein is, is deze benadering prima.
En omdat we geen kopie hebben gemaakt, is er geen extra kopie van de informatie die moet worden beheerd of verouderd.
ForAll op aanvraag
Een andere benadering is het gebruik van de ForAll functie om de tabelvormende functies te vervangen:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Deze formule is voor sommige mensen mogelijk eenvoudiger te lezen en te schrijven.
Geen deel van de ForAll is delegeerbaar. Alleen het eerste gedeelte van de tabel Producten wordt geëvalueerd. Dit kan een probleem zijn als deze tabel groot is. Omdat Filter in het vorige voorbeeld kan worden gedelegeerd, kan deze mogelijk beter werken met grote gegevenssets.
Het resultaat verzamelen
In sommige gevallen is mogelijk een kopie van gegevens vereist. U moet mogelijk informatie van de ene gegevensbron naar de andere verplaatsen. In dit voorbeeld worden bestellingen geplaatst via een tabel NieuweBestelling in het systeem van de leverancier. Voor snelle gebruikersinteracties wilt u mogelijk een lokale kopie van een tabel in de cache opslaan, zodat er geen serverlatentie is.
We gebruiken dezelfde tabelvormgeving als in de vorige twee voorbeelden, maar we leggen het resultaat vast in een verzameling:
ClearCollect( NewOrder,
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
)
ClearCollect( NewOrder,
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
ClearCollect en Collect kunnen niet worden gedelegeerd. Als gevolg daarvan is de hoeveelheid gegevens die op deze manier kan worden verplaatst beperkt.
Verzamelen binnen ForAll
Ten slotte kunnen we de Collect rechtstreeks in het ForAllvolgende uitvoeren:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
ForAll De functie kan momenteel niet worden gedelegeerd. Als de tabel Producten groot is, ForAll kijkt u alleen naar de eerste set records en missen we mogelijk enkele producten die moeten worden besteld. Maar voor tabellen die we weten dat ze klein zijn, is deze aanpak prima.
Houd er rekening mee dat we het resultaat van de ForAll. De functie-aanroepen verzamelen die vanuit de functie worden uitgevoerd, retourneren de gegevensbron NewOrder voor alle records, wat kan leiden tot talloze gegevens als we deze vastleggen.
Tabel toewijzen in een onderdeel
Zie Tabellen toewijzen.