Del via


Power FxYAML-formel-grammatikk

Merk

Microsoft Power Fx er det nye navnet på formelspråket for lerretsapper. Disse artiklene er et arbeid som pågår når vi trekker ut språket fra lerretsapper, integrerer det med andre Microsoft Power Platform-produkter og gjør det tilgjengelig som åpen kildekode. Begynn med Microsoft Power Fx-oversikt for å få en innføring i språket.

Microsoft Power Fx har veletablert grammatikk for uttrykk basert på Excel. Når det brukes i Power Apps og andre verter der brukergrensesnittet gir bindinger fra navn til uttrykk for en formel, finnes det imidlertid ingen standard måte å redigere formelbindingen på som tekst.

Vi har valgt bransjestandarden YAML som språk for denne bindingen. Det finnes allerede et stort antall redigeringsprogram, verktøy og biblioteker for arbeid med YAML. Denne artikkelen beskriver hvordan vi representerer formler i YAML.

For øyeblikket støtter vi bare et begrenset delsett av YAML. Bare konstruksjonene som er beskrevet i denne artikkelen, støttes.

Ikke alt som definerer en lerretsapp, vises her; ytterligere informasjon flyter gjennom andre filer som verktøyet produserer og bruker.

Foranstilt likhetstegn

Først og fremst må alle uttrykk begynne med et foranstilt likhetstegn =:

Visible: =true
X: =34
Text: |
	="Hello, " &
	"World"

Vi bruker = på denne måten av tre årsaker:

  • Det er konsistent med Excel, som bruker et foranstilt = til å binde et uttrykk til en celle.
  • Det unngår formelspråksyntaksen effektivt, slik at YAML ikke prøver å analysere den. Vanligvis behandler YAML text: 1:00 som minutter og sekunder, og konverterer til et tall. Hvis du setter inn en =, bruker ikke YAML de implisitte innskrivingsreglene, og formler blir ikke skadet. Bruk av = dekker de fleste tilfeller, men ikke alle, og disse unntakene beskrives i følgende del: Formler med én linje.
  • I fremtiden vil vi støtte både formler (starter med =) og ikke-formler (ingen =) i samme fil, akkurat som Excel kan vi gjøre dette i YAML- og ikke-YAML-filer på tvers av Microsoft Power Platform-kildefiler. Et sted der en formel støttes, skiller det innledende = et Power Apps-formeluttrykk fra en statisk skalarverdi.

Formler med en enkelt linje

Formler med én linje skrives i skjemaet:

Navn:SPACE=Uttrykk

Avstanden mellom kolon og likhetstegnet kreves for å være YAML-kompatibel. Likhetstegnet avbryter vanlige YAML-forkortelse for uttrykket, noe som gjør at resten av linjen kan tolkes som Power Fx. Eksempel:

Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34

Talltegnet # og kolon : er ikke tillatt noe sted i formler med én linje, selv om de er i en tekststreng eller et identifikatornavn med anførselstegn. Hvis du vil bruke et talltegn eller kolon, må du uttrykke formelen som en flerlinjet formel. Nummertegnet tolkes som en kommentar i YAML, og kolon tolkes som et nytt navnekart i YAML. Hvis du vil legge til en kommentar i en kommentar med én linje, bruker du Power Fx-linjekommentaren som starter med //.

Bruk av vanlig YAML-unngåelse med enkle anførselstegn og C-liknende omvendte skråstreker støttes ikke. Bruk i stedet en flerlinjet formel. Dette er for å gi ensartethet og gjøre det mulig å klippe/lime inn mellom formellinjen i Power Apps Studio og YAML-kildefilene.

Se dokumentasjonen om operatorer og identifikatorer for lerretsapper for detaljer om tillatte navn og strukturen til et uttrykk.

Formler med flere linjer

Formler kan omfatte flere linjer ved hjelp av blokkskalarindikatorer til YAML:

Navn:SPACE ( | eller |+ eller |- ) =uttrykkslinjeuttrykkslinje ...

Alle linjer som er en del av blokken, må ha minst ett mellomrom inn fra nivået for den første linjen.

Eksempel:

Text1: |
    ="Hello, World"
Text2: |
    ="Hello" &
    "," &
    "World"

Alle skjemaer for YAML-skalarmeldinger med flere linjer godtas ved import, inkludert >+ for eksempel. Hvis du vil sikre at mellomrom beholdes riktig, er det bare |, |+ eller |- som produseres.

