Del via


Power FxGrammatik i YAML-formler

Bemærk

Microsoft Power Fx er det nye navn til formelsproget for lærredapps. Vi arbejder på disse artikler, mens vi udtrækker sproget fra lærredapps, integrerer det i andre Microsoft Power Platform-produkter og gør det tilgængeligt som open source. Start med Microsoft Power Fx-oversigten for at få en introduktion til sproget.

Microsoft Power Fx indeholder velkendt grammatik til udtryk, der er baseret på Excel. Men når den bruges i Power Apps og andre værter, hvor brugergrænsefladen indeholder navne til udtryk-binding for en formel, er der ingen standardmåde at redigere formelbindingen som tekst på.

Vi har valgt branchestandarden YAML som vores sprog til denne binding. Der findes allerede et stort antal editorer, værktøjer og biblioteker til at arbejde med YAML. I denne artikel beskrives, hvordan vi repræsenterer formler i YAML.

På nuværende tidspunkt understøtter vi kun et begrænset delsæt af YAML. Det er kun de strukturer, der beskrives i denne artikel, som understøttes.

Ikke alt det, der definerer en lærredapp, vises her. Der findes flere oplysninger i andre filer, som værktøjet producerer og forbruger.

Foranstillet lighedstegn

Først og fremmest skal alle udtryk starte med et foranstillet lighedstegn =:

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

Vi bruger dette = på denne måde af tre årsager:

  • Det stemmer overens med Excel, som bruger et foranstillet = til at binde et udtryk til en celle.
  • Den undgår effektivt formelsprogets syntaks, så YAML ikke forsøger at fortolke den. Normalt behandler YAML text: 1:00 som minutter og sekunder, og konverterer det til et tal. Hvis du indsætter et =, vil YAML ikke bruge de implicitte skriveregler, og formler blive ikke skadet. Brugen af = dækker de fleste tilfælde, men ikke alle, og disse undtagelser er beskrevet i følgende afsnit, Formler med én linje.
  • I fremtiden vil vi understøtte både formler (starter med =) og ikke-formler (intet =) i den samme fil, ligesom Excel gør. Det kan vi gøre i både YAML- og ikke-YAML-filer på tværs af Microsoft Power Platform-kildefiler. Overalt, hvor en formel understøttes, adskiller det foranstillede = et Power Apps-formeludtryk fra en statisk skalarværdi.

Formler med en enkelt linje

Der skrives formler med en enkelt linje i formularen:

Udtryk for navn:SPACE=

Mellemrummet mellem kolon og lighedstegnet kræves for at være YAML-kompatibel. Lighedstegnet forstyrrer YAML's normale måde at fortolke udtrykket på, så resten af linjen kan opfattes som Power Fx. Eksempel:

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

Nummertegnet # og kolon : er ikke tilladt nogen steder i formler med én linje, heller ikke selvom de findes i en tekststreng eller et navn, der er omsluttet af anførselstegn. Hvis du vil bruge et nummertegn eller et kolon, skal du udtrykke formlen som en formel med flere linjer. Nummertegnet opfattes som en kommentar i YAML, og kolonen opfattes som tilknytning af et nyt navn i YAML. Hvis du vil føje en kommentar til en kommentar med én linje, skal du bruge den Power Fx-linjekommentar, der starter med //.

Brug af normal YAML-undgåelse med enkelte anførselstegn og C-lignende omvendte skråstreger understøttes ikke. Brug i stedet en formel med flere linjer. Dette er for at gøre det konsistent og nemmere at klippe/indsætte mellem formellinjen i Power Apps Studio og YAML-kildefilerne.

Se dokumentationen til operatorer og id'er for lærredapps for at få flere oplysninger om tilladte navne og strukturen i et udtryk.

Formler med flere linjer

Formler kan strække sig over flere linjer ved hjælp af YAML's blokskalarindikatorer:

Navn:SPACE ( | eller |+ |- ) =Udtryk-Linjeudtryk-Linje ...

Alle linjer, der er en del af blokken, skal indrykkes mindst ét mellemrum i forhold til niveauet for første linje.

