Forstå variabler i lærredsapps

Hvis du har brugt et andet programmeringsværktøj som f.eks. Visual Basic eller JavaScript, spørger du måske: Hvor er variablerne? Power Apps er lidt anderledes og kræver en anden fremgangsmåde. I stedet for at række ud efter en variabel, når du udvikler en lærredsapp, skal du spørge dig selv: Hvad ville jeg gøre i Excel?

I andre værktøjer kan du eksplicit have foretaget en beregning og gemt resultatet i en variabel. Men både Power Apps og Excel genberegner automatisk formler, når inputdataene ændres, så du har som regel ikke brug for at oprette og opdatere variabler. Ved at bruge denne fremgangsmåde kan du, når det er muligt, nemmere oprette, forstå og vedligeholde din app.

I nogle tilfælde skal du bruge variabler i Power Apps, som udvider Excels model ved at tilføje formler for funktionsmåde. Disse formler køres, f.eks. når en bruger vælger en knap. I en formel for funktionsmåde er det ofte nyttigt at angive en variabel, der skal bruges i andre formler.

Generelt skal du undgå at bruge variabler. Men nogle gange kan kun en variabel muliggøre den ønskede oplevelse. Variabler oprettes og skrives implicit, når de vises i funktioner, der angiver deres værdier.

Overføre Excel til Power Apps

Excel

Lad os gennemgå, hvordan Excel fungerer. En celle kan indeholde en værdi som et tal eller en streng eller en formel, der er baseret på værdierne i andre celler. Når brugeren indtaster en anden værdi i en celle, genberegner Excel automatisk formler, der afhænger af den nye værdi. Du skal ikke programmere noget for at muliggøre denne funktionsmåde.

I følgende eksempel er celle A3 angivet til formlen A1 + A2. Hvis A1 eller A2 bliver ændret, genberegnes A3 automatisk for at afspejle ændringen. Denne funktionsmåde kræver, at der ikke kodes uden for selve formlen.

Animation af genberegning af summen af to tal i Excel.

Excel bruger ikke variabler. Værdien i en celle, der indeholder en formel, ændres på baggrund af inputtet, men der er ingen metode til at huske resultatet af en formel og gemme det i en celle eller andre steder. Hvis du ændrer værdien i en celle, kan hele regnearket ændre sig, og tidligere beregnede værdier går tabt. En Excel-bruger kan kopiere og indsætte celler, men det er under brugerens manuelle kontrol og er ikke muligt med formler.

Power Apps

Apps, som du opretter i Power Apps, opfører sig stort set som Excel. Du kan tilføje kontrolelementer i stedet for at opdatere celler, hvor du vil på en skærm, og navngive dem til brug i formler.

Du kan f.eks. gengive Excel-funktionsmåden i en app ved at tilføje et kontrolelement af typen Etiket med navnet Label1 og to kontrolelementer af typen Tekstinput med navnet TextInput1 og TextInput2. Hvis du derefter angiver egenskaben Text for Label1 til TextInput1 + TextInput2, vil summen af tallene i TextInput1 og TextInput2 altid blive vist automatisk.

Beregning af summen af to tal i Power Apps.

Bemærk, at kontrolelementet Label1 er markeret og viser sin formel Text på formellinjen øverst på skærmen. Her finder vi formlen TextInput1 + TextInput2. Denne formel opretter en afhængighed mellem disse kontrolelementer, ligesom der oprettes afhængigheder mellem cellerne i en Excel-projektmappe. Lad os ændre værdien af TextInput1:

Animation af beregning af summen af to tal i Power Apps.

Formlen for Label1 er automatisk blevet genberegnet og viser den nye værdi.

I Power Apps kan du bruge formler til at bestemme ikke kun den primære værdi for et kontrolelement, men også egenskaber som f.eks. formatering. I det næste eksempel viser en formel for egenskaben Color for etiketten automatisk negative værdier med rødt. Funktionen If minder om den fra Excel:

