Partajați prin


Gramatica de formulă YAML Power Fx

Notă

Microsoft Power Fx este noul nume pentru limbajul formulă pentru aplicații proiectate pe pânză. Aceste articole sunt o lucrare în curs de desfășurare, deoarece extragem limba din aplicațiile pânză, o integrăm cu alte produse Microsoft Power Platform și le punem la dispoziție ca open source. Începeți cu prezentarea generală Microsoft Power Fx pentru o introducere în limbă.

Microsoft Power Fx are o gramatică bine stabilită pentru expresii bazate pe Excel. Cu toate acestea, atunci când este utilizat în Power Apps și alte gazde în care interfața de utilizare oferă legarea nume-expresie pentru o formulă, nu există un mod standard de editare a legării formulei ca text.

Am selectat standardul industriei YAML ca limbajul nostru pentru această legătură. Există deja un număr mare de editori, instrumente și biblioteci pentru a lucra cu YAML. Acest articol descrie modul în care reprezentăm formule în YAML.

În acest moment, acceptăm doar un subset restrâns de YAML. Sunt acceptate doar construcțiile descrise în acest articol.

Nu tot ceea ce definește o aplicație pânză este reprezentat aici; fluxuri de informații suplimentare prin alte fișiere pe care instrumentul le produce și le consumă.

Semn egal de început

În primul rând, toate expresiile trebuie să înceapă cu un semn egal de conducere =:

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

Noi folosim = în acest mod din trei motive:

  • Este în concordanță cu Excel, care folosește un = inițial pentru a lega o expresie de o celulă.
  • Scapă efectiv de sintaxa limbajului formulă, astfel încât YAML să nu încerce să o analizeze. În mod normal, YAML ar trata text: 1:00 ca minute și secunde, transformându-l într-un număr. Prin inserarea unui =, YAML nu își va folosi regulile de tastare implicite, iar formulele nu vor fi afectate. Folosind = acoperă majoritatea cazurilor, dar nu toate, iar aceste excepții sunt descrise în secțiunea următoare, Formule cu o singură linie.
  • În viitor, vom sprijini ambele formule (începe cu =) și non-formule (fără =) în același fișier, la fel ca Excel. Putem face acest lucru în fișiere YAML și non-YAML deopotrivă între fișiere sursă Microsoft Power Platform. Oriunde este acceptată o formulă, = din față diferențiază o expresie de formulă Power Apps dintr-o valoare scalară statică.

Formule cu o singură linie

Formulele cu o singură linie sunt scrise sub forma:

Nume:SPACE=Expresie

Spațiul dintre două puncte și semnul egal trebuie să fie conform YAML. Semnul egal perturbă interpretarea normală a expresiei de către YAML, permițând restului liniei să fie interpretat ca Power Fx. De exemplu:

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

Semnul numeric # și două puncte : nu sunt permise nicăieri în formulele cu o singură linie, chiar dacă se află într-un șir de text citat sau un nume de identificator. Pentru a utiliza un semn numeric sau două puncte, trebuie să exprimați formula ca o formulă multilinie. Semnul numeric este interpretat ca un comentariu în YAML, iar cele două puncte sunt interpretate ca o nouă hartă de nume în YAML. Pentru a adăuga un comentariu la un comentariu cu o singură linie, utilizați comentariul de linie Power Fx care începe cu //.

Folosirea evadării normale YAML cu ghilimele unice și backslash-uri de tip C nu este acceptată; folosiți în schimb o formulă multilinie. Acest lucru este pentru consistență și pentru a facilita tăierea/lipirea între bara de formulă din Power Apps Studio și fișiere sursă YAML.

Vedeți documentația aplicațiilor proiectate pe pânză operatorii și identificatorii pentru detalii despre numele permise și structura unei expresii.

Formule cu mai multe linii

Formulele pot acoperi mai multe linii utilizând indicatorii scalari ai blocurilor YAML:

Nume:SPACE ( | sau |+ sau |- ) =Linie-expresieLinie-expresie ...

Toate liniile care fac parte din bloc trebuie să fie indentate cu cel puțin un spațiu de la nivelul primei linii.

De exemplu:

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

