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


Оператори й ідентифікатори

Нотатка

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

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

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

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

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

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'

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

Сутність облікових записів із доданим користувацьким полем, що відображає відображуване ім’я «Спеціальне поле» та логічне ім’я «cr5e3_customfield».

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

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

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

Рядок формул Studio показує використання відображуваного імені

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

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

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

Нотатка

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

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

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

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

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

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

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

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

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