Оператори та ідентифікатори в Power Apps
Застосовується до: програм Canvas Програм на основі моделі Power Pages
Деякі з цих операторів залежать від мови автора. Додаткову інформацію про підтримку мов у компонованих програмах див. в розділі Глобальні програми.
Символ | Ввести | Приклад | Опис |
---|---|---|---|
'...' | Ідентифікатор | 'Account Name' | Ідентифікатори, які містять спеціальні символи, включно з пробілами, подаються в одинарних лапках |
"..." | Текстовий рядок | «Привіт усім» | Текстові рядки подаються в подвійних лапках |
$"..." | Інтерполяція рядків | $"Dear {FirstName}," | Формули, вбудовані в текстовий рядок |
. | Селектор властивостей |
Slider1.Value Color.Red Acceleration.X |
Видобуває властивість із таблиці, елемента керування, сигналу або перелічення. Для зворотної сумісності можна також використовувати !. |
. [залежить від мови] |
Десятковий роздільник | 1.23 | Роздільник між цілим і дробовим частинами числа. Символ залежить від мови. |
( ) | Дужки |
Filter(T, A < 10) (1 + 2) * 3 |
Застосовує порядок пріоритетів і групує вкладені вирази у більший вираз |
+ | Арифметичні оператори | 1 + 2 | Додавання |
- | 2-1 | Віднімання і знак | |
* | 2 * 3 | Множення | |
/ | 2 / 3 | Ділення (також див. функцію Mod) | |
^ | 2 ^ 3 | Піднесення до степеня, еквівалент функції Power | |
% | 20% | Відсоток (еквівалент «* 1/100») | |
= | Оператори порівняння | Price = 100 | Дорівнює |
> | Price > 100 | Більше | |
>= | Price >= 100 | Більше або дорівнює | |
< | Price < 100 | Менше | |
<= | Price <= 100 | Менше або дорівнює | |
<> | Price <> 100 | Не дорівнює | |
& | Оператор конкатенації рядків | "Привіт" & " " & "Світ" | Відображення кількох рядків як неперервного рядка |
&&або І | Логічні оператори |
Ціна < 100 && Повзунок1.Значення = 20 або Price < 100 AND Slider1.Value = 20 |
Логічна кон'юнкція, еквівалент функції AND |
|| або OR | Price < 100 || Slider1.Value = 20 або Price < 100 Or Slider1.Value = 20 | Логічна диз'юнкція, еквівалент функції OR | |
! або NOT | !(Price < 100) чи NOT (Price < 100) | Логічне заперечення, еквівалент функції NOT | |
exactin | Оператори членства | Gallery1.Selected exactin SavedItems | Приналежність до колекції або таблиці |
exactin | "Windows" exactin “Для відображення вікон в операційній системі Windows...” | Тест підрядків (з урахуванням регістру) | |
через | Gallery1.Selected in SavedItems | Приналежність до колекції або таблиці | |
через | "The" in "На клавіатурі та моніторі..." | Тест підрядків (без урахування регістру) | |
@ | Оператор усунення неоднозначності | MyTable[@fieldname] | Усунення неоднозначності поля |
@ | [@MyVariable] | Глобальне усунення неоднозначності | |
, [залежить від мови] |
Роздільник елементів списку |
If(X < 10, "Низький", "Добре") { X: 12, Y: 32 } [ 1, 2, 3 ] |
Розділяє: Цей символ залежить від мови. |
; [залежить від мови] |
Побудова ланцюжків формул | Collect(T, A); Navigate(S1, "") | Окремі виклики функцій у властивостях поведінки. Ланцюжковий оператор залежить від мови. |
Як | Оператор As | AllCustomers As Customer | Замінює ThisItem і ThisRecord в галереях і функціях області застосування записів. As корисний для надання кращого, конкретного імені та особливо важливий в вкладених сценаріях. |
Самостійно | Оператор Self | Self.Fill | Доступ до властивостей поточного елемента керування |
Parent | Оператор "Батьківський об'єкт" | Parent.Fill | Доступ до властивостей контейнера керування |
ThisItem | Оператор ThisItem | ThisItem.FirstName | Доступ до полів колекції або елемента керування "форма". |
ThisRecord | Оператор ThisRecord | ThisRecord.FirstName | Доступ до повного запису та окремих полів запису в функціях ForAll, Sum, і With і інші функції області застосування записів. Можна перевизначити за допомогою оператора As. |
Нотатка
Оператор @ також можна використовувати для перевірки типу об’єкта запису за джерелом даних. Наприклад: Collect(coll,Account@{'Account Number: 1111')
оператори in та exactin
Використовуйте оператори in і exactin, щоб знайти рядок у джерелі даних (наприклад, у колекції або імпортованій таблиці). Оператор in вказує на збіги, незалежно від регістру, а exactin вказує на збіги лише при однаковому виборі регістру. Ось приклад:
Створіть або імпортуйте колекцію під назвою Запаси, і відобразіть її у колекції (галереї), як описано в першій процедурі розділу Відображення зображень та тексту у колекції.
Задайте значенням властивості Елементи колекції цю формулу:
Filter(Inventory, "E" in ProductName)У галереї відобразяться всі продукти, за винятком Callisto, оскільки лише назва цього продукту не містить зазначену літеру.
Змініть значення властивості Елементи колекції на цю формулу:
Filter(Inventory, "E" exactin ProductName)У колекції відобразиться лише Europa, оскільки лише ця назва містить вказану літеру у вказаному регістрі.
Оператори ThisItem, ThisRecord і As
Кілька елементів керування та функцій застосовують формули до окремих записів таблиці. Щоб створити посилання на окремий запис у формулі, використовуйте один із зазначених нижче елементів.
Оператор | Застосовується до | Опис |
---|---|---|
ThisItem |
Елемент керування Колекція Елемент керування Редагувати форму Елемент керування Відобразити форму |
Стандартне ім’я для поточного запису в Галереї або елементі керування формами. |
ThisRecord | ForAll, Filter, With, Sum та інші функції області застосування записів | Стандартне ім’я для поточного запису у функції ForAll і інших функцій області застосування записів. |
Якname |
Елемент керування Колекція ForAll, Filter, With, Sum та інші функції області застосування записів |
Визначає ім’я для поточного запису, замінюючи стандартне ім’я ThisItem або ThisRecord. Використовуйте As, щоб спростити сприйняття формул і усунути неоднозначність під час вкладення. |
Оператор ThisItem
Наприклад, у наведеному нижче елементі керування Галерея для властивості Items задано джерело даних Працівники (як таблиця Працівники, що включена до зразка 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'
Оператор As також можна використовувати з функціями області застосування записів для заміни стандартного імені 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. |
Оператор Self | Часто зручно посилатися на іншу властивість того самого елемента керування під час створення формули. Замість того, щоб використовувати абсолютне посилання за іменем, простіше та легше для пересилання використовувати відносне посилання на oneself. Оператор Self надає легкий доступ до поточного елемента керування. Наприклад, Self.Fill посилається на колір заливки поточного елемента керування. |
Оператор Parent | Деякі елементи керування розміщують інші елементи керування, наприклад елементи керування Екран і Галерея. Елемент керування, який розміщує елементи керування в собі, називається parent. Як оператор Self, оператор Parent надає легке відносне посилання на елемент керування контейнерами. Наприклад, Parent.Fill посилається на властивість заливки елемента керування, який є контейнером для поточного елемента керування. |
Self і Parent є операторами, а не властивостями в самих елементах керування. Посилання на 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. Це ім'я також називається іменем схеми, або просто іменем.
Коротке ім’я — зручне і призначене для відображення кінцевим користувачам. Це ім'я може бути неунікальним, може змінюватися з часом, може містити пробіли та будь-який символ Юнікоду, і його можна локалізувати на різні мови. Відповідно до наведеного вище прикладу, коротке ім’я може бути Настроюване поле з пробілом між словами.
Оскільки короткі імена простіше розуміти, компоновані програми пропонуватимуть їх як варіанти вибору, і не пропонуватимуть логічні імена. Хоча логічні імена не пропонуються, їх можна використовувати, якщо їх було введено опосередковано.
Наприклад, уявіть, що ви додали Настроюване поле до таблиці в Dataverse. Системою буде призначено логічне ім’я, яке можна змінювати лише під час створення поля. Результат виглядатиме приблизно як:
Під час створення посилання на поле сутності "Бізнес-партнери", буде надана пропозиція використати ім'я 'Настроюване поле', оскільки це коротке ім'я. Потрібно використовувати одинарні лапки, оскільки в ньому міститься пробіл.
Після вибору пропозиції, 'Настроюване поле' відобразиться в рядку формул і отримуються дані:
Хоча це не рекомендовано, також можна використати для поля логічне ім’я. В результаті будуть отримані ті ж дані. Одинарні лапки не потрібні, оскільки це ім’я не містить пробілів або спеціальних символів:
За лаштунками зберігається зіставлення між короткими іменами, які відображаються у формулах і базовими логічними іменами. Оскільки логічні імена обов'язково використовуються для взаємодії з джерелом даних, це зіставлення використовується для автоматичного перетворення поточного короткого імені на логічне ім'я, і це видно в мережевому трафіку. Це зіставлення також використовується для перетворення назад на логічні імена для переходу на нові короткі імена, наприклад, якщо коротке ім’я змінюється або розробник на іншій мові редагує програму.
Нотатка
Логічні імена не перекладаються під час переміщення програми між середовищами. Для імен системних таблиць і полів Dataverse це не має бути проблемою, оскільки логічні імена узгоджені в усіх середовищах. Але настроювані поля, наприклад cra3a_customfield у наведеному вище прикладі, можуть мати інший префікс середовища (cra3a у цьому випадку). Бажано використовувати короткі імена, оскільки їх можна зіставити з короткими іменами в новому середовищі.
Усунення неоднозначності імен
Оскільки короткі імена не є унікальними, одне коротке ім’я може використовуватись в одній таблиці кілька разів. Коли це станеться, логічне ім’я буде додано в кінець відображуваного імені в дужках для одного з кількох конфліктних імен. Якщо у вищенаведеному прикладі створити друге поле з тим самим коротким іменем Настроюване поле і логічним іменем cra3a_customfieldalt, то відобразяться так пропозиції:
Рядки усунення неоднозначності імен додаються в інших ситуаціях, коли виникають конфлікти імен, наприклад імен таблиць, виборів та інших елементів Dataverse.
Оператор усунення неоднозначності
Деякі функції створюють області застосування записів для доступу до полів таблиці під час обробки кожного запису, наприклад Filter, AddColumns і SUM. Імена полів, додані в область застосування записів, перевизначають такі ж імена в іншому місці програми. Якщо це станеться, можна отримати доступ до значень, які не належать до області застосування записів за допомогою оператора усунення неоднозначності @:
- Щоб отримати доступ до значень з вкладених областей застосування записів, скористайтеся оператором @ з іменем таблиці, до якої оператор застосовується, згідно з цим прикладом:
Таблиця[@FieldName] - Щоб отримати доступ до глобальних значень, наприклад джерел даних, колекцій і контекстних змінних, скористайтеся шаблоном [@НазваОбєкта] (без зазначення таблиці).
Для отримання додаткових відомостей і прикладів див. розділ Області застосування записів.