Eksempel:

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

Alle former for YAML-skalarnoteringer med flere linjer accepteres ved import, herunder for eksempel >+. Men for at sikre, at mellemrummet bevares korrekt, er det kun |, |+ eller |-, der produceres.

Komponentforekomst

Komponenterne vises ved hjælp af YAML-objektnotation. Objekttypen oprettes med operatoren As som en del af YAML-koden i venstre side. I forbindelse med objektbeholdere kan objekter indlejres.

navn komponenttypeAs[ komponent-skabelon .] ( : enkeltlinjeformel eller flerlinjeformel eller objektforekomst ) ...

Alle linjer, der er en del af blokken, skal indrykkes mindst ét mellemrum i forhold til niveauet for første linje.

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 lærredskomponent eller kontrolelement. Basistyper, for eksempel Tal, understøttes ikke.

Component-Template er en valgfri specifikation for komponenter, der har forskellige skabeloner, f.eks. Galleriet. Ikke alle komponenter har skabeloner.

Hvis Navn indeholder specialtegn, og det er omsluttet af enkelte anførselstegn, skal hele sætningen til venstre for kolon undgås. Det kan du gøre på en af følgende måder:

  • Brug enkelte anførselstegn til at omslutte hele venstre side, hvilket kræver, at de eksisterende enkelte anførselstegn skal bruges to gange:
    '''A name with a space'' As Gallery':
    
  • Brug dobbelte anførselstegn til at omslutte hele venstre side, men sørg for, at der ikke findes dobbelte anførselstegn i navnet:
    "'A name with a space' As Gallery":
    

Definition af komponent

På samme måde defineres komponenter ved at oprette en forekomst af en af de understøttede basistyper. Basistyperne kan ikke vises direkte. I en objektdefinition kan egenskaber føjes til det, der findes i basistypen.

De understøttede basistyper er: CanvasComponent

Definition af simpel egenskab

Komponenter bruger egenskaber til at kommunikere med den app, de hostes af.

Navn: ( Enkeltlinjeudtryk eller Multi-linjeudtryk )

Typen af formel fremgår af udtrykstypen.

I forbindelse med inputegenskaber giver udtrykket den standard, der skal indsættes i appen, når komponenten er oprettet som forekomst. Opretteren kan ændre dette udtryk efter behov, men kan ikke ændre typen.

I forbindelse med outputegenskaber leverer udtrykket den beregning, der skal udføres. Opretteren kan ikke ændre dette udtryk. Det er indkapslet i komponenten.

På nuværende tidspunkt er alle egenskaber kun dataflow og kan ikke indeholde sideeffekter.

På nuværende tidspunkt er yderligere metadata om egenskaben ikke defineret her, men de defineres i stedet i de andre filer for filen .msapp, for eksempel egenskabens beskrivelse.

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, der er afgrænset af nummertegnet #, bevares ikke nogen steder i kildeformatet. Afgræns i stedet linjekommentarer med //-tegn i en formel, eller bloker kommentarer med /* og */. Flere oplysninger: Kommentarer

Fejl i almindelige faldgruber

Der er nogle få steder, hvor Power Fx- og YAML-grammatik er inkompatibel eller kan være forvirrende for en bruger. I disse tilfælde vises der en fejl.

For eksempel i det følgende:

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

Nummertegnet # behandles som en kommentar af YAML, selvom det er integreret i det, der betragtes som en tekststreng i Excel (omsluttet af dobbelte anførselstegn). For at undgå forvirring vises der i dette tilfælde en fejl under import. Der kan i steder bruges en YAML-formular med flere linjer.

Hvis det drejer sig om værdien for record, opfatter YAML a: og b: som en anden binding for navnetilknytning. YAML tillader, at den samme navnetilknytning genbruges, og den sidste tilsidesætter automatisk eventuelle tidligere definitioner. Da dette kan være forvirrende for en opretter med lav kode og kan resultere i tab af en egenskabsformel, vises der en fejl, hvis der stødes på det samme navn to gange.