Comparteix a través de


Power FxGramàtica de fórmules YAML

Nota

Microsoft Power Fx és el nom nou del llenguatge de formules de les aplicacions de llenç. Aquests articles són un treball en curs a mesura que extraiem el llenguatge de les aplicacions de llenç, l'integrem amb altres productes del Microsoft Power Platform i fem que estigui disponible com a codi obert. Comenceu amb la Informació general del Microsoft Power Fxper veure una introducció al llenguatge.

Microsoft Power Fx té una gramàtica ben establerta per a les expressions basades en l'Excel. No obstant, quan s'utilitza en el Power Apps i altres amfitrions on la IU proporciona la vinculació de nom a expressió per a una fórmula, no hi ha cap manera estàndard d'editar la vinculació de la fórmula com a text.

Hem seleccionat l'estàndard del sector YAML com el nostre llenguatge per aquesta vinculació. Ja hi ha un gran nombre d'editors, eines i biblioteques per treballar amb YAML. En aquest article es descriu com representem les fórmules en YAML.

En aquest moment, només admetem un subconjunt restringit de YAML. Només s'admeten les construccions descrites en aquest article.

No tot el que defineix una aplicació de llenç es representa aquí; la informació addicional s'ofereix a través d'altres fitxers que l'eina produeix i consumeix.

Signe d'igual inicial

Abans que res, totes les expressions han de començar amb un signe d'igual =:

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

El signe = s'utilitza d'aquesta manera per tres raons:

  • És coherent amb l'Excel, que utilitza un = inicial per vincular una expressió amb una cel·la.
  • Proporciona eficaçment la sintaxi del llenguatge de fórmules, de manera que YAML no intenta analitzar-la. Normalment, YAML tractaria text: 1:00 com a minuts i segons, convertint-ho en un nombre. Si inserim un =, el YAML no utilitzarà les seves regles d'escriptura i no s'alteraran les fórmules. L'ús de = cobreix la majoria de casos, però no tots, i aquestes excepcions es descriuen a la secció següent, Fórmules d'una sola línia.
  • En endavant, donarem suport tant a les fórmules (comença amb =) com a les no-fórmules (sense =) al mateix fitxer, igual que l'Excel. Ho podem fer tant als fitxers YAML com no YAML en tots els fitxers d'origen del Microsoft Power Platform. A qualsevol lloc on s'admeti una fórmula, el signe = inicial diferencia una expressió de fórmula del Power Apps d'un valor escalar estàtic.

Fórmules d'una sola línia

Les fórmules d'una sola línia s'escriuen d'aquesta manera:

Nom:SPACE=Expressió

L'espai entre els dos punts i el signe igual és necessari per a la compatibilitat amb YAML. El signe igual interromp la interpretació normal de l'expressió de YAML, cosa que permet que la resta de la línia s'interpreti com a Power Fx. Per exemple:

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

El signe de nombre # i els dos punts : no estan permesos a cap part de les fórmules d'una sola línia, encara que es trobin en una cadena de text entre cometes o un nom d'identificador. Per utilitzar un signe de número o dos punts, heu d'expressar la fórmula com una fórmula multilínia. El signe de número s'interpreta com un comentari a YAML, i els dos punts s'interpreten com un nou mapa de noms a YAML. Per afegir un comentari a un comentari d'una sola línia, utilitzeu el comentari de línia del Power Fx que comença amb //.

L'ús normal de l'escapada de YAML amb cometes simples i barres inverses com en C no està admès; en el seu lloc, utilitzeu una fórmula multilínia. Això és per coherència i per facilitar l'operació de tallar i enganxar entre la barra de fórmules del Power Apps Studio i els fitxers d'origen YAML.

Vegeu la documentació d'operadors i identificadors de les aplicacions de llenç per obtenir detalls sobre els noms permesos i l'estructura d'una expressió.

Fórmules multilínia

Les fórmules poden abastar diverses línies mitjançant indicadors escalars de bloc de YAML:

Name:SPACE ( | or |+ or |- ) =Expression-LineExpression-Line ...

