Типы данных

Заметка

Microsoft Power Fx — это новое название языка формул приложений на основе холста. Эти статьи находятся в стадии разработки, поскольку мы извлекаем язык из приложений на основе холста, интегрируем его с другими продуктами Microsoft Power Platform и делаем его доступным как открытый исходный код. Начнем с Обзор Microsoft Power Fx для введения в язык.

Информация проходит через приложение в небольших дискретных значениях, очень похожих на ячейки электронной таблицы. Например, данные в поле День рождения и поле Годовщина будет проходить как значения Дата, которое включает год, месяц и день. Приложение знает, как форматировать эти значения, ограничивать входные данные тем, что подходит для каждого, и делиться значениями с базой данных. Дни рождения отличаются от годовщин для людей, но система обрабатывает их одинаково. В этом случае Дата — это пример типа данных.

В этой статье приводятся сведения о типах данных, поддерживаемых приложениями на основе холста. Когда приложение подключается к внешнему источник данных, каждый тип данных в этом источнике сопоставляется с типом данных для приложений на основе холста.

Тип данных Описание Примеры
Boolean Значение true или false. Может использоваться непосредственно в функциях If, Filter и других без сравнения. true
Цвет Спецификация цвета, включая альфа-канал. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0,5 )
Валюта Значение валюты, которое хранится в числе с плавающей запятой. Значения валюты совпадают со значениями чисел с параметрами форматирования валюты. 123
4.56
Дата Дата без времени, в часовом поясе пользователя приложения. Date( 2019, 5, 16 )
DateTime Дата со временем, в часовом поясе пользователя приложения. DateTimeValue( "May 16, 2019 1:23:09 PM" )
Decimal Число с высокой точностью, операциями по основанию 10 и ограниченным диапазоном. 123
Decimal( "1.2345" )
GUID Глобальный уникальный идентификатор . GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Гиперссылка Текстовая строка, содержащая гиперссылку. "https://powerapps.microsoft.com"
Image Текстовая строка универсального кода ресурса (URI), указывающего на изображение в формате .jpeg, .png, .svg, .gif или в другом общем формате веб-изображений. MyImage добавлено в качестве ресурса приложения
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Медиа Текстовая строка универсального кода ресурса (URI) для видео или аудио записи. MyVideo добавлено в качестве ресурса приложения
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Число или Число с плавающей точкой Число со стандартной точностью, операциями по основанию 2 и широким диапазоном. 123
8,903e121
1.234e200
Выбранный вариант Выбор из набора параметров на основе числа. Этот тип данных сочетает локализуемую текстовую метку с числовым значением. Метка появляется в приложении, а числовое значение сохраняется и используется для сравнения. ThisItem.OrderStatus
Запись Запись значений данных. Этот составной тип данных содержит экземпляры других типов данных, которые перечислены в этой теме. Подробнее: Работа с таблицами. { Компания: "Northwind Traders",
Персонал: 35,
Некоммерческая: false }
Ссылка на запись Ссылка на запись в таблице. Такие ссылки часто используются с полиморфными подстановками. Подробнее: Работа со ссылками. First(Accounts).Owner
Table Таблица записей. Все записи должны иметь одинаковые имена для своих полей с одинаковыми типами данных, а пропущенные поля рассматриваются как пустые. Этот составной тип данных содержит экземпляры других типов данных, которые перечислены в этой теме. Подробнее: Работа с таблицами. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Текст Текстовая строка в формате Unicode. "Привет, мир"
Time Время без даты, в часовом поясе пользователя приложения. Time( 11, 23, 45 )
Два параметра Выбор из набора из двух параметров на основе логического значения. Этот тип данных сочетает локализуемую текстовую метку с логическим значением. Метка появляется в приложении, а логическое значение сохраняется и используется для сравнения. ThisItem.Taxable
Нетипизированный объект Объект необъявленного типа. Базовый объект может быть любого существующего типа и может быть преобразован в совместимые типы с помощью таких функций, как логическое значение(), Значение(), Таблица() и т.д. Для получения дополнительной информации см. Нетипизированный объект и Работа с JSON. ParseJSON("{ ""Field"" : 1234 }").Field

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

Blank

Все типы данных могут иметь пустое значение (другими словами, не иметь значения). Термин "NULL" часто используется в базах данных для этой концепции.

Используйте функцию Blank с функцией Set или Patch для задания переменной или полю пустого значения. Например, Set( x, Blank() ) удаляет любое значение из глобальной переменной x.

Для проверки на пустое значение используйте функцию IsBlank. Замените возможные пустые значения непустыми значениями с помощью функции Coalesce.

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

Все четыре из этих типов данных основаны на текстовой строке Unicode.

Встроенный текст

Встроенные текстовые строки в формуле заключаются в двойные кавычки. Используйте две двойные кавычки вместе, чтобы представить одну двойную кавычку в текстовой строке. Например, используя следующую формулу в свойстве OnSelect элемента управления Button:

Notify( "Jane said ""Hello, World!""" )

приводит к появлению баннера при нажатии кнопки, где первые и последние двойные кавычки опускаются (поскольку они разделяют текстовую строку) и повторяющиеся двойные кавычки вокруг Привет, мир! заменяются одинарной двойной кавычкой:

всплывающее уведомление с сообщением Jane said

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

Интерполяция строк

Используйте интерполяцию строк для встраивания формул в текстовую строку. Часто с этим проще работать и визуализировать результат, чем с функцией Concatenate или оператором &.

Поставьте префикс текстовой строки со знаком доллара $ и заключите формулу для встраивания в фигурные скобки { }. Чтобы включить фигурную скобку в текстовую строку, используйте повторяющиеся фигурные скобки: {{ или }}. Интерполяцию строк можно использовать везде, где можно использовать стандартную текстовую строку.

Например, рассмотрим эту формулу с глобальными переменными яблоки со значением 3 и бананы со значением 4:

$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."

Эта формула возвращает текстовую строку У нас есть 3 яблока, 4 банана, всего 7 фруктов. Переменные Яблоки и Бананы вставляются в текст вместо фигурных скобок вместе с результатом математической формулы Яблоки+Бананы. Пробелы и другие символы вокруг фигурных скобок сохраняются как есть.

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

$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )

Если NickName задано как "Джо", то эта формула создает текстовую строку Добро пожаловать, Джо, приятно познакомиться!. Но если NickName является пустым и FirstName — "Джозеф", то эта формула дает Уважаемый Джозеф, приятно познакомиться! вместо этого.

Интерполяция строк может включать во встроенную формулу стандартные текстовые строки. Например, если ни NickName, ни FirstName не указаны, мы все еще можем предоставить "Друг" в качестве замены:

$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"

Интерполяции строк могут быть даже вложенными. Рассмотрим этот пример, где Имя, Отчество и Фамилия объединяются в приветствие. Даже если одно или два из этих значений пустое, правильное количество пробелов будет между частями имени. Если ни одна из частей не указана, интерполяция внутренней строки свернется в пустую строку и будет заменена функцией Coalesce как "Друг".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Имя Отчество Фамилия Результат
Джон Куниси Доу Welcome John Quincy Doe!
Джон пусто Доу Welcome John Doe!
пусто пусто Доу Welcome Doe!
пусто пусто пусто Welcome Friend!

Новые строки

Встроенные текстовые строки могут содержать новые строки. Например, рассмотрите возможность установки свойства Text элемента управления Label как следующее:

"Line 1
Line 2
Line 3"

Приведенная выше формула приводит к трем строкам, показанным в элементе управления label:

Встроенная текстовая строка и элемент управления label, показывающий три строки со строкой 1, строкой 2 и строкой 3.

Новые строки также поддерживаются интерполяцией строк, как показано ниже:

$"Line {1}
Line {1+1}
Line {1+1+1}"

Приведенная выше формула дает тот же результат:

Формула интерполяции строк и элемент управления label, показывающий три строки со строкой 1, строкой 2 и строкой 3.

Ресурсы изображения и мультимедиа

Через меню Файл вы можете добавить изображения, видео и аудиофайлы в качестве ресурсов приложения. Имя импортируемого файла становится именем ресурса в приложении. На этом рисунке логотип Northwind Traders, который называется nwindlogo, был добавлен в приложение:

Ресурс Northwind.

Чтобы использовать этот ресурс в приложении, укажите его в свойстве Изображение элемента управления Image:

Изображение Northwind.

Коды URI для изображений и других мультимедиа

Вы можете немного больше углубиться в этот последний пример, установив для свойства Text элемента управления Label значение nwindlogo. Метка показывает текстовую строку:

Текст Northwind.

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

Например, свойство Image элемента управления изображения принимает не только ресурсы приложения, но и ссылки на изображения в Интернете, такие как "https://northwindtraders.com/logo.jpg". Свойство также принимает встроенные изображения, которые используют схему URI данных, как в этом примере:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"

Этот код URI отображает увеличенную версию двух фиолетовых бриллиантов:

Двойные ромбы.

Вы можете показать самое последние изображение, снятое в элементе управления Camera, если установите свойство Image элемента управления изображения равным свойству Photo элемента управления Camera. Приложение хранит изображение в памяти, а свойство Photo элемента управления камеры возвращает ссылку на код URI для изображения. Например, вы можете сделать снимок, и свойство Photo камеры может вернуть "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Вы используете код URI для ссылки на изображение или другой файл мультимедиа, хранящийся в базе данных. Таким образом, приложение не извлекает фактические данные, пока они не потребуются. Например, вложение в таблице Microsoft Dataverse может вернуть "appres://datasources/Contacts/table/..." Как в примере камеры, вы можете отобразить это изображение, установив для свойства Image элемента управления "Изображение" эту ссылку, которая получает двоичные данные.

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

Ограничения размера

Как текстовые строки и коды URI, эти типы данных не имеют предустановленного ограничения на их длину.

Двоичные данные, на которые ссылаются эти типы данных, также не имеют заранее установленного ограничения на размер. Например, изображение, снятое с помощью элемента управления "Камера", которое теперь называется "appres://...", может иметь такое большое и высокое разрешение, какое может дать камера устройства. Разрешение, частота кадров и другие атрибуты файлов муьтимедиа не ограничены типом данных, но определенные элементы управления для воспроизведения и захвата мультимедиа могут иметь свои собственные ограничения.

Тем не менее, все размеры данных зависят от объема доступной памяти в приложении. Браузеры, работающие на настольном компьютере, обычно поддерживают более 100 мегабайт данных. Однако объем доступной памяти на устройстве, таком как телефон, может быть намного меньше, обычно в диапазоне 30–70 мегабайт. Чтобы определить, будет ли ваше приложение работать в этих пределах, протестируйте общие сценарии на всех устройствах, на которых оно должно работать.

Рекомендуется хранить данные в памяти только столько времени, сколько необходимо. Отправляйте изображения в базу данных как можно быстрее; загружайте изображения только тогда, когда пользователь приложения запрашивает их.

Числа

Заметка

В настоящее время в Power Apps поддерживается только тип Число с плавающей точкой, и это тип всех чисел. Поддержка типа Десятичное число скоро будет добавлена.

Power Fx поддерживает два типа чисел: Десятичное и Число с плавающей запятой (с синонимами Число и Валюта).

Тип Десятичное число лучше всего подходит для большинства бизнес-расчетов. Он может точно представлять числа по основанию 10, что означает, что 0.1 может быть точно представлено и не будет подвержено ошибкам округления во время вычислений. Он имеет достаточно большой диапазон для любых потребностей бизнеса: до 1028 с точностью до 28 цифр. Десятичное число — это числовой тип данных по умолчанию для большинства узлов Power Fx, используемый, если просто записать 2*2.

Число с плавающей точкой лучше всего подходит для научных расчетов. Он может представлять числа в гораздо большем диапазоне, вплоть до 10308. Точность ограничена 15 десятичными знаками, а математические вычисления основаны на основании 2, поэтому они не могут точно представлять некоторые распространенные десятичные значения. Тип Число с плавающей точкой также имеет более высокую производительность и является предпочтительным, если это важный фактор и точность не имеет решающего значения.

Десятичные числа

Тип данных Десятичное число чаще всего использует десятичный тип данных .NET. Некоторые узлы, такие как столбцы формул Dataverse, которые выполняются в SQL Serer, используют десятичный тип данных SQL Server.

Десятичное число выполняет математические операции так же, как вы учились в школе, используя десятичную систему счисления. Это очень важно, чтобы избежать ошибок округления при очень небольших разностях, которые могут накапливаться при использовании математических вычислений по основанию 2 (которые используются для типа Число с плавающей точкой).

Диапазон лежит от положительного числа 79 228 162 514 264 337 593 543 950 335 до отрицательного числа 79 228 162 514 264 337 593 543 950 335. Десятичный разделитель можно разместить в любом месте этих чисел, обеспечивая точность до 28 цифр и сохраняя при этом точное представление. Например, 79 228 162 514 264,337593543950335 может быть точно представлено как и 7,9228162514264337593543950335.

Числа с плавающей точкой

Типы данных Число с плавающей точкой, также известный как Число или Валюта использует стандарт двойной точности с плавающей запятой IEEE 754. Этот стандарт предоставляет очень большой диапазон чисел для работы, от –1,79769 x 10308 до 1,79769 x 10308. Наименьшее значение, которое может быть представлено, составляет 5 х 10–324.

Тип данных Число с плавающей точкой может точно представлять целые числа (или целые) в диапазоне от –9 007 199 254 740 991 (–(253 – 1)) и 9 007 199 254 740 991 (253 – 1) включительно. Этот диапазон больше, чем 32-разрядные (или 4-байтовые) целочисленные типы данных, которые обычно используют базы данных. Однако приложения на основе холста не могут представлять 64-битные (или 8-байтовые) целочисленные типы данных. Возможно, вы захотите сохранить число в текстовом поле или использовать вычисляемый столбец, чтобы сделать копию числа в текстовом поле, чтобы оно сопоставлялось с типом данных Текст в приложении на основе холста. Таким образом, вы можете хранить, отображать и вводить эти значения, а также сравнивать их, чтобы определить, равны ли они; тем не менее, вы не можете выполнять численные расчеты над ними в этой форме.

Арифметика с плавающей запятой является приблизительной, поэтому она может иногда давать неожиданные результаты со многими документированными примерами. Вы можете ожидать, что формула 55 / 100 * 100 вернет ровно 55, а (55 / 100 * 100) – 55 вернет ровно ноль. Однако последняя формула возвращает 7,1054 x 10–15, что очень мало, но не ноль. Эта крошечная разница обычно не вызывает проблем, и приложение отбрасывает ее при округлении для отображения результата. Однако небольшие различия могут усугубляться в последующих расчетах и, давать неправильный ответ.

Системы баз данных часто хранят валюты и выполняют вычисления, используя десятичную математику, которая предлагает меньший диапазон, но больший контроль над точностью. По умолчанию приложения на основе холста сопоставляют валюты во входящих и исходящих значениях с плавающей запятой; следовательно, результат может отличаться от расчетов, выполненных в собственном десятичном типе данных. Если этот тип несоответствия вызовет проблемы, вы можете работать с этими значениями как со значениями Текст, так же, как вы могли бы с большими целыми числами, описанными ранее в этом разделе.

Значения по умолчанию и преобразования

Заметка

В настоящее время в Power Apps поддерживается только тип Число с плавающей точкой, и это тип всех чисел. Поддержка типа Десятичное число скоро будет добавлена.

Большинство узлов Power Fx по умолчанию используют тип данных Десятичное число. Это влияет на:

  • Строковые представления чисел в формулах. Число 1.234 будет интерпретироваться как Десятичное значение. Например, формула 1.234 * 2 интерпретирует 1.234 и 2 как Десятичное число и возвращает Десятичный результат.
  • Функция Value. Value( "1.234" ) вернет Десятичное значение. Например, в формуле Value( "1.234" ) * 2 функция Value будет интерпретировать содержимое текстовой строки "1.234" как Десятичное число.

Для работы со значениями Число с плавающей точкой используется функция Float. Расширяя приведенный выше пример, Float( 1.234 ) преобразует Десятичное число1.234 в Число с плавающей точкой. Функцию Float также можно использовать в качестве замены функции Value для преобразования строки, содержащей число с плавающей запятой, например Float( "1.234" ), в значение типа Число с плавающей точкой , которое требуется, если число не может быть представлено в виде типа Десятичное число.

Сводка:

Использование Десятичное число Число с плавающей точкой
Строковые представления чисел в формулах 1.234 Float( 1.234 )
Float( "1.234" )
Преобразование из текстовой строки Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Преобразование между числовыми типами Decimal( float ) Float( decimal )
Преобразование в текстовую строку Text( decimal ) Text( float )

Смешивание числовых типов

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

Например, рассмотрите следующий расчет с использованием pac power-fx repl после установки Power Platform CLI. Поскольку оба числа имеют тип Десятичное число, расчет производится с типами Десятичное число и результат сохраняет полную точность:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

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

>> 1.0000000000000000000000000001 * Float(2)
2

Дата, время и дата и время

Часовые пояса

Значения даты и времени подпадают под следующие категории:

  • Часовой пояс пользователя: эти значения хранятся в формате UTC (Всемирное координированное время), но часовой пояс пользователя приложения влияет на то, как приложение показывает эти значения, и как пользователь приложения указывает их. Например, один и тот же момент времени для пользователя в Канаде выглядит иначе, чем для пользователя в Японии.
  • Независимо от часового пояса: приложение показывает эти значения одинаково, и пользователь приложения указывает их одинаково, независимо от часового пояса. Один и тот же момент времени для пользователя в Канаде и для пользователя в Японии выглядит одинаково. Авторы приложений, которые не ожидают, что их приложения будут работать в разных часовых поясах, используют эти значения, поскольку в целом они проще.

Эта таблица показывает несколько примеров:

Тип даты и времени Значение, хранящееся в базе данных Значение, отображаемое и вводимое в 7 часах к западу от UTC Значение, отображаемое и вводимое в 4 часах к востоку от UTC
Часовой пояс пользователя Воскресенье,19мая2019
4:00
Суббота,18мая,2019
21:00
Воскресенье,19мая2019
8:00
Независимо от часового пояса Воскресенье,19мая2019
4:00
Воскресенье,19мая2019
4:00
Воскресенье,19мая2019
4:00

Для дат и времени типа Часовой пояс пользователя приложения на основе холста используют часовой пояс браузера или устройства, но приложения на основе модели используют настройки пользователя в Dataverse. Эти настройки обычно совпадают, но результаты будут отличаться, если эти настройки различаются.

Используйте функции DateAdd и TimeZoneInformation для преобразования местного времени в UTC и обратно. См. примеры в конце документации по этим функциям.

Числовые эквиваленты

Приложения на основе холста хранят и вычисляют все значения даты и времени, как Часовой пояс пользователя, так и Независимо от часового пояса, в формате UTC. Приложение переводит значения на основе часового пояса пользователя приложения, когда показывает их и когда пользователь приложения указывает их.

Когда приложение на основе холста считывает значение Независимо от часового пояса из источника данных или записывает такое значение в источник данных, приложение автоматически корректирует значение, чтобы компенсировать часовой пояс пользователя приложения. Затем приложение обрабатывает значение как значение UTC, одинаково со всеми другими значениями даты и времени в приложении. Из-за этой компенсации оригинальное значение Независимо от часового пояса появляется, когда приложение настраивает значение UTC для часового пояса пользователя приложения.

Вы можете наблюдать это поведение более внимательно, используя функцию Value для доступа к базовому числовому значению даты и времени. Эта функция возвращает значение даты и времени в виде количества миллисекунд с 1 января 1970 года 00:00:00.000 UTC.

Поскольку каждое значение даты и времени хранится в UTC, формула Value( Date( 1970, 1, 1 ) ) не вернет ноль в большинстве частей мира, потому что функция Date возвращает дату в UTC. Например, формула вернет 28,800,000 в часовом поясе, который смещен от UTC на восемь часов. Это число отражает количество миллисекунд за восемь часов.

Возвращаясь к нашему примеру сверху:

Тип даты и времени Значение, хранящееся в базе данных Значение, отображаемое и вводимое в 7 часах к западу от UTC Функция Value возвращает
Часовой пояс пользователя Воскресенье,19мая2019
4:00
Суббота,18мая,2019
21:00
1,558,238,400,000
(Воскресенье,19мая2019
04:00 UTC)
Независимо от часового пояса Воскресенье,19мая2019
4:00
Воскресенье,19мая2019
4:00
1,558,263,600,000
(Воскресенье,19мая2019
11:00 UTC)

Преобразование значений времени Unix

Время Unix отражает количество секунд с 1 января, 1970 00:00:00 UTC. Поскольку приложения на основе холста используют миллисекунды вместо секунд, вы можете конвертировать два этих значения, умножив или разделив на 1000.

Например, время Unix показывает 9 сентября 2001 года в 01:46:40 UTC как 1 000 000 000. Чтобы показать это значение даты и времени в приложении на основе холста, умножьте это число на 1000, чтобы преобразовать его в миллисекунды, затем используйте его в функции Text. Формула Text( 1000000000 * 1000, DateTimeFormat.UTC ) возвращает строку 2001-09-09T01:46:40.000Z.

Однако эта функция возвращает Суббота, 8 сентября, 2001 18:46:40, если вы используете формат DateTimeFormat.LongDateTime24 в часовом поясе со смещением –7 часов от UTC (7 часов к западу от UTC). Этот результат показывает значение DateTime правильно на основе местного часового пояса.

Чтобы преобразовать время в Unix, разделите результат из Value на 1000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Если вам нужно время Unix в значении Date для дальнейших расчетов или отображения в Power Apps, используйте эту формулу:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server имеет Datetime, Datetime2 и другие типы данных даты и времени, которые не включают смещение часового пояса и не указывают, в каком часовом поясе они находятся. Приложения на основе холста предполагают, что эти значения хранятся в UTC, и обрабатывают их как Часовой пояс пользователя. Если эти значения не должны зависеть от часового пояса, скорректируйте пересчет UTC, используя функцию TimeZoneOffset.

Приложения на основе холста используют информацию о часовом поясе, включенную в поля DateTimeOffset, при преобразовании значения во внутреннее представление UTC приложения. Приложения всегда используют UTC в качестве часового пояса (нулевое смещение часового пояса) при записи данных.

Приложения на основе холста считывают и записывают значения с типом данным Time в SQL Server в виде текстовых строк в формате длительности ISO 8601. Например, вы должны проанализировать этот формат строки и использовать функцию Time, чтобы преобразовать текстовую строку "PT2H1M39S" в значение Time:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Смешивание информации о дате и времени

Типы Date, Time и DateTime имеют разные имена, но все они содержат одинаковую информацию о дате и времени.

Значение Date может включать в себя информацию о времени, которая обычно равна полуночи. Значение Time может содержать информацию о дате, которая обычно составляет 1 января 1970 года. Dataverse также хранит информацию о времени с полем Только дата, но показывает только информацию о дате по умолчанию. Аналогично, приложения на основе холста иногда различают эти типы данных для определения форматов и элементов управления по умолчанию.

Непосредственное добавление и вычитание значений даты и времени не рекомендуется, потому что часовой пояс и другие преобразования могут привести к неверным результатам. Либо используйте функцию Value, чтобы сначала преобразовать значения даты и времени в миллисекунды и принять во внимание часовой пояс пользователя приложения, либо используйте функции DateAdd и DateDiff, чтобы добавить или вычесть одно из этих значений.

Наборы выбора и Да/Нет

Наборы выбора и типы данных с двумя параметрами предоставляют пользователю приложения два или более вариантов выбора. Например, набор выбора Состояние заказа может предложить наборы выбора Новый, Отправленный, Выставлен счет и Закрыт. Тип данных с двумя параметрами предлагает только два варианта.

Оба этих типа данных показывают свои метки в контексте текстовой строки. Например, элемент управления "Метка" показывает один из вариантов состояния заказа, если для свойства Text элемента управления задана формула, которая ссылается на этот набор выбора. Метки параметров могут быть локализованы для пользователей приложений в разных местах.

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

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

If( ThisItem.OrderStatus = "Active", ...

Но вы можете использовать эту формулу:

If( ThisItem.OrderStatus = OrderStatus.Active, ...

Для глобальных наборов вариантов (которые таблицы используют совместно) имя перечисления набора параметров соответствует имени глобального набора выбора. Для локальных наборов выбора (которые ограничены одной таблицей) имя может содержать имя таблицы. Такое поведение позволяет избежать конфликтов, если в нескольких таблицах есть наборы выбора с одинаковым именем. Например, в таблице Учетные записи может быть набор выбора СостояниеЗаказа, а его именем может быть СостояниеЗаказа (Учетные записи). Это имя содержит один или несколько пробелов и скобок, поэтому вы должны заключить его в одинарные кавычки, если вы ссылаетесь на него в формуле.

Кроме того, значения с двумя параметрами также могут вести себя как логические значения. Например, значение с двумя параметрами с именем TaxStatus может иметь метки Taxable (Облагается налогом) и Non-Taxable (Не облагается налогом), которые соответствуют значениям true и false соответственно. Для демонстрации вы можете использовать следующую формулу:

If( ThisItem.Taxable = TaxStatus.Taxable, ...

Вы также можете использовать следующую эквивалентную формулу:

If( ThisItem.Taxable, ...