Поділитися через


Оператори та ідентифікатори в Power Apps

Застосовується до: програм Canvas Програм на основі моделі

Деякі з цих операторів залежать від мови автора. Додаткову інформацію про підтримку мов у компонованих програмах див. в розділі Глобальні програми.

Символ Ввести Приклад Опис
'...' Ідентифікатор '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 вказує на збіги лише при однаковому виборі регістру. Ось приклад:

  1. Створіть або імпортуйте колекцію під назвою Запаси, і відобразіть її у колекції (галереї), як описано в першій процедурі розділу Відображення зображень та тексту у колекції.

  2. Задайте значенням властивості Елементи колекції цю формулу:
    Filter(Inventory, "E" in ProductName)

    У галереї відобразяться всі продукти, за винятком Callisto, оскільки лише назва цього продукту не містить зазначену літеру.

  3. Змініть значення властивості Елементи колекції на цю формулу:
    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.

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

Галерея співробітників, за допомогою оператора As.

Формули для зображення та імені будуть скориговані для використання цього імені для поточного запису:

Employee.Picture

Зображення співробітника з ім’ям працівника, встановленим оператором As.

Employee.'First Name' & " " & Employee.'Last Name'

First та прізвище співробітника, який використовує ім’я Employee, встановлене оператором As.

Оператор 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. Системою буде призначено логічне ім’я, яке можна змінювати лише під час створення поля. Результат виглядатиме приблизно як:

Таблиця рахунків із доданим користувацьким полем із коротким ім’ям

Під час створення посилання на поле сутності "Бізнес-партнери", буде надана пропозиція використати ім'я 'Настроюване поле', оскільки це коротке ім'я. Потрібно використовувати одинарні лапки, оскільки в ньому міститься пробіл.

Рядок формул Studio показує пропозиції щодо назв полів облікових записів із виділеним коротким ім’ям

Після вибору пропозиції, 'Настроюване поле' відобразиться в рядку формул і отримуються дані:

Рядок формул студії, що показує використання відображуваного імені «Настроюване поле» для поля.

Хоча це не рекомендовано, також можна використати для поля логічне ім’я. В результаті будуть отримані ті ж дані. Одинарні лапки не потрібні, оскільки це ім’я не містить пробілів або спеціальних символів:

Рядок формул студії, що показує використання логічного імені cr5e3_customfield для поля.

За лаштунками зберігається зіставлення між короткими іменами, які відображаються у формулах і базовими логічними іменами. Оскільки логічні імена обов'язково використовуються для взаємодії з джерелом даних, це зіставлення використовується для автоматичного перетворення поточного короткого імені на логічне ім'я, і це видно в мережевому трафіку. Це зіставлення також використовується для перетворення назад на логічні імена для переходу на нові короткі імена, наприклад, якщо коротке ім’я змінюється або розробник на іншій мові редагує програму.

Нотатка

Логічні імена не перекладаються під час переміщення програми між середовищами. Для імен системних таблиць і полів Dataverse це не має бути проблемою, оскільки логічні імена узгоджені в усіх середовищах. Але настроювані поля, наприклад cra3a_customfield у наведеному вище прикладі, можуть мати інший префікс середовища (cra3a у цьому випадку). Бажано використовувати короткі імена, оскільки їх можна зіставити з короткими іменами в новому середовищі.

Усунення неоднозначності імен

Оскільки короткі імена не є унікальними, одне коротке ім’я може використовуватись в одній таблиці кілька разів. Якщо це станеться, логічне ім'я додається до кінця короткого імені в дужках, для одного або кількох конфліктуючих імен. Якщо у вищенаведеному прикладі створити друге поле з тим самим коротким іменем Настроюване поле і логічним іменем cra3a_customfieldalt, то відобразяться так пропозиції:

Рядок формул студії, що показує використання логічного імені, cr5e3_customfieldalt для усунення неоднозначності двох версій «Настроюваного поля».

Рядки усунення неоднозначності імен додаються в інших ситуаціях, коли виникають конфлікти імен, наприклад імен таблиць, виборів та інших елементів Dataverse.

Оператор усунення неоднозначності

Деякі функції створюють області застосування записів для доступу до полів таблиці під час обробки кожного запису, наприклад Filter, AddColumns і SUM. Імена полів, додані в область застосування записів, перевизначають такі ж імена в іншому місці програми. Якщо це станеться, можна отримати доступ до значень, які не належать до області застосування записів за допомогою оператора усунення неоднозначності @:

  • Щоб отримати доступ до значень з вкладених областей застосування записів, скористайтеся оператором @ з іменем таблиці, до якої оператор застосовується, згідно з цим прикладом:
    Таблиця[@FieldName]
  • Щоб отримати доступ до глобальних значень, наприклад джерел даних, колекцій і контекстних змінних, скористайтеся шаблоном [@НазваОбєкта] (без зазначення таблиці).

Для отримання додаткових відомостей і прикладів див. розділ Області застосування записів.