Variables
Notitie
Microsoft Power Fx is de nieuwe naam voor de formuletaal van canvas-apps. Aan deze artikelen wordt gewerkt terwijl we de taal extraheren uit canvas-apps en deze integreren met andere Microsoft Power Platform-producten en het beschikbaar maken als open source. Begin met het Microsoft Power Fx-overzicht voor een inleiding in de taal.
Als u andere programmeerprogramma's zoals Visual Basic of JavaScript hebt gebruikt, vraagt u zich misschien het volgende af: waar zijn de variabelen? Microsoft Power Fx is iets anders en vereist een andere aanpak. In plaats van een variabele te gebruiken wanneer u een formule schrijft, moet u zich afvragen: Wat zou ik doen in een spreadsheet?
In andere hulpprogramma's hebt u mogelijk expliciet een berekening uitgevoerd en het resultaat opgeslagen in een variabele. In Power Fx en Excel worden formules echter automatisch opnieuw berekend wanneer de invoergegevens worden gewijzigd, dus is het doorgaans niet nodig om variabelen te maken en bij te werken. Als u deze benadering zo vaak mogelijk gebruikt, wordt het eenvoudiger om uw app te maken, begrijpen en onderhouden.
In sommige gevallen moet u variabelen gebruiken in Power Fx. Hiermee wordt het Excel-model uitgebreid door gedragsformuless toe te voegen. Deze formules worden uitgevoerd wanneer een gebruiker bijvoorbeeld een knop selecteert. Binnen een gedragsformule is het vaak nuttig om een variabele in te stellen voor gebruik in andere formules.
Over het algemeen is het beter om het gebruik van variabelen te vermijden. Toch is het gewenste resultaat soms alleen mogelijk met een variabele. Variabelen worden impliciet gemaakt en getypt wanneer ze worden weergegeven in functies die hun waarden instellen.
Excel vertalen naar Power Fx
Excel
Laten we bekijken hoe Excel werkt. Een cel kan een waarde bevatten, zoals een getal of een tekenreeks, of een formule die is gebaseerd op de waarden van andere cellen. Nadat de gebruiker een andere waarde in een cel heeft ingevoerd, worden eventuele formules die afhankelijk zijn van de nieuwe waarde opnieuw berekend in Excel. Voor dit gedrag hoeft u niets te programmeren.
In het volgende voorbeeld is cel A3 ingesteld op de formule A1+A2. Als A1 of A2 verandert, wordt A3 automatisch herberekend om de verandering weer te geven. Dit gedrag vereist geen codering buiten de formule zelf.
Excel beschikt niet over variabelen. De waarde van een cel met een formule wordt gewijzigd op basis van de invoer, maar er is geen manier om het resultaat van een formule te onthouden en op te slaan in een cel of ergens anders. Als u de waarde van een cel wijzigt, wordt mogelijk het hele werkblad gewijzigd en gaan eerder berekende waarden verloren. Gebruikers van Excel kunnen cellen kopiëren en plakken, maar dit moet handmatig worden gedaan en is niet mogelijk met formules.
Power Fx
Logica die u in Power Fx maakt, heeft een werking die lijkt op die van Excel. In plaats van cellen bij te werken, kunt u waar u maar wilt op het scherm besturingselementen toevoegen en deze een naam geven om in formules te gebruiken.
U kunt in Power Apps het Excel-gedrag bijvoorbeeld repliceren in een app door een besturingselement Label met de naam Label1 en twee besturingselementen Tekstinvoer met de namen Tekstinvoer1 en Tekstinvoer2 toe te voegen. Als u vervolgens de eigenschap Text van Label1 instelt op TextInput1.Text + TextInput2.Text, wordt altijd automatisch de som van de getallen in TextInput1 en TextInput2 weergegeven.
Het besturingselement Label1 is geselecteerd met de Text-formule in de formulebalk boven aan het scherm. Hier zien we de formule TextInput1.Text + TextInput2.Text. Deze formule maakt een afhankelijkheid tussen deze besturingselementen, net zoals er afhankelijkheden worden gemaakt tussen de cellen in een Excel-werkmap. Laten we de waarde van Tekstinvoer1 wijzigen:
De formule voor Label1 is automatisch herberekend. De nieuwe waarde wordt nu weergegeven.
U kunt in Power Fx formules niet alleen gebruiken om de primaire waarde van een besturingselement te bepalen, maar ook de eigenschappen, zoals de opmaak. In het volgende voorbeeld worden met een formule voor de eigenschap Color van het label negatieve waarden automatisch rood weergegeven. De If-functie ziet er waarschijnlijk bekend uit van Excel:
If( Value(Label1.Text) < 0, Color.Red, Color.Black )
U kunt formules gebruiken voor een groot aantal scenario's:
- Door de GPS-functie van uw apparaat te gebruiken, kan een besturingselement voor kaarten en een formule die gebruikmaakt van Location.Latitude en Location.Longitude uw huidige locatie weergeven. Op de kaart wordt automatisch uw locatie bijgehouden terwijl u zich verplaatst.
- Andere gebruikers kunnen gegevensbronnen bijwerken. Anderen in uw team kunnen bijvoorbeeld items in een SharePoint-lijst bijwerken. Wanneer u een gegevensbron vernieuwt, worden eventuele afhankelijke formules automatisch opnieuw berekend om de bijgewerkte gegevens weer te geven. In het voorbeeld kunt u ook een eigenschap Items uit de galerie aan de formule Filter(SharePointList ) toevoegen. Deze geeft automatisch de nieuwe gefilterde set records weer.
Voordelen
Het gebruik van formules om apps te bouwen biedt veel voordelen:
- Als u Excel kent, kent u Power Fx. Het model en de formuletaal zijn hetzelfde.
- Als u andere programmeerprogramma's hebt gebruikt, weet u misschien hoeveel code u voor deze voorbeelden nodig zou hebben. In Visual Basic zou u een gebeurtenis-handler moeten schrijven voor de wijzigingsgebeurtenis op elk besturingselement voor tekstinvoer. De code voor het uitvoeren van de berekeningen is overbodig en zou mogelijk niet meer gesynchroniseerd zijn, of u zou een algemene subroutine moeten schrijven. In Power Fx bereikt u dit met een enkele formule die uit één regel bestaan.
- Om te weten waar de tekst in Label1 vandaan komt, weet u precies wat u moet bekijken: de formule in de eigenschap Text. Er is geen andere manier om de tekst van dit besturingselement te beïnvloeden. In een traditioneel programmeerprogramma kan elke gebeurtenis-handler of subroutine de waarde van het label waar dan ook in het programma wijzigen. Hierdoor kan het lastiger worden om te bepalen waar en wanneer een variabele is gewijzigd.
- Als gebruikers een schuifregelaar aanpassen en vervolgens van gedachten veranderen, kunnen ze de schuifregelaar terugzetten naar de oorspronkelijke waarde. Het is dan alsof er nooit iets is gebeurd: de app bevat dezelfde besturingselementwaarden als voorheen. Het heeft geen gevolgen om te experimenteren en u af te vragen 'wat als', net als in Excel.
Over het algemeen is het handiger om een effect te bewerkstelligen met behulp van een formule. Laat de formule-engine in Power Fx het werk voor u doen.
Weten wanneer u variabelen gebruikt
Laten we eens proberen hoe het werkt als we een eenvoudige optelsom willen om een voorlopig totaal te krijgen. Als u een knop Optellen selecteert, voegt u een getal toe aan het voorlopige totaal. Als u een knop Wissen selecteert, zet u het voorlopige totaal op nul.
Weergeven | Beschrijving |
---|---|
Wanneer de app start, is het voorlopige totaal 0. De rode stip vertegenwoordigt de vinger van de gebruiker in het tekstinvoervak, waar de gebruiker 77 invoert. |
|
De gebruiker selecteert de knop Optellen. | |
77 wordt toegevoegd aan het voorlopige totaal. De gebruiker selecteert opnieuw de knop Optellen. |
|
77 wordt opnieuw opgeteld bij het voorlopige totaal, resulterend in 154. De gebruiker selecteert de knop Wissen. |
|
Het voorlopige totaal wordt teruggezet op 0. |
Voor onze optelsom wordt iets gebruikt dat niet bestaat in Excel: een knop. In deze app is het niet mogelijk om alleen formules te gebruiken om het voorlopige totaal te berekenen, omdat de waarde ervan afhankelijk is van een reeks acties die door de gebruiker wordt uitgevoerd. In plaats daarvan moet het voorlopige totaal worden geregistreerd en handmatig worden bijgewerkt. In de meeste programmeerprogramma's worden deze gegevens opslagen in een variabele.
Soms hebt u een variabele nodig om uw app naar wens te laten werken. Maar er geldt nog enig voorbehoud voor deze benadering:
- Het voorlopige totaal moet handmatig worden bijgewerkt. Het wordt niet automatisch herberekend.
- Het voorlopige totaal kan niet meer worden berekend op basis van de waarden van andere besturingselementen. Dit is afhankelijk van hoe vaak de gebruiker de knop Optellen heeft geselecteerd en welke waarde er elke keer in het besturingselement voor tekstinvoer was ingevuld. Heeft de gebruiker 77 ingevoerd en twee keer Optellen geselecteerd of is er 24 en 130 opgegeven voor elke toevoeging? Dat weet u niet als het totaal op 154 staat.
- Wijzigingen in het totaal kunnen op meerdere manieren tot stand zijn gekomen. In dit voorbeeld wordt het totaal bijgewerkt aan de hand van de knop Optellen en de knop Wissen. Welke knop veroorzaakt het probleem als de app niet naar verwachting functioneert?
Een globale variabele gebruiken
Om onze optelmachine te maken, hebben we een variabele nodig voor het voorlopige totaal. De eenvoudigste variabelen om mee te werken in Power Fx zijn globale variabelen.
De werking van globale variabelen:
- U stelt de waarde van de globale variabele in met de functie Set. Set( MyVar, 1 ) stelt de globale variabele MyVar in op de waarde 1.
- U gebruikt de globale variabele door te verwijzen naar de naam die is gebruikt in de functie Set. In dit geval retourneert MijnVar de waarde 1.
- Globale variabelen kunnen uit een willekeurige waarde bestaan, waaronder tekenreeksen, getallen, records en tabellen.
Laten we onze optelsom opnieuw bouwen met een globale variabele:
Voeg een tekstinvoerbesturingselement met de naam Tekstinvoer1 en twee knoppen met de naam Knop1 en Knop2 toe.
Stel de eigenschap Text van Knop1 in op "Optellen" en stel de eigenschap Text van Knop2 in op "Wissen".
Als het voorlopige totaal moet worden bijgewerkt wanneer een gebruiker de knop Optellen selecteert, stelt u de eigenschap OnSelect in op deze formule:
Set( LopendTotaal, LopendTotaal + TekstInvoer1.Tekst )
Het enkele bestaan van deze formule bevestigt RunningTotal als een globale variabele die een getal bevat vanwege de operator +. U kunt overal in de app verwijzen naar RunningTotal. Telkens wanneer de gebruiker deze app opent, heeft RunningTotal een beginwaarde van leeg.
De eerste keer dat een gebruiker de knop Optellen selecteert en Set uitvoert, is RunningTotal ingesteld op de waarde RunningTotal + Tekstinvoer1.
Om het voorlopige totaal in te stellen op 0 wanneer de gebruiker de knop Wissen selecteert, stelt u de eigenschap OnSelect in op deze formule:
Instellen( LopendTotaal, 0 )
Voeg een besturingselement Label toe en stel de eigenschap Text ervan in op RunningTotal.
Deze formule wordt automatisch opnieuw berekend en de waarde van RunningTotal wordt weergegeven op basis van de knoppen die de gebruiker selecteert.
Bekijk een voorbeeld van de app. U ziet de optelfunctie zoals hierboven is beschreven. Voer een getal in het tekstvak in en druk een paar keer op de knop Optellen. Wanneer u klaar bent, kunt u terugkeren naar de ontwerpmogelijkheden met behulp van de Esc-toets.
Als u de waarde van de globale variabele wilt weergeven, selecteert u het menu Bestand en selecteert u in het linkerdeelvenster Variabelen.
Selecteer de variabele voor een overzicht van alle locaties waar deze wordt gedefinieerd en gebruikt.
Typen variabelen
Power Fx heeft twee typen variabelen:
Type variabelen | Scope | Omschrijving | Functies voor vaststelling van |
---|---|---|---|
Globale variabelen | App | Zijn het eenvoudigst te gebruiken. Bevatten een getal, tekststring, Boolean, record, tabel, enz. waarnaar kan worden verwezen vanuit een willekeurige plaats in de app. | Set |
Verzamelingen | App | Bevatten een tabel waarnaar kan worden verwezen vanuit een willekeurige plaats in de app. Hiermee kan de inhoud van de tabel worden gewijzigd in plaats van deze als geheel in te stellen. Kan worden opgeslagen op het lokale apparaat voor later gebruik. | Verzamelen WissenVerzamelen |
Bij gebruik in Power Apps is er een derde type variabele:
Type variabelen | Scope | Beschrijving | Functies voor vaststelling van |
---|---|---|---|
Contextvariabelen | Scherm | Ideaal voor het doorgeven van waarden aan een scherm, zoals in andere talen parameters dat aan procedures doen. Er kan naar worden verwezen vanuit slechts één scherm. | UpdateContext Navigeren |
Variabelen maken en verwijderen
Alle variabelen worden impliciet gemaakt wanneer ze in een functie Set, UpdateContext, Navigate, Collect of ClearCollect voorkomen. Om een variabele en het bijbehorende type te declareren, hoeft u deze alleen in een van deze functies ergens in uw app op te nemen. Geen van deze functies maakt variabelen; ze vullen alleen variabelen met waarden. U declareert variabelen nooit expliciet zoals u mogelijk zou doen in een andere programmeertool en alle typen worden impliciet bepaald door het gebruik.
Zo hebt u misschien een besturingselement Knop met een OnSelect-formule van Set( X, 1 ). Deze formule bepaalt dat X een variabele is van het type getal. U kunt X gebruiken in formules als getal en die variabele heeft de waarde leeg nadat u de app hebt geopend, maar voordat u de knop selecteert. Wanneer u de knop selecteert, geeft u X de waarde 1.
Als u nog een knop hebt toegevoegd en de bijbehorende eigenschap OnSelect hebt ingesteld op Set( X, "Hallo"), zou er een fout optreden omdat het type (tekenreeks) niet overeenkomt met het type van de vorige Set (getal). Alle impliciete definities van de variabele moeten qua type overeenkomen. Nogmaals, dit gebeurde allemaal omdat u X vermeldde in formules, niet omdat een van die formules daadwerkelijk werd uitgevoerd.
U verwijdert een variabele door alle functies Set, UpdateContext, Navigate, Collect of ClearCollect te verwijderen waarin die de variabele impliciet wordt gedefinieerd. Zonder deze functies bestaat de variabele niet. U moet ook alle verwijzingen naar de variabele verwijderen, omdat deze een fout zullen veroorzaken.
Levensduur en beginwaarde van variabelen
Alle variabelen worden bewaard in het geheugen terwijl de app wordt uitgevoerd. Wanneer de app wordt gesloten, gaan de waarden die zich in de variabelen bevinden, verloren.
U kunt de inhoud van een variabele opslaan in een gegevensbron met behulp van de functies Patch of Collect. U kunt waarden ook opslaan in verzamelingen op het lokale apparaat met behulp van de functie SaveData.
Wanneer de gebruiker de app opent, hebben alle variabelen een beginwaarde van leeg.
Variabelen lezen
Met de naam van de variabele kunt u de waarde lezen. U kunt bijvoorbeeld een variabele definiëren met deze formule:
Set( Radius, 12 )
Vervolgens kunt u simpelweg Radius overal waar u een getal kunt gebruiken, waarna dit wordt vervangen door 12:
Pi() * Power( Radius, 2 )
Als u een contextvariabele dezelfde naam geeft als een globale variabele of een verzameling, heeft de contextvariabele voorrang. U kunt echter nog steeds verwijzen naar de globale variabele of een verzameling als u gebruikmaakt van de ondubbelzinnigheidsoperator [@Radius].
Een contextvariabele gebruiken (alleen Power Apps)
Bekijk hoe onze optelsom zou worden gemaakt met een contextvariabele in plaats van een globale variabele.
De werking van contextvariabelen:
- Contextvariabelen worden impliciet gemaakt en ingesteld via de functie UpdateContext of Navigate. Wanneer de app wordt gestart, hebben alle contextvariabelen een beginwaarde van leeg.
- U kunt contextvariabelen bijwerken met records. In andere programmeerprogramma's gebruikt u doorgaans "=" voor toewijzingen, zoals in "x = 1". Voor contextvariabelen gebruikt u in plaats daarvan { x: 1 }. Wanneer u een contextvariabele gebruikt, gebruikt u de naam rechtstreeks zonder de recordsyntaxis.
- U kunt een contextvariabele ook instellen wanneer u gebruikmaakt van de functie Navigate om een scherm weer te geven. Als u een scherm als een soort procedure of subroutine beschouwt, lijkt deze aanpak op het doorgeven van parameters in andere programmeertools.
- Behalve voor Navigate zijn contextvariabelen beperkt tot de context van een enkel scherm. Vandaar de naam. Het is niet mogelijk om ze buiten deze context te gebruiken of in te stellen.
- Contextvariabelen kunnen uit een willekeurige waarde bestaan, waaronder tekenreeksen, getallen, records en tabellen.
Laten we onze optelsom opnieuw bouwen met een contextvariabele:
Voeg een tekstinvoerbesturingselement met de naam Tekstinvoer1 en twee knoppen met de naam Knop1 en Knop2 toe.
Stel de eigenschap Text van Knop1 in op "Optellen" en stel de eigenschap Text van Knop2 in op "Wissen".
Als het voorlopige totaal moet worden bijgewerkt wanneer een gebruiker de knop Optellen selecteert, stelt u de eigenschap OnSelect in op deze formule:
UpdateContext( { RunningTotal: RunningTotal + TextInput1.Text } )
Het enkele bestaan van deze formule bevestigt RunningTotal als een contextvariabele die een getal bevat vanwege de operator +. U kunt overal in dit scherm verwijzen naar RunningTotal. Telkens wanneer de gebruiker deze app opent, heeft RunningTotal een beginwaarde van leeg.
De eerste keer dat de gebruiker de knop Optellen selecteert en UpdateContext uitvoert, is RunningTotal ingesteld op de waarde RunningTotal + Tekstinvoer1.
Om het voorlopige totaal in te stellen op 0 wanneer de gebruiker de knop Wissen selecteert, stelt u de eigenschap OnSelect in op deze formule:
UpdateContext( { RunningTotal: 0 } )
Nogmaals, UpdateContext wordt gebruikt met de formule UpdateContext( { RunningTotal: 0 } ).
Voeg een besturingselement Label toe en stel de eigenschap Text ervan in op RunningTotal.
Deze formule wordt automatisch opnieuw berekend en de waarde van RunningTotal wordt weergegeven op basis van de knoppen die de gebruiker selecteert.
Bekijk een voorbeeld van de app. U ziet de optelfunctie zoals hierboven is beschreven. Voer een getal in het tekstvak in en druk een paar keer op de knop Optellen. Wanneer u klaar bent, kunt u terugkeren naar de ontwerpmogelijkheden met behulp van de Esc-toets.
U kunt de waarde van een contextvariabele instellen tijdens het navigeren naar een scherm. Dit is handig voor het doorgeven van 'context' of 'parameters' van het ene scherm naar de andere. Om deze techniek te demonstreren, voegt u een scherm in, voegt u een knop in en stelt u de eigenschap OnSelect hiervan in op deze formule:
Navigeren(Scherm1, Geen, { RunningTotal: -1000 } )
Houd de Alt-toets ingedrukt terwijl u deze knop selecteert om zowel Screen1 weer te geven als de contextvariabele RunningTotal in te stellen op -1000.
Als u de waarde van de contextvariabele wilt weergeven, selecteert u het menu Bestand en selecteert u Variabelen in het linkerdeelvenster.
Selecteer deze als u wilt zien waar de contextvariabele is gedefinieerd en gebruikt.
Een verzameling gebruiken
Tot slot bekijken we het maken van onze optelmachine met een verzameling. Omdat een verzameling een tabel bevat die gemakkelijk te wijzigen is, zorgen we dat deze optelmachine een 'papieren strook' bijhoudt van elke waarde die wordt ingevoerd.
De werking van verzamelingen:
- Verzamelingen kunnen worden gemaakt en ingesteld met de functie ClearCollect. U kunt in plaats daarvan de functie Collect gebruiken, maar hiervoor is een andere variabele nodig; de oude kan niet worden vervangen.
- Een verzameling is een soort gegevensbron en daarom een tabel. Voor toegang tot een enkele waarde in een verzameling gebruikt u de functie First en extraheert u één veld uit de resulterende record. Als u één waarde hebt gebruikt met ClearCollect, wordt dit het veld Value, zoals in dit voorbeeld:
Eerste(VariabeleNaam).Waarde
Laten we onze optelmachine opnieuw maken met behulp van een verzameling:
Voeg een tekstinvoerbesturingselement met de naam Tekstinvoer1 en twee knoppen met de naam Knop1 en Knop2 toe.
Stel de eigenschap Text van Knop1 in op "Optellen" en stel de eigenschap Text van Knop2 in op "Wissen".
Als het voorlopige totaal moet worden bijgewerkt wanneer een gebruiker de knop Optellen selecteert, stelt u de eigenschap OnSelect in op deze formule:
Verzamelen(PapierTape, TekstInvoer1.Tekst)
Puur het bestaan van deze formule bevestigt PaperTape als verzameling met een tabel met één kolom die tekenreeksen bevat. U kunt overal in deze app verwijzen naar PaperTape. Telkens wanneer een gebruiker deze app opent, is PaperTape een lege tabel.
Als deze formule wordt uitgevoerd, wordt de nieuwe waarde toegevoegd aan het einde van de verzameling. Omdat we een enkele waarde toevoegen, plaatst de functie Collect deze automatisch in een tabel met één kolom met de kolomnaam Value die we later gaan gebruiken.
Om de papieren strook te wissen wanneer de gebruiker de knop Wissen selecteert, stelt u de eigenschap OnSelect in op deze formule:
Doorzichtig (Papiertape)
Als u het voorlopige totaal wilt weergeven, voegt u een label toe en stelt u de eigenschap Text ervan in op deze formule:
Sum(PapierTape, Waarde)
Als u de optelsom wilt uitvoeren, drukt u op F5 om het voorbeeld te openen, voert u in het besturingselement voor tekstinvoer getallen in en selecteert u knoppen.
Druk op de Esc-toets om terug te gaan naar de standaardwerkruimte.
Als u de papieren strook wilt weergeven, voegt u een besturingselement Gegevenstabel in en stelt u de eigenschap Items in op deze formule:
Papiertape
Selecteer in het rechterdeelvenster Velden bewerken en selecteer vervolgens Veld toevoegen, selecteer de kolom Waarde en selecteer vervolgens Toevoegen voor weergave.
Als u de waarden in uw verzameling wilt bekijken, selecteert u Verzamelingen in het menu Bestand.
Als u uw verzameling wilt opslaan en ophalen, voegt u twee extra knopbesturingselementen toe en stelt u hun eigenschappen Text in op Load en Save. Stel de eigenschap OnSelect van de knop Laden in op deze formule:
Clear(PapierTape); LoadData(PapierTape, "OpgeslagenPapierTape", true)
U moet de verzameling eerst wissen, omdat LoadData de opgeslagen waarden toevoegt aan het einde van de verzameling.
Stel de eigenschap OnSelect van de knop Opslaan in op deze formule:
SaveData(PapierTape, "OpgeslagenPapierTape")
Bekijk het opnieuw door op de toets F5 te drukken, getallen in het besturingselement voor tekstinvoer in te voeren en knoppen te selecteren. Selecteer de knop Opslaan. Sluit de app, start deze opnieuw en selecteer de knop Laden om uw verzameling opnieuw te laden.