Power FxГраматика на YAML формула
Бележка
Microsoft Power Fx е новото име за езика на формулите за приложения на платното. Тези статии са в процес на разработка, тъй като извличаме езика от приложенията на платното и го интегрираме с други продукти на Microsoft Power Platform и го направете достъпен като отворен код. Започнете с общ преглед на Microsoft Power Fx за въведение в езика.
Microsoft Power Fx има добре установена граматика за изрази, базирани на Excel. Въпреки това, когато се използва в Power Apps и други хостове, където потребителският интерфейс осигурява свързване на име към израз за формула, няма стандартен начин за редактиране на обвързването на формулата като текст.
Избрахме отрасловия стандарт YAML като наш език за това обвързване. Вече има голям брой редактори, инструменти и библиотеки за работа с YAML. Тази статия описва как представяме формули в YAML.
Понастоящем поддържаме само ограничено подмножество на YAML. Поддържат се само конструкциите, описани в тази статия.
Тук не е представено всичко, което определя приложение за платно; допълнителна информация преминава през други файлове, които инструментът създава и консумира.
Водещ знак за равенство
На първо място, всички изрази трябва да започват с водещ знак за равенство =
:
Visible: =true
X: =34
Text: |
="Hello, " &
"World"
Ние използваме =
по този начин по три причини:
- Това е в съответствие с Excel, който използва водещо
=
, за да обвърже израз с клетка. - Той ефективно избягва синтаксиса на езика на формулата, така че YAML да не се опитва да го анализира. Обикновено YAML ще третира
text: 1:00
като минути и секунди, превръщайки го в число. Чрез вмъкване на=
, YAML няма да използва своите имплицитни правила за писане и формулите няма да бъдат ощетени. Използването на=
обхваща повечето случаи, но не всички и тези изключения са описани в следващия раздел, Еднолинейни формули. - В бъдеще ще поддържаме и двете формули (започва с
=
) и не-формули (без=
) в същия файл, точно както го прави Excel. Можем да правим това както в YAML, така и в не-YAML файлове в изходни файлове на Microsoft Power Platform. Навсякъде, където се поддържа формула, водещ=
разграничава Power Apps израз на формула от статична скаларна стойност.
Формули на един ред
Еднолинейните формули се записват във формата:
Израз на име:
SPACE
=
Пространството между дебелото черво и знака за равенство трябва да бъде съвместимо с YAML. Знакът за равенство нарушава нормалната интерпретация на YAML на израза, позволявайки на останалата част от реда да се интерпретира като Power Fx. Например:
Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34
Цифровият знак #
и двоеточие :
не са позволени никъде в едноредови формули, дори ако са в цитиран текстов низ или име на идентификатор. За да използвате цифров знак или двоеточие, трябва да изразите формулата като многоредова формула. Цифровият знак се интерпретира като коментар в YAML, а двоеточието се интерпретира като нова карта с имена в YAML. За да добавите коментар към едноредов коментар, използвайте редовия коментар Power Fx, започвайки с //
.
Използването на нормално избягване на YAML с единични кавички и обратни наклонени черти, подобни на C, не се поддържа; вместо това използвайте многоредова формула. Това е за последователност и за улесняване на изрязването / поставянето между лентата за формула в Power Apps Studio и YAML изходни файлове.
Вижте документацията за оператори и идентификатори за приложенията на платното за подробности относно позволените имена и структурата на израз.
Многоредови формули
Формулите могат да обхващат множество редове с помощта на блоковите скаларни индикатори на YAML:
Име:
SPACE
( |
или |+
|-
) =
Израз-РедИзраз-Ред ...
Всички редове, които са част от блока, трябва да бъдат с отстъп поне едно разстояние от нивото на първия ред.
Например:
Text1: |
="Hello, World"
Text2: |
="Hello" &
"," &
"World"
Всички форми на многоредови скаларни обозначения на YAML се приемат при внос, включително >+
, например. За да се гарантира обаче, че празното пространство се запазва правилно, само |
, |+
или |-
се произвеждат.
Екземпляр на компонент
Компонентите се инстанцират чрез използване на YAML обектна нотация. Типът на обекта се установява с As
оператор като част от левия YAML маркер. За контролите на контейнери обектите могат да бъдат вложени.
Име Компонент-типAs
[ Компонент-шаблон .
] ( :
едноредова формула или многоредова формула или обект-екземпляр ) ...
Всички редове, които са част от блока, трябва да бъдат с отстъп поне едно разстояние от нивото на първия ред.
Например:
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-Template е незадължителен спецификатор за компоненти, които имат различни шаблони, като например галерията. Не всички компоненти имат шаблони.
Ако Име съдържа специални знаци и е обвит с единични кавички, като цялата фраза от лявата страна на двоеточието трябва да бъде екранирана. Това може да се направи по един от следните начини:
- Използвайте единични кавички, за да обгърнете цялата лява страна, което изисква съществуващите единични кавички да се използват два пъти:
'''A name with a space'' As Gallery':
- Използвайте двойни кавички, за да увиете цялата лява страна, но се уверете, че в името няма двойни кавички:
"'A name with a space' As Gallery":
Дефиниция на компонента
По същия начин компонентите се дефинират чрез създаване на екземпляр на един от поддържаните базови типове. Основните типове не могат да бъдат директно инсталирани. В рамките на дефиницията на обект могат да се добавят свойства към това, което предоставя основният тип.
Поддържаните базови типове са: CanvasComponent
Проста дефиниция на свойство
Компонентите използват свойства, за да комуникират с приложението, в което са хоствани.
Име:
( едноредов израз или многоредов израз )
Типът на формулата се подразбира от типа на израза.
За входни свойства изразът предоставя по подразбиране да бъде вмъкнат в приложението, когато компонентът бъде инсталиран. Производителят може да модифицира този израз, както намери за добре, но не може да промени типа.
За изходни свойства изразът осигурява изчислението, което трябва да се извърши. Производителят не може да модифицира този израз, той е капсулиран в компонента.
Понастоящем всички свойства са само поток от данни и не могат да съдържат странични ефекти.
Понастоящем допълнителните метаданни за свойството не са дефинирани тук, а вместо това са дефинирани в другите файлове на .msapp
файл, например описание на имота.
Например:
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 съвместимост
YAML коментари
Коментари на YAML линия, разграничени от знака за число #
не са запазени никъде в изходния формат. Вместо това, в рамките на формула, разграничете реда коментари с //
символи или блокирайте коментари с /*
и */
. Повече информация: Коментари
Грешки за често срещани клопки
Има няколко места, където граматиките Power Fx и YAML са несъвместими или могат да объркат потребителя. В тези случаи се появява грешка.
Например в следния случай:
Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }
знакът за число #
се третира като коментар от YAML, въпреки че е вграден в това, което Excel счита за текстов низ (обвит с двойни кавички). За да се избегне объркване, този случай ще доведе до грешка по време на импортиране. Вместо това може да се използва многоредова форма YAML.
В случая на стойността за record
, YAML отчита a:
и b:
като друго обвързване на име на карта. YAML позволява повторно използване на същата карта с имена, като последната тихо замества всички предишни дефиниции. Тъй като това може да е объркващо за производителя с нисък код и може да доведе до загуба на формула на свойството, се появява грешка, ако едно и също име се срещне два пъти.