Totes les línies que formen part del bloc s'han de sagnar com a mínim un espai des del nivell de la primera línia.

Per exemple:

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

Tots els formularis de les notacions escalars multilínies de YAML s'accepten en la importació, incloent-hi >+, per exemple. Tanmateix, per garantir que els espais blancs es conserven correctament, només es produeixen |, |+ o |-.

Instància del component

Els components s'instancien amb la notació d'objecte YAML. El tipus de l'objecte s'estableix amb l'operador As com a part de l'etiqueta YAML de l'esquerra. Per als controls de contenidor, es poden imbricar els objectes.

NameAsComponent-Type [ .Component-Template ] : ( Single-Line-Formula or Multi-Line-Formula or Object-instance ) ...

Totes les línies que formen part del bloc s'han de sagnar com a mínim un espai des del nivell de la primera línia.

Per exemple:

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
            ) 

Component-Type pot ser qualsevol component o control del llenç. Els tipus base, com ara Number, no estan admesos.

Component-Template és un especificador opcional per als components que tenen diferents plantilles, com ara la Galeria. No tots els components tenen plantilles.

Si Nom conté caràcters especials i es troba entre cometes simples, tota la frase al costat esquerre del dos punts s'haurà d'escapar. Això es pot fer de les maneres següents:

  • Utilitzeu cometes simples per embolicar tot el costat esquerre, la qual cosa requereix que les cometes simples existents s'utilitzin dues vegades:
    '''A name with a space'' As Gallery':
    
  • Utilitzar cometes dobles per embolicar tot el costat esquerre, però assegurant-vos que no hi hagi cometes dobles al nom:
    "'A name with a space' As Gallery":
    

Definició del component

De manera similar, els components es defineixen creant una instància d'un dels tipus de base compatibles. Els tipus base no es poden instanciar directament. Dins d'una definició d'objecte, les propietats es poden afegir al que proporciona el tipus base.

Els tipus base admesos són: CanvasComponent

Definició de la propietat simple

Els components utilitzen propietats per comunicar-se amb l'aplicació en què estan allotjats.

Name: ( Single-Line-Expression or Multi-Line-Expression )

El tipus de fórmula es implícita al tipus d'expressió.

Per a les propietats d'entrada, l'expressió proporciona el valor per defecte que s'inserirà a l'aplicació quan s'instanciï el component. El creador pot modificar aquesta expressió segons consideri, però no pot canviar el tipus.

Per a les propietats de sortida, l'expressió proporciona el càlcul que es durà a terme. El creador no pot modificar aquesta expressió, està encapsulada al component.

En aquest moment, totes les propietats són només de flux de dades i no poden contenir efectes secundaris.

En aquest moment, aquí no es defineixen metadades addicionals sobre la propietat, però en canvi es defineixen en els altres fitxers del fitxer .msapp, per exemple la descripció de la propietat.

Per exemple:

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

Compatibilitat amb YAML

Comentaris de YAML

Els comentaris de línia YAML delimitats pel signe de número # no es conserven a cap part del format d'origen. En comptes d'això, dins d'una fórmula, delimiteu els comentaris de línia amb caràcters // o els comentaris de bloqueig amb /* i */. Més informació: Comentaris

Errors per a obstacles comuns

Hi ha alguns llocs on les gramàtiques de Power Fx i YAML són incompatibles o poden causar confusió a l'usuari. En aquests casos, es mostra un error.

Per exemple, aquí:

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

el signe de número # es tracta com un comentari per part de YAML, encara que s'incrusta en el que l'Excel considera una cadena de text (entre cometes dobles). Per evitar confusió, aquest cas provocarà un error durant la importació. En el seu lloc, es pot utilitzar un formulari YAML amb diverses línies.

En el cas del valor de record, YAML considera a: i b: com una altra vinculació d'assignació de noms. YAML permet tornar a utilitzar el mateix mapa de noms i l'últim sobreescriurà de manera silenciosa les definicions anteriors. Com que aquest procediment pot causar confusió en un creador de codi reduït i pot donar lloc a la pèrdua d'una fórmula de propietat, es produeix un error si el mateix nom es troba dues vegades.