Toate formele de notații scalare YAML multilinie sunt acceptate la import, inclusiv >+, de exemplu. Cu toate acestea, pentru a vă asigura că spațiul alb este păstrat corect, sunt produse numai |, |+, sau |-.

Instanță componentă

Componentele sunt instanțate utilizând notația obiectului YAML. Tipul obiectului este stabilit cu operatorul As ca parte a etichetei YAML din partea stângă. Pentru controalele containerelor, obiectele pot fi imbricate.

NumeAsTip-componentă [ .Șablon-componentă ] : ( Formulă-cu-o-linie sau Formulă-cu-mai-multe-linii sau Instanță-obiect ) ...

Toate liniile care fac parte din bloc trebuie să fie indentate cu cel puțin un spațiu de la nivelul primei linii.

De exemplu:

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
            ) 

Tip-componentă poate fi orice componentă pânză sau comandă. Tipuri de bază, cum ar fi Număr, nu sunt acceptate.

Șablon-componentă este un specificator opțional pentru componentele care au șabloane diferite, precum Galeria. Nu toate componentele au șabloane.

Dacă Nume conține caractere speciale și este între ghilimele unice, întreaga frază din partea stângă a celor două puncte va trebui să fie abandonată. Aceasta se poate face în unul din următoarele moduri:

  • Utilizați ghilimele unice pentru a împacheta întreaga parte stângă, ceea ce necesită ca ghilimelele unice existente să fie utilizate de două ori:
    '''A name with a space'' As Gallery':
    
  • Utilizați ghilimele duble pentru a împacheta întreaga parte stângă, dar asigurați-vă că nu există ghilimele duble în nume:
    "'A name with a space' As Gallery":
    

Definiția componentei

În mod similar, componentele sunt definite prin crearea unei instanțe a unuia dintre tipurile de bază acceptate. Tipurile de bază nu pot fi instanțate direct. În cadrul unei definiții a obiectelor, proprietățile pot fi adăugate la ceea ce oferă tipul de bază.

Tipurile acceptate de bază sunt: CanvasComponent

Definiția proprietății simple

Componentele folosesc proprietăți pentru a comunica cu aplicația în care sunt găzduite.

Nume: ( Expresie-cu-o-linie sau Expresie-cu-mai-multe-linii )

Tipul formulei este implicat de tipul expresiei.

Pentru proprietățile de intrare, expresia oferă valoarea implicită pentru a fi inserată în aplicație atunci când este instanțată componenta. Producătorul poate modifica această expresie după cum consideră potrivit, dar nu poate modifica tipul.

Pentru proprietățile de ieșire, expresia oferă calculul care trebuie efectuat. Producătorul nu poate modifica această expresie, este încapsulată în componentă.

În acest moment, toate proprietățile sunt doar flux de date și nu pot conține efecte secundare.

În acest moment, metadatele suplimentare despre proprietate nu sunt definite aici, ci sunt definite în celelalte fișiere ale fișierului .msapp, de exemplu descrierea proprietății.

De exemplu:

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

Compatibilitate YAML

Comentarii YAML

Comentarii de linie YAML delimitate de semnul numeric # nu sunt păstrate nicăieri în formatul sursă. În schimb, în cadrul unei formule, delimitați comentariile de linie cu caractere // sau blochează comentariile cu /* și */. Pentru informații suplimentare: Comentarii

Erori pentru capcanele obișnuite

Există câteva locuri în care gramaticile Power Fx și YAML sunt incompatibile sau pot fi confuze pentru un utilizator. În aceste cazuri, se produce o eroare.

De exemplu, în următoarele:

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

semnul numeric # este tratat ca un comentariu de către YAML, chiar dacă este încorporat în ceea ce Excel consideră un șir de text (între ghilimele duble). Pentru a evita confuzia, acest caz va genera o eroare în timpul importului. În schimb, poate fi utilizată o formă multilinie YAML.

În cazul valorii pentru record, YAML consideră a: și b: să fie o altă legătură cu harta de nume. YAML permite reutilizarea aceleiași hărți de nume, ultima înlocuind în tăcere orice definiție anterioară. Deoarece acest lucru poate fi confuz pentru un producător cu cod redus și poate duce la pierderea unei formule de proprietate, o eroare este aruncată dacă același nume este întâlnit de două ori.