Komponentforekomst

Det opprettes komponentforekomster ved hjelp av YAML-objektnotasjon. Objekttypen opprettes med As-operatoren som en del av YAML-koden på venstre side. For beholderkontroller kan objekter nestes.

NavnAskomponenttype [ .kompomentmal ] : ( formel med en rad eller formel med flere rader eller objektforekomst ) ...

Alle linjer som er en del av blokken, må ha minst ett mellomrom inn fra nivået for den første linjen.

Eksempel:

Gallery1 As Gallery.horizontalGallery:
    Fill: = Color.White
    Label1 As Label:
        Text: ="Hello, World"
        X: =20
        Y: =40
        Fill: |
            =If( Lower( Left( Self.Text, 6 ) ) = "error:",
                Color.Red,
                Color.Black
            ) 

Komponenttype kan være en hvilken som helst lerretskomponent eller -kontroll. Basistyper, for eksempel Tall, støttes ikke.

Komponentmal er en valgfri identifikator for komponenter som har forskjellige maler, for eksempel galleriet. Ikke alle komponentene har maler.

Hvis Name inneholder spesialtegn og har enkle anførselstegn, må hele uttrykket til venstre for kolon unnslippes. Dette kan gjøres på én av følgende måter:

  • Bruk enkle anførselstegn for å bryte hele venstre side, noe som krever at eksisterende enkle anførselstegn brukes to ganger:
    '''A name with a space'' As Gallery':
    
  • Bruk doble anførselstegn for å bryte hele venstre side, men pass på at det ikke er doble anførselstegn i navnet:
    "'A name with a space' As Gallery":
    

Definisjon for komponent

Komponenter defineres på samme måte ved å opprette en forekomst av en av de støttede basistypene. Basistypeforekomster kan ikke brukes direkte. I en objektdefinisjon kan egenskaper legges til i basistypen.

Støttede basistyper er: CanvasComponent

Enkel egenskapsdefinisjon

Komponenter bruker egenskaper til å kommunisere med appen de er driftet i.

Navn: ( uttrykk med en linje eller uttrykk med flere linjer )

Formeltypen er underforstått av uttrykkstypen.

For inndataegenskaper angir uttrykket standardvalget som skal settes inn i appen når komponenten brukes som forekomst. Oppretteren kan endre dette uttrykket etter behov, men kan ikke endre typen.

For utdataegenskaper gir uttrykket beregningen som skal utføres. Oppretteren kan ikke endre dette uttrykket, fordi det innkapslet i komponenten.

For nå er alle egenskapene bare dataflyt og kan ikke inneholde sideeffekter.

Flere metadata om egenskapen er ikke definert her, men er i stedet definert i de andre filene i .msapp-filen, for eksempel i egenskapsbeskrivelsen.

Eksempel:

DateRangePicker As CanvasComponent:
    DefaultStart: |-
		=// input property, customizable default for the component instance
		Now()                      
    DefaultEnd: |-
		=// input property, customizable default for the component instance
		DateAdd( Now(), 1, Days )    
    SelectedStart: =DatePicker1.SelectedDate   // output property
    SelectedEnd: =DatePicker2.SelectedDate     // output property

YAML-kompatibilitet

YAML-kommentarer

YAML-linjekommentarer som er atskilt med nummertegnet #, beholdes ikke noe sted i kildeformatet. I en formel kan du i stedet skille linjekommentarer med //-tegn eller blokkerer kommentarer med /* og */. Mer informasjon: Kommentarer

Feil for vanlige fallgruver

Det finnes noen få steder der Power Fx- og YAML-grammatikk er inkompatibel eller kan være forvirrende for en bruker. I slike tilfeller oppstår det en feil.

For eksempel i delen under:

Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }

Nummertegnet # behandles som en kommentar av YAML, selv om det er innebygd i det Excel anser som en tekststreng (dobbelt anførselstegn). For å unngå forvirring fører dette til en feil under importen. Et YAML-skjema med flere linjer kan brukes i stedet.

Når det gjelder verdien for record, vurderer YAML at a: og b: er en annen navnetilordningsbinding. YAML tillater at samme navnetilordning brukes på nytt, og den siste overstyrer alle tidligere definisjoner. Siden dette kan være forvirrende for en oppretter med lite kode og kan føre til tap av en egenskapsformel, oppstår det en feil hvis samme navn blir funnet to ganger.