Оператори й ідентифікатори
Нотатка
Microsoft Power Fx — це нове назва мови формул компонованих програм. Робота над цим циклом статей триває, оскільки ми поступово виокремлюємо згадану мову з компонованих програм, інтегруємо її з іншими продуктами Microsoft Power Platform і робимо відповідний код відкритим. Почніть знайомство з мовою формул з Огляду Microsoft Power Fx.
Оператори в Microsoft Power Fx описані нижче. Деякі з цих операторів залежать від мови автора. Див. розділ Глобальні програми щоб отримати додаткові відомості.
Символ | Тип | Синтаксис | Опис |
---|---|---|---|
. | Селектор властивостей | Повзунок1.Значення Color.Red |
Отримує властивість з елемента керування таблицею або перерахування. Для зворотної сумісності можна використовувати !. |
. Залежить від мови |
Десятковий роздільник | 1.23 | Роздільник між цілим і дробовим частинами числа. Символ залежить від мови. |
( ) | Дужки | Фільтр (Т, А < 10) (1 + 2) * 3 |
Забезпечують порядок пріоритету і групують під-вирази у більшому виразі |
+ | Арифметичні оператори | 1 + 2 | Додавання |
- | 2 - 1 | Віднімання і знак | |
* | 2 * 3 | Множення | |
/ | 2 / 3 | Ділення (також див. функцію Mod) | |
^ | 2 ^ 3 | Піднесення до степеня, еквівалент функції Power | |
% | 20% | Відсоток (еквівалент «* 1/100») | |
= | Оператори порівняння | Ціна = 100 | Дорівнює |
> | Ціна > 100 | Більше | |
>= | Ціна >= 100 | Більше або дорівнює | |
< | Ціна < 100 | Менше | |
<= | Ціна <= 100 | Менше або дорівнює | |
<> | Ціна <> 100 | Не дорівнює | |
& | Оператор конкатенації рядків | "Привіт" & " " & "Світ" | Відображення кількох рядків як неперервного рядка |
&&або І | Логічні оператори | Ціна < 100 && Повзунок1.Значення = 20 або Price < 100 AND Slider1.Value = 20 |
Логічна кон'юнкція, еквівалент функції AND |
|| або Або | Ціна < 100 || Повзунок1.Значення = 20 або Ціна < 100 або Повзунок1.Значення = 20 | Логічна диз'юнкція, еквівалент функції OR | |
! або NOT | ! (ціна < 100) або ні (ціна < 100) | Логічне заперечення, еквівалент функції NOT | |
Екзактин | Оператори абонементів | Галерея1.Вибрані точні в Збережених Елементах | Приналежність до колекції або таблиці |
Екзактин | "Windows" exactin "Для відображення вікон в операційній системі Windows..." | Тест підрядків (з урахуванням регістру) | |
В | Галерея1.Вибране в Збережених Елементах | Приналежність до колекції або таблиці | |
В | "Той" у "Клавіатурі та моніторі..." | Тест підрядків (без урахування регістру) | |
@ | Оператор усунення неоднозначностей | MyTable[@fieldname] | Усунення неоднозначності поля |
@ | [@MyVariable] | Глобальне усунення неоднозначності | |
, [залежить від мови] |
Роздільник елементів списку | if(x < 10, "низький", "хороший") { X: 12, Y: 32 } [ 1, 2, 3 ] |
Розділяє: Цей символ залежить від мови. |
; [залежить від мови] |
Побудова ланцюжків формул | Збір (Т, А); Навігація(S1, "") | Окремі виклики функцій у властивостях поведінки. Ланцюжковий оператор залежить від мови. |
Як | Як оператор | AllCustomers Як Клієнт | Замінює ThisItem і ThisRecord в галереях і функціях області застосування записів. Це корисно для надання кращого, конкретного імені та особливо важливо у вкладених сценаріях. |
Самостійної | Самостійний оператор | Самостійне заповнення | Доступ до властивостей поточного елемента керування |
батьківський елемент | Батьківський елемент оператор | Parent.Fill | Доступ до властивостей контейнера керування |
Цей предмет | Оператор thisItem | ThisItem.FirstName | Доступ до полів колекції або елемента керування "форма". |
Цей запис | Оператор thisItem | ThisRecord.FirstName | Доступ до повного запису та окремих полів запису в функціях ForAll, Sum, і With і інші функції області застосування записів. Можна перевизначити за допомогою оператора As. |
оператори in та exactin
Використовуйте оператори in і exactin, щоб знайти рядок у джерелі даних (наприклад, у колекції або імпортованій таблиці). Оператор in вказує на збіги, незалежно від регістру, а exactin вказує на збіги лише при однаковому виборі регістру. Ось приклад:
Створіть або імпортуйте колекцію під назвою Запаси, і відобразіть її у колекції (галереї), як описано в першій процедурі розділу Відображення зображень та тексту у колекції.
Задайте значенням властивості Елементи колекції цю формулу:
Filter(Інвентар, "E" у ProductName)У галереї відобразяться всі продукти, за винятком Callisto, оскільки лише назва цього продукту не містить зазначену літеру.
Змініть значення властивості Елементи колекції на цю формулу:
Filter(Інвентар, точність "E" у ProductName)У колекції відобразиться лише Europa, оскільки лише ця назва містить вказану літеру у вказаному регістрі.
Оператори ThisItem, ThisRecord і As
Кілька елементів керування та функцій застосовують формули до окремих записів таблиці. Щоб створити посилання на окремий запис у формулі, використовуйте один із зазначених нижче елементів.
Оператор | Застосовується до | Опис |
---|---|---|
Цей предмет | Керування галереєю Редагування елемента керування формою Відображення елемента керування формою |
Стандартне ім’я для поточного запису в Галереї або елементі керування формами. |
Цей запис | ForAll, Filter, With, Sum та інші функції обсягу запису | Стандартне ім’я для поточного запису у функції ForAll і інших функцій області застосування записів. |
Якім’я | Керування галереєю ForAll, Filter, With, Sum та інші функції обсягу запису |
Визначає ім’я для поточного запису, замінюючи стандартне ім’я ThisItem або ThisRecord. Використовуйте As, щоб спростити сприйняття формул і усунути неоднозначність під час вкладення. |
Оператор ThisItem
Наприклад, у наведеному нижче елементі керування Галерея для властивості Елементи задано значення джерела даних Працівники (наприклад, сутність Працівники включено з прикладом Northwind Traders):
Employees
Перший елемент у галереї — це шаблон, який репліковано для кожного працівника. У цьому шаблоні формула для зображення використовує параметр ThisItem для посилання на поточний елемент:
ThisItem.Picture
Так само формула для імені також використовує ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
Оператор ThisRecord
ThisRecord використовується у функціях, які мають область видимості запису. Наприклад, ми можем використовувати функцію Filter з властивістю нашої галереї Елементи, щоб показати лише імена, які починаються з M:
Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )
ThisRecord є необов’язковим і мається на увазі при використанні полів безпосередньо, наприклад, в даному випадку ми могли б записати:
Filter( Employees, StartsWith( 'First Name', "M" ) )
Хоча необов’язково, використання функції ThisRecord може спростити розуміння формул і може знадобитися в неоднозначних ситуаціях, коли ім’я поля також може бути ім’ям зв’язку. ThisRecord є необов’язковим, тоді як ThisItem завжди потрібен.
Використовуйте оператор ThisRecord для посилання на весь запис за допомогою Patch, Collect та інших функцій області застосування записів. Наприклад, у наведеній нижче формулі встановлюється стан для всіх неактивних працівників на активний:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees,
Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )
Оператор As
Використовуйте оператор As, щоб назвати запис у галереї або функції області застосування записів, перевизначаючи ThisItem або ThisRecord за замовчуванням. Іменування запису може спростити сприйняття формул і може знадобитися в ситуаціях вкладення для доступу до записів у інших областях застосування.
Наприклад, ви можете змінити властивість Елементи нашої галереї для використання As, щоб визначити, що ми працюємо з працівником.
Employees As Employee
Формули для зображення та імені будуть скориговані для використання цього імені для поточного запису:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
Також може використовуватися з функціями області видимості запису для заміни стандартного імені ThisRecord. Ми можемо застосовувати цю формулу до попереднього прикладу для уточнення запису, з яким ми працюємо:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees As Employee,
Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )
Під час вкладення галерей і функцій області застосування записів ThisItem і ThisRecord завжди посилається на внутрішню основну область, залишаючи записи в зовнішніх областях недоступними. Використовуйте оператор As, щоб зробити всі області записів доступними, надаючи кожному унікальне ім’я.
Наприклад, ця формула створює шаблон шахівниці як текстовий рядок за допомогою вкладення двох функцій ForAll:
Concat(
ForAll( Sequence(8) As Rank,
Concat(
ForAll( Sequence(8) As File,
If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " )
),
Value
) & Char(10)
),
Value
)
Установлення цієї формули для елемента керування Надпис і властивості Текст відображає:
Розглянемо, що відбувається тут:
- Ми почнемо з ітерації таблиці без назви з 8 пронумерованих записів з функції Sequence. Цей цикл для кожного рядка дошки, на який зазвичай посилаються як на Рівень і тому ми даємо йому це ім’я.
- Для кожного рядка ми виконуємо ітерацію іншої таблиці без назви з 8 стовпців і даємо загальне ім’я Файл.
- Якщо Rank.Value + File.Value — це непарне число, то квадрат набуває значення X, а в іншому випадку — крапка. Ця частина формули посилається на обидва цикли ForAll, що стало можливим завдяки використанню оператора As.
- Concat використовується двічі, спочатку для складання стовпців, а потім рядків, з додаванням Char(10) для створення нового рядка.
Аналогічний приклад можливий за допомогою вкладених елементів керування Галерея замість функцій ForAll. Почнемо з вертикальної галереї для Рівень. Цей елемент керування «Галерея» матиме формулу Елементи:
Sequence(8) as Rank
У цій галереї ми розмістимо горизонтальну галерею для Файл, яка буде реплікована для кожного Рівня з властивістю Елементи:
Sequence(8) as File
І нарешті в цій галереї ми додамо елемент керування Підпис, який буде репліковано для кожного елемента Файл і Рівень. Ми встановимо відповідний розмір, щоб заповнити весь простір і використаємо властивість Fill для заливки кольором за допомогою цієї формули:
If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )
Оператори Self і Parent
Існує три способи посилання на елемент керування та його властивості у формулі.
Метод | Опис |
---|---|
За назвою елемента керування | На будь-який елемент керування можна посилатися за назвою з будь-якого місця в програмі. Наприклад, Label1.Fill посилається на властивість заливки елемента керування, назва якого Label1. |
Самостійний оператор | Часто зручно посилатися на іншу властивість того самого елемента керування під час створення формули. Замість того, щоб використовувати абсолютне посилання за іменем, простіше та легше для пересилання використовувати відносне посилання на oneself. Оператор Self надає легкий доступ до поточного елемента керування. Наприклад, Self.Fill посилається на колір заливки поточного елемента керування. |
Батьківський елемент | Деякі елементи керування розміщують інші елементи керування, наприклад елементи керування Екран і Галерея. Елемент керування, який розміщує елементи керування в собі, називається parent. Як оператор Self, оператор Parent надає легке відносне посилання на елемент керування контейнерами. Наприклад, Parent.Fill посилається на властивість заливки елемента керування, який є контейнером для поточного елемента керування. |
Self ібатьківський елемент є операторами, а не властивостями на самих елементах управління. Посилання на Parent.Parent, Self.Parent або Parent.Self не підтримується.
Імена ідентифікаторів
Імена змінних, джерел даних, стовпців та інших об'єктів можуть містити будь-які символи формату Юнікод.
Використовуйте одинарні лапки навколо імені, яке містить пробіл або інший спеціальний символ.
Вживайте дві пари одинарних лапок підряд, щоб відобразити одинарні лапки в імені. Імена, які не містять спеціальних символів, не потребують одинарних лапок.
Нижче наведено кілька прикладів імен стовпців, які можна зустріти в таблиці, і їх відображення у формулі:
Ім'я стовпця в базі даних | Посилання на стовпець у формулі |
---|---|
ПростеІмя | SimpleName |
Імяз123цифрами | NameWith123Numbers |
Ім'я з пробілами | 'Name with spaces' |
Ім'я з "подвійними" лапками | 'Name with "double" quotes' |
Ім'я з 'одинарними' лапками | 'Name with ''single'' quotes' |
Ім'я із знаком @ | 'Name with an @ at sign' |
Подвійні лапки використовуються для позначення текстових рядків.
Короткі імена та логічні імена
Деякі джерела даних, наприклад SharePoint та Microsoft Dataverse використовують два різних імені для посилання на одну або ту ж таблицю або стовпець даних:
Логічне ім’я - Ім’я, яке гарантовано є унікальним, не змінюється після створення, зазвичай не допускає пробілів або інших спеціальних символів і не локалізується на різних мовах. У результаті ім’я може бути незрозумілим. Ці імена використовуються професійними розробниками. Наприклад, cra3a_customfield. Це ім'я також називається іменем схеми, або просто іменем.
Відображуване ім’я – зручна для користувача назва, призначена для перегляду кінцевими користувачами. Це ім'я може бути неунікальним, може змінюватися з часом, може містити пробіли та будь-який символ Юнікоду, і його можна локалізувати на різні мови. Відповідно до наведеного вище прикладу, коротке ім’я може бути Настроюване поле з пробілом між словами.
Оскільки короткі імена легко зрозуміти, Power Fx запропонує їм вибір і не запропонує логічні імена. Хоча логічні імена не пропонуються, їх можна використовувати, якщо їх було введено опосередковано.
Наприклад, уявіть, що додали Настроюване поле до сутності у Dataverse. Системою буде призначено логічне ім’я, яке можна змінювати лише під час створення поля. Результат виглядатиме приблизно як:
Під час створення посилання на поле сутності "Бізнес-партнери", буде надана пропозиція використати ім'я 'Настроюване поле', оскільки це коротке ім'я. Потрібно використовувати одинарні лапки, оскільки в ньому міститься пробіл.
Після вибору пропозиції, 'Настроюване поле' відобразиться в рядку формул і отримуються дані:
Хоча це не рекомендовано, також можна використати для поля логічне ім'я. В результаті будуть отримані ті ж дані. Оскільки в цьому імені відсутні пробіли та спеціальні символи, жодні лапки не потрібні.
За лаштунками зберігається зіставлення між короткими іменами, які відображаються у формулах і базовими логічними іменами. Оскільки логічні імена обов'язково використовуються для взаємодії з джерелом даних, це зіставлення використовується для автоматичного перетворення поточного короткого імені на логічне ім'я, і це видно в мережевому трафіку. Це зіставлення також використовується для перетворення назад на логічні імена для переходу на нові короткі імена, наприклад, якщо коротке ім’я змінюється або розробник на іншій мові редагує програму.
Нотатка
Логічні імена не перекладаються під час переміщення програми між середовищами. Для системної сутності та імен полів Dataverse це скоріш за все не буде проблемою, оскільки логічні імена однакові в усіх середовищах. Але настроювані поля, наприклад cra3a_customfield у наведеному вище прикладі, можуть мати інший префікс середовища (cra3a у цьому випадку). Бажано використовувати короткі імена, оскільки їх можна зіставити з короткими іменами в новому середовищі.
Усунення неоднозначності імен
Оскільки короткі імена не є унікальними, тет саме коротке ім'я може фігурувати багато разів в одній сутності. Коли це станеться, логічне ім’я буде додано в кінець відображуваного імені в дужках для одного з кількох конфліктних імен. Якщо у вищенаведеному прикладі створити друге поле з тим самим коротким іменем Настроюване поле і логічним іменем cra3a_customfieldalt, то відобразяться так пропозиції:
Рядки усунення неоднозначності імен додаються також, коли трапляються конфлікти імен сутностей, наборів параметрів і інших елементів Dataverse.
Оператор усунення неоднозначності
Деякі функції створюють області застосування записів для доступу до полів таблиці під час обробки кожного запису, наприклад Filter, AddColumns і SUM. Імена полів, додані в область застосування записів, перевизначають такі ж імена в іншому місці програми. Якщо це станеться, можна отримати доступ до значень, які не належать до області застосування записів за допомогою оператора усунення неоднозначності @:
- Щоб отримати доступ до значень з вкладених областей застосування записів, скористайтеся оператором @ з іменем таблиці, до якої оператор застосовується, згідно з цим прикладом:
Таблиця[@НазваПоля] - Щоб отримати доступ до глобальних значень, наприклад джерел даних, колекцій і контекстних змінних, скористайтеся шаблоном [@НазваОбєкта] (без зазначення таблиці).
Для отримання додаткових відомостей і прикладів див. розділ Області застосування записів.