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

Применимо к: приложениям на основе холста приложениям на основе модели

Некоторые из этих операторов зависят от языка, используемого на компьютере автора. Дополнительные сведения о поддержке языков в приложениях на основе холста см. в разделе Глобальные приложения.

Символ Тип Пример Описание
'...' Идентификатор 'Account Name' Идентификаторы, содержащие специальные символы, включая пробелы, заключаются в одинарные кавычки.
"..." Текстовая строка "Hello, World" Текстовые строки заключены в двойные кавычки
$"..." Интерполяция строк $"Уважаемый {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")
= Операторы сравнения Цена = 100 Равно
>   Цена > 100 Больше
>=   Цена >= 100 Больше или равно
<   Цена < 100 Меньше
<=   Цена <= 100 Меньше или равно
<>   Цена <> 100 Не равно
& Оператор объединения строк "привет," & " " & "мир" Непрерывно отображает несколько строк.
&& или And Логические операторы Price < 100 && Slider1.Value = 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 “To display windows in the Windows operating system...” Тестирование подстроки (с учетом регистра).
в папке   Gallery1.Selected in SavedItems Принадлежит коллекции или таблице.
в папке   "The" in "The keyboard and the monitor..." Тестирование подстроки (без учета регистра).
@ Оператор устранения неоднозначности MyTable[@fieldname] Устранение неоднозначности для поля.
@   [@MyVariable] Глобальное устранение неоднозначности.
,
[зависит от языка]
Разделитель элементов списка If( X < 10, "Low", "Good" )
{ 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 Доступ к полям элемента управления gallery или form
ThisRecord Оператор ThisRecord ThisRecord.FirstName Доступ ко всей записи и отдельным полям записи в ForAll, Sum, With и других функциях области записи. Может быть переопределено с помощью оператора As.

Заметка

Оператор @ также может использоваться для проверки типа объекта записи на соответствие источнику данных. Например: Collect(coll,Account@{'Account Number: 1111')

Операторы in и exactin

Чтобы найти строку в источнике данных, например в коллекции или импортированной таблице, используйте операторы in и exactin. Оператор in определяет совпадения независимо от регистра, а оператор exactin определяет только те совпадения, которые начинаются с буквы в том же регистре. Приведем пример:

  1. Создайте или импортируйте коллекцию с именем Inventory, затем покажите ее в коллекции, как это описано в первой процедуре раздела Отображение изображений и текстов в коллекции.

  2. Задайте для свойства Items коллекции следующую формулу:
    Filter(Inventory, "E" in ProductName)

    В коллекции отображаются все товары, за исключением Callisto, так как имя этого товара является единственным, которое не содержит указанную букву.

  3. Задайте для свойства Items коллекции следующую формулу:
    Filter(Inventory, "E" exactin ProductName)

    В коллекции отображается только имя Europa, так как оно единственное, которое содержит указанную букву в указанном регистре.

Операторы ThisItem, ThisRecord и As

Некоторые элементы управления и функции применяют формулы к отдельным записям таблицы. Чтобы сослаться на отдельную запись в формуле, используйте одно из следующего:

Оператор Относится к Описание
ThisItem Элемент управления Gallery (Коллекция)
Элемент управления Edit form (Форма редактирования)
Элемент управления Display form (Форма отображения)
Имя по умолчанию для текущей записи в элементу управления Gallery или форме.
ThisRecord ForAll, Filter, With, Sum и другие функции области записи Имя по умолчанию для текущей записи в ForAll и других функциях области записи.
Asимя Элемент управления Gallery (Коллекция)
ForAll, Filter, With, Sum и другие функции области записи
Определяет имя для текущей записи, заменяя ThisItem или ThisRecord по умолчанию. Используйте As, чтобы облегчить понимание формул и устранить неоднозначность при вложении.

Оператор ThisItem

Например, в следующем элементе управления Gallery свойство Items устанавливается для источника данных Сотрудники (например, таблица Сотрудники, включенная в пример Northwind Traders):

Employees

Сотрудники, отображаемые в коллекции.

Первый элемент в коллекции — это шаблон, который копируется для каждого сотрудника. В шаблоне формула для изображения использует ThisItem для ссылки на текущий элемент:

ThisItem.Picture

Формула для изображения сотрудника.

Аналогично, формула для имени также использует ThisItem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Формула для имени и фамилии сотрудника.

Оператор ThisRecord

ThisRecord используется в функциях, имеющих область записи. Например, мы можем использовать функцию Filter со свойством Items нашей коллекции, чтобы показывать только имена, которые начинаются с 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. Присвоение имени записи может облегчить понимание ваших формул и может потребоваться во вложенных ситуациях для доступа к записям в других областях.

Например, вы можете изменить свойство Items нашей коллекции для использования As, чтобы определить, что мы работаем с сотрудником:

Employees As Employee

Коллекция сотрудников, использующая оператор As.

Формулы для изображения и имени скорректированы, чтобы использовать это имя для текущей записи:

Employee.Picture

Изображение сотрудника, использующее имя сотрудника, заданное оператором As.

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

Имя и фамилия сотрудника, использующее имя сотрудника, заданное оператором 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
)

При задании в элементе управления Label для свойства Text следующей формулы отображается:

Текстовая шахматная доска, отображаемая в элементе управления подписи.

Давайте разберем, что здесь происходит:

  • Мы начинаем с перебора безымянной таблицы из 8 пронумерованных записей из функции Sequence. Этот цикл предназначен для каждой строки доски, который обычно называют Rank, поэтому мы даем ему это имя.
  • Для каждой строки мы перебираем другую безымянную таблицу из 8 столбцов и даем общее имя File.
  • Если Rank.Value + File.Value нечетное число, квадрат получает X, иначе точку. Эта часть формулы упоминается в обоих циклах ForAll, что стало возможным благодаря использованию оператора As.
  • Concat используется дважды, сначала для сборки столбцов, а затем строк, с вставкой функции Char(10), чтобы создать новую строку.

Аналогичный пример возможен с вложенными элементами управления Gallery вместо функций ForAll. Начнем с вертикальной коллекции для Rank. Этот элемент управления коллекции будет иметь для Items формулу:

Sequence(8) as Rank

Иллюстрация внешней коллекции, которая обеспечивает итерацию Rank.

В этой коллекции мы разместим горизонтальную коллекцию для File, которая будет повторяться для каждой строки Rank со свойством Items:

Sequence(8) as File

Иллюстрация внутренней коллекции, которая обеспечивает итерацию File.

И, наконец, в этой коллекции мы добавим элемент управления Label, который будет воспроизведен для каждого элемента File и для каждого элемента Rank. Мы изменим его размер, чтобы заполнить все пространство, и используем свойство Fill, чтобы задать цвет по этой формуле:

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Элемент управления

Операторы Self и Parent

Существует три способа ссылки на элемент управления и его свойства в формуле:

Способ Описание
По имени элемента управления На элемент управления можно ссылаться по имени из любого места в приложении.

Например, Label1.Fill относится к свойству fill элемента управления, имя которого Label1.
Оператор Self Часто удобно ссылаться на другое свойство того же элемента управления при написании формулы. Вместо того, чтобы использовать абсолютную ссылку по имени, проще и более переносимо использовать относительную ссылку на один Self. Оператор Self обеспечивает удобный доступ к текущему элементу управления.

Например, Self.Fill относится к цвету заливки текущего элемента управления.
Оператор Parent Некоторые элементы управления содержат другие элементы управления, такие как Screen и Gallery. Элемент управления, в котором размещаются другие элементы управления, называется родительским. Как оператор Self, оператор Parent обеспечивает простую относительную ссылку на элемент управления container.

Например, Parent.Fill ссылается на свойство fill элемента управления, являющегося контейнером для текущего элемента управления.

Self и Parent являются операторами, а не свойствами самих элементов управления. Ссылка на Parent.Parent, Self.Parent или Parent.Self не поддерживается.

Имена идентификаторов

Имена переменных, источников данных, столбцов и других объектов могут содержать любые символы Юникода.

Используйте одинарные кавычки вокруг имени, которое содержит пробел или другой специальный символ.
Используйте две одинарные кавычки вместе, чтобы представить одну одинарную кавычку в имени. Имена, не содержащие специальных символов, не требуют одинарных кавычек.

Вот несколько примеров имен столбцов, которые могут встретиться в таблице, и то, как они представлены в формуле:

Имя столбца в базе данных Ссылка на столбец в формуле
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Name with spaces (Имя с пробелами) 'Name with spaces'
Name with "double" quotes (Имя с "двойными" кавычками) 'Name with "double" quotes'
Name with 'single' quotes (Имя с "одинарными" кавычками) 'Name with ''single'' quotes'
Name with an @ at sign (Имя со знаком @) 'Name with an @ at sign'

Двойные кавычки используются для обозначения текстовых строк.

Отображаемые имена и логические имена

Некоторые источники данных, такие как SharePoint и Microsoft Dataverse, имеют два разных имени для ссылки на одну и ту же таблицу или столбец данных:

  • Логическое имя - имя, которое гарантированно уникально, не меняется после создания, обычно не допускает пробелов и других специальных символов и не локализовано на другие языки. В результате имя может быть загадочным. Эти имена используются профессиональными разработчиками. Например, cra3a_customfield. Это имя также может упоминаться как имя схемы или просто имя.

  • Отображаемое имя — имя, которое является дружественным к пользователю и предназначено для просмотра конечными пользователями. Это имя может быть не уникальным, может меняться с течением времени, может содержать пробелы и любые символы Юникода и может быть локализовано на разные языки. В соответствии с примером выше, отображаемое имя может быть Настраиваемое поле с пробелом между словами.

Поскольку отображаемые имена легче понять, приложения на основе холста будут предлагать их как варианты, а не предлагать логические имена. Хотя логические имена не предлагаются, их все же можно использовать, если они введены косвенно.

Например, представьте, что вы добавили Пользовательское поле в таблицу в Dataverse. Система присваивает вам логическое имя, которое вы можете изменять только при создании поля. Результат будет выглядеть примерно так:

Добавлена таблица учетных записей с пользовательским полем, показывающая отображаемое имя «Пользовательское поле», и логическое имя «cr5e3_customfield».

При создании ссылки на поле сущности Организации будет предложено использовать 'Custom Field', так как это отображаемое имя. Необходимо использовать одинарные кавычки, потому что в этом имени есть пробел:

Панель формул Studio, отображающая предложения для имен полей Accounts с выделенным отображаемым именем 'Custom Field'.

После выбора предложения в строке формул отображается 'Custom Field' (Пользовательское поле), и данные извлекаются:

Панель формул Studio, показывающая использование отображаемого имени 'Custom Field' для поля.

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

Панель формул Studio, показывающая использование логического имени cr5e3_customfield для поля.

За кулисами поддерживается отображение между отображаемыми именами, видимыми в формулах, и соответствующими логическими именами. Поскольку для взаимодействия с источником данных необходимо использовать логические имена, это сопоставление используется для автоматического преобразования из текущего отображаемого имени в логическое имя, как это видно в сетевом трафике. Это сопоставление также используется для преобразования обратно в логические имена, чтобы переключиться на новые отображаемые имена, например, если отображаемое имя изменяется или разработчик на другом языке редактирует приложение.

Заметка

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

Устранение неоднозначности имен

Поскольку отображаемые имена не уникальны, одно и то же отображаемое имя может появляться в одной и той же таблице несколько раз. Когда это происходит, логическое имя будет добавлено в конец отображаемого имени в скобках для одного или нескольких конфликтующих имен. Основываясь на приведенном выше примере, если было второе поле с тем же отображаемым именем Custom Field (Пользовательское поле) с логическим именем cra3a_customfieldalt, тогда предложения покажут:

Панель формул Studio, показывающая использование логического имени cr5e3_customfieldalt для устранения неоднозначности двух версий

Строки устранения неоднозначности имен добавляются в других ситуациях, когда возникают конфликты имен, например, имена таблиц, наборов выбора и других элементов Dataverse.

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

Некоторые функции создают области записей для доступа к полям таблицы при обработке каждой записи, например Filter, AddColumns и Sum. Имена полей, добавленные с помощью области записи, переопределяют такие же имена из любого другого места в приложении. В этом случае с помощью оператора устранения неоднозначности @ можно по-прежнему получать доступ к значениям за пределами области записи.

  • Для доступа к значениям из вложенных областей записей используйте оператор @, указав имя нужной таблицы в формате:
    Table[@FieldName]
  • Чтобы получить доступ к глобальным значениям, таким как источники данных, коллекции и переменные контекста, используйте шаблон [@ObjectName] (без обозначения таблицы).

Дополнительные сведения и примеры см. в разделе Области записей.