If( Value(Label1.Text) < 0, Red, Black )

Animation af betinget formatering.

Du kan bruge formler til en lang række scenarier:

  • Du kan for eksempel bruge enhedens GPS, et kortkontrolelement kan vise din aktuelle placering med en formel, der bruger Location.Latitude og Location.Longitude. Når du bevæger dig, registrerer kortet automatisk din placering.
  • Andre brugere kan opdatere datakilder. For eksempel kan andre i teamet opdatere elementer på en SharePoint-liste. Når du opdaterer en datakilde, genberegnes alle afhængige formler automatisk for at afspejle de opdaterede data. For at udvide eksemplet kan du angive et galleris egenskab af typen Items til formlen Filter( SharePointList ), som automatisk viser det netop filtrerede sæt af poster.

Forsikringsydelser

Der er mange fordele ved at bruge formler til at bygge apps:

  • Hvis du kender Excel, kender du Power Apps. Model- og formelsproget er det samme.
  • Hvis du har brugt andre programmeringsværktøjer, så tænk på, hvor meget kodning du skulle lave for at opnå disse eksempler. I Visual Basic ville du skulle skrive en hændelseshandler for ændringshændelsen på hvert kontrolelement af typen Tekstinput. Koden til at udføre beregningen i hver af disse er overflødig og kan komme ud af synkronisering, eller du skal skrive en fælles subrutine. I Power Apps opnår du alt dette med en enkelt formel på én linje.
  • For at forstå hvor teksten i Label1 kommer fra, ved du præcis, hvor du skal kigge: formlen i egenskaben Text. Der er ingen anden måde til at påvirke teksten i dette kontrolelement. I et traditionelt programmeringsværktøj kunne en hændelseshandler eller en subrutine ændre værdien af etiketten fra et vilkårligt sted i programmet. Det kan gøre det svært at spore, hvornår og hvor en variabel blev ændret.
  • Hvis brugeren ændrer et skyderobjekt, og derefter skifter mening, kan brugeren ændre skyderen tilbage til den oprindelige værdi. Og det er, som om intet nogensinde er blevet ændret: Programmet viser de samme kontrolværdier, som det gjorde før. Ligesom i Excel er der ingen konsekvenser ved eksperimentere og spørge "Hvad nu hvis".

Generelt er det bedst, hvis du kan opnå en effekt ved hjælp af en formel. Lad formelmaskinen i Power Apps arbejde for dig.

Vær klar over, hvornår variabler skal bruges

Lad os ændre vores simple regnemaskine til at fungere som en gammeldags adderingsmaskine med en løbende total. Hvis du vælger knappen Læg til, lægger du et tal til den løbende total. Hvis du vælger knappen Ryd, nulstiller du den løbende total til nul.

Skærm Beskrivelse
App med kontrolelementet Tekstinput, en etiket og to knapper. Når appen starter, er den løbende total 0.

Den røde prik repræsenterer brugerens finger i feltet for tekstinput, hvor brugeren skriver 77.
Kontrolelementet Tekstinput indeholder 77, og knappen Læg til er ved at blive trykket på. Brugeren vælger knappen Læg til.
Totalen er 77, og der føjes endnu 77 til den. 77 føjes til den løbende total.

Brugeren vælger knappen Læg til igen.
Totalen er 154, før den ryddes. 77 bliver igen føjet til den løbende total, hvilket resulterer i 154.

Brugeren vælger knappen Ryd.
Totalen bliver fjernet. Den løbende total nulstilles til 0.

Vores regnemaskine bruger noget, der ikke findes i Excel: en knap. I denne app kan du ikke kun bruge formler til at beregne den løbende total, da dens værdi afhænger af en række handlinger, som brugeren udfører. Vores løbende total skal i stedet for registreres og opdateres manuelt. De fleste programmeringsværktøjer opbevarer disse oplysninger i en variabel.

Du skal nogle gange bruge en variabel til at få din app til at fungere på den ønskede måde. Men der følger advarsler med fremgangsmåden:

  • Du skal opdatere den løbende total manuelt. Automatisk genberegning vil ikke klare arbejdet for dig.
  • Den løbende total kan ikke længere beregnes på baggrund af værdierne i andre kontrolelementer. Den afhænger af, hvordan mange gange brugeren valgte knappen Læg til, og hvilken værdi der var i kontrolelementet af typen Tekstinput hver gang. Indtastede brugeren 77 og valgte Læg til to gange, eller angav brugeren 24 og 130 for hver af tilføjelserne? Du kan ikke se forskel, når den samlede total er nået til 154.
  • Ændringer i den samlede total kan stamme fra forskellige stier. I dette eksempel kan både knappen Læg til og Ryd opdatere den samlede total. Hvis appen ikke fungerer som forventet, hvilken knap er så årsag til problemet?

Bruge en global variabel

For at bygge vores regnemaskine skal vi bruge en variabel til at holde den løbende total. De enkleste variabler at arbejde med i Power Apps er globale variabler.

Sådan fungerer globale variabler:

  • Du kan angive værdien for den globale variabel med funktionen Set. Set ( MyVar, 1 ) angiver den globale variabel MyVar til en værdi på 1.
  • Du bruger den globale variabel ved at henvise til navnet brugt til funktionen Set. I dette tilfælde returnerer MyVar 1.
  • Globale variabler kan indeholde andre værdier, herunder strenge, tal, poster og tabeller.

Lad os bygge regnemaskinen igen ved hjælp af en global variabel:

  1. Tilføj et kontrolelement af typen tekstinput med navnet TextInput1 og to knapper med navnet Button1 og Button2.

  2. Angiv egenskaben Text for Button1 til "Læg til", og angiv egenskaben Text for Button2 til "Ryd".

  3. Opdater den løbende total, når en bruger vælger knappen Læg til ved at angive dens egenskab OnSelect til denne formel:

    Set( RunningTotal, RunningTotal + TextInput1 )

    Denne formel opretter uden videre RunningTotal som en global variabel, der indeholder et tal på grund af operatoren +. Du kan referere til RunningTotal overalt i appen. Når brugeren åbner denne app, har RunningTotal startværdien tom.

    Første gang en bruger vælger knappen Læg til, og Set køres, indstilles RunningTotal til værdien RunningTotal + TextInput1.

    Egenskaben OnSelect for knappen Læg til er angivet til funktionen Set.

  4. Hvis du vil angive den løbende total til 0, når brugeren vælger knappen Ryd, skal du angive dens egenskab OnSelect til denne formel:

    Set( RunningTotal, 0 )

    Egenskaben OnSelect for knappen Ryd er angivet til funktionen Set.

  5. Tilføj et kontrolelement af typen Label, og angiv dets egenskab Text til RunningTotal.

    Denne formel genberegnes automatisk og viser brugeren værdien af RunningTotal, i takt med at den ændrer sig, baseret på de knapper, som brugeren vælger.

    Tekstegenskab for etiketten er angivet til variabelnavnet.

  6. Når du viser et eksempel på appen, har vi vores regnemaskine som beskrevet ovenfor. Indtast et tal i tekstfeltet, og tryk et par gange på knappen Læg til. Når du er klar, kan du vende tilbage til skrivningen med tasten Esc.

    Kontrolelementet Tekstinput indeholder en værdi, og etiketten indeholder den løbende total.

  7. Hvis du vil se den globale variabels værdi, skal du vælge menuen Filer og vælge Variabler i venstre rude.

    Indstillingen Variabler i menuen Filer.

  8. Hvis du vil vise alle steder, hvor variablen er defineret og bruges, skal du vælge den.

    Liste over steder, hvor variablen bruges.

Typer af variabler

Power Apps indeholder tre typer variabler:

Variabeltype Scope Beskrivelse Funktioner, der opretter
Globale variabler App Nemmest at bruge. Indeholder et tal, en tekststreng, boolesk værdi, post, tabel, osv., der kan henvises til fra ethvert sted i appen. Indstil
Kontekstvariabler Skærm God til at sende værdier til et skærmbillede, ligesom parametre for en procedure på andre sprog. Kan kun refereres til fra ét skærmbillede. UpdateContext
Navigate
Samlinger App Indeholder en tabel, der kan refereres til fra et vilkårligt sted i appen. Tillader, at oplysningerne i tabellen kan ændres i stedet for at blive angivet som en helhed. Kan gemmes på den lokale enhed til senere brug. Collect
ClearCollect

Oprette og fjerne variabler

Alle variabler oprettes implicit, når de vises i en funktion af typen Set, UpdateContext, Navigate, Collect eller ClearCollect. Hvis du vil angive en variabel og dens type, skal du kun inkludere den i en af disse funktioner hvor som helst i din app. Ingen af disse funktioner opretter variabler. De udfylder kun variabler med værdier. Du kan aldrig angive variabler eksplicit, som du måske kan i et andet programmeringsværktøj, og al indtastning er implicit i brugen.

Du kan f.eks. have et knapkontrolelement med en OnSelect-formel, der er lig med Set( X, 1 ). Denne formel opretter X som en variabel med en type af tal. Du kan bruge X i formler som et tal, og den pågældende variabel har værdien tom, når du åbner appen, og før du vælger knappen. Når du vælger knappen, giver du X værdien 1.

Hvis du har tilføjet en anden knap og angivet dens egenskab OnSelect til Set( X, "Hello" ), opstår der en fejl, fordi typen (tekststreng) ikke stemmer overens med typen i det forreige Set (tal). Alle implicitte definitioner af variabler skal være enige om typen. Alt dette sker, fordi du har angivet X i formler, ikke fordi nogen af disse formler rent faktisk er blevet kørt.

Du fjerner en variabel ved at fjerne alle de funktioner af typen Set, UpdateContext, Navigate, Collect eller ClearCollect, der implicit opretter variablen. Uden disse funktioner findes variablen ikke. Du skal også fjerne eventuelle referencer til variablen, da de vil forårsage en fejl.

Levetid og startværdi for variabel

Alle variabler gemmes i hukommelsen, mens appen kører. Når appen lukkes, går de værdier, som variablerne indeholdt, tabt.

Du kan gemme indholdet af en variabel i en datakilde ved hjælp af funktionerne Patch eller Collect. Du kan også gemme værdier i samlinger på den lokale enhed ved hjælp af funktionen SaveData.

Når brugeren åbner appen, har alle variabler en startværdi, der er tom.

Læsning af variabler

Du bruger variablens navn til at læse deres værdi. Du kan f.eks. definere en variabel med denne formel:

Set( Radius, 12 )

Du skal derefter blot bruge Radius overalt, hvor du skal bruge et tal, så vil det blive erstattet med 12:

Pi() * Power( Radius, 2 )

Hvis du tildeler en kontekstvariabel samme navn som en global variabel eller en samling, har kontekstvariablen fortrinsret. Du kan dog stadig henvise til den globale variabel eller samling, hvis du bruger operatoren til fjernelse af flertydige udtryk [@Radius].

Bruge en kontekstvariabel

Lad os se på, hvordan vores regnemaskine ville være bygget ved hjælp af en kontekstvariabel i stedet for en global variabel.

Sådan fungerer kontekstvariabler:

  • Du opretter kontekstvariabler implicit og indstiller dem med funktionen UpdateContext eller Navigate. Når appen startes, har alle kontekstvariabler startværdien tom.
  • Du kan opdatere kontekstvariabler med poster. I andre programmeringsværktøjer bruger du ofte "=" for tildelingen, ligesom i "x = 1". Brug i stedet { x: 1 } for kontekstvariabler. Når du bruger en kontekstvariabel, skal du bruge navnet direkte uden postens syntaks.
  • Du kan også angive en kontekstvariabel, når du bruger funktionen Navigate til at vise et skærmbillede. Hvis du tænker på et skærmbillede som en slags procedure eller subrutine, minder denne metode om parameteroverførsel i andre programmeringsværktøjer.
  • Med undtagelse af Navigate er kontekstvariabler begrænset til konteksten for et enkelt skærmbillede, hvor de får deres navn. Du kan ikke bruge eller angive dem uden for denne sammenhæng.
  • Kontekstvariabler kan indeholde andre værdier, herunder strenge, tal, poster og tabeller.

Lad os bygge regnemaskinen igen ved hjælp af en kontekstvariabel:

  1. Tilføj et kontrolelement af typen tekstinput med navnet TextInput1 og to knapper med navnet Button1 og Button2.

  2. Angiv egenskaben Text for Button1 til "Læg til", og angiv egenskaben Text for Button2 til "Ryd".

  3. Opdater den løbende total, når en bruger vælger knappen Læg til ved at angive dens egenskab OnSelect til denne formel:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    Denne formel opretter uden videre RunningTotal som en global kontekstvariabel, der indeholder et tal på grund af operatoren +. Du kan referere til RunningTotal overalt i dette skærmbillede. Når brugeren åbner denne app, har RunningTotal startværdien tom.

    Første gang brugeren vælger knappen Tilføj, og UpdateContext køres, indstilles RunningTotal til værdien RunningTotal + TextInput1.

    Egenskaben OnSelect for knappen Tilføj med updatecontext.

  4. Hvis du vil angive den løbende total til 0, når brugeren vælger knappen Ryd, skal du angive dens egenskab OnSelect til denne formel:

    UpdateContext( { RunningTotal: 0 } )

    UpdateContext bruges igen sammen med formlen UpdateContext( { RunningTotal: 0 } ).

    Egenskaben OnSelect for knappen Ryd med updatecontext.

  5. Tilføj et kontrolelement af typen Label, og angiv dets egenskab Text til RunningTotal.

    Denne formel genberegnes automatisk og viser brugeren værdien af RunningTotal, i takt med at den ændrer sig, baseret på de knapper, som brugeren vælger.

    Tekstegenskab for etiket.

  6. Når du viser et eksempel på appen, har vi vores regnemaskine som beskrevet ovenfor. Indtast et tal i tekstfeltet, og tryk et par gange på knappen Læg til. Når du er klar, kan du vende tilbage til skrivningen med tasten Esc.

    Kontrolelementet Tekstinput viser en værdi, og etiketten viser den løbende total.

  7. Du kan angive værdien for en variabelkontekst under navigering til et skærmbillede. Dette er nyttigt ved overførsel af "kontekst" eller "parametre" fra ét skærmbillede til et andet. Hvis du vil demonstrere denne metode, skal du indsætte et skærmbillede, indsætte en knap og angive egenskaben OnSelect til denne formel:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    Egenskaben OnSelect for en knap.

    Hold Alt-tasten nede, mens du vælger denne knap for både at vise Screen1 og angive kontekstvariablen RunningTotal til -1000.

    Screen1 er åben.

  8. Hvis du vil vise værdien for kontekstvariablen, skal du vælge menuen Filer og derefter vælge Variabler i venstre rude.

    Indstillingen Variabler i menuen Filer.

  9. Hvis du vil vise, hvor kontekstvariablen er defineret og anvendes, skal du vælge den.

    Liste over steder, hvor en variabel bruges.

Bruge en samling

Lad os til sidst bygge regnemaskinen med en samling. Da en samling indeholder en tabel, der er let at ændre, får vi denne regnemaskine til at beholde en "papirstrimmel" for hver værdi, når de indtastes.

Sådan fungerer samlinger:

  • Opret og angiv samlinger ved hjælp af funktionen ClearCollect. Du kan bruge funktionen Collect i stedet, men det vil kræve en anden variabel i stedet for at erstatte den gamle.
  • En samling er en slags datakilde og derfor en tabel. Hvis du vil have adgang til en enkelt værdi i en samling, skal du bruge funktionen First og udtrække ét felt fra den oprettede post. Hvis du har brugt en enkelt værdi med ClearCollect, vil dette være feltet Value som i dette eksempel:
    First( VariableName ).Value

Lad os bygge regnemaskinen igen ved hjælp af en samling:

  1. Tilføj et kontrolelement af typen Tekstinput med navnet TextInput1 og to knapper med navnene Button1 og Button2.

  2. Angiv egenskaben Text for Button1 til "Læg til", og angiv egenskaben Text for Button2 til "Ryd".

  3. Opdater den løbende total, når en bruger vælger knappen Læg til ved at angive dens egenskab OnSelect til denne formel:

    Collect( PaperTape, TextInput1.Text )

    Det betyder, at denne formel opretter PaperTape som en samling, der indeholder en tabel med en enkelt kolonne til tekststrenge. Du kan referere til PaperTape overalt i denne app. Når en bruger åbner denne app, er PaperTape en tom tabel.

    Når denne formel kører, tilføjer den den nye værdi i slutningen af samlingen. Fordi vi tilføjer en enkelt værdi, placerer Collect den automatisk i en tabel med en enkelt kolonne med kolonnenavnet Value, som du skal bruge senere.

    Egenskaben OnSelect for knappen Tilføj med samling.

  4. Hvis du vil rydde papirstrimlen, når brugeren vælger knappen Ryd, skal du angive dens egenskab OnSelect til denne formular:

    Clear( PaperTape )

    Egenskaben OnSelect for rydning med knappen Ryd.

  5. Hvis du vil vise den løbende total, skal du tilføje en etiket og angive dens egenskab Text til denne formel:

    Sum( PaperTape, Value )

    Tekstegenskab for etiketten.

  6. Hvis du vil køre regnemaskinen, skal du trykke på F5 for at åbne Eksempel, indtaste tal i kontrolelementet Tekstinput og vælge knapper.

    Kontrolelementet Tekstinput viser en værdi, og etiketten viser den løbende total.

  7. Tryk på Esc for at vende tilbage til standardarbejdsområdet.

  8. Hvis du vil have vist papirstrimlen, skal du indsætte et kontrolelement af typen Datatabel og angive dens egenskab Items til denne formel:

    PaperTape

    Vælg Rediger felter i højre rude, vælg Tilføj felt, vælg Værdi, og vælg derefter Tilføj for at få det vist.

    Datatabel, der viser de værdier, som er føjet til samlingen.

  9. Hvis du vil se værdierne i din samling, skal du vælge Samlinger fra menuen Filer.

    Eksempel på PaperTape-samlingen.

  10. Hvis du vil gemme og hente din samling, skal du tilføje to ekstra knapkontrolelementer og angive deres egenskaber af typen Text til Indlæs og Gem. Angiv egenskaben OnSelect for knappen Indlæs til denne formel:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Du skal rydde samlingen først, fordi LoadData føjer de gemte værdier til slutningen af samlingen.

    Egenskaben OnSelect for knappen Indlæs.

  11. Angiv egenskaben OnSelect for knappen Gem til denne formel:

    SaveData( PaperTape, "StoredPaperTape" )

    Egenskaben OnSelect* for knappen Gem.

  12. Vis igen et eksempel ved at trykke på F5, indtast tal i kontrolelementet Tekstinput, og vælg knapper. Vælg knappen Gem. Luk og genindlæs appen, og vælg knappen Indlæs for at genindlæse din samling.

Bemærk

Funktionerne GemData og HentData virker i Power Apps Mobile, men ikke i Power Apps Studio eller webafspiller til Power Apps.