Тип данных "нетипизированный объект"

Нетипизированный объект – это тип данных в Power Fx, который может содержать любую структуру данных, сложную или простую. Его нельзя использовать напрямую, и он требует явного преобразования в тип данных. Доступ к полям в записях в нетипизированном объекте можно получить с помощью точечной нотации, а наличие полей проверяется только в среде выполнения.

Нетипизированный объект является возвращаемым типом определенных нетипизированных поставщиков. В настоящее время только функция ParseJSON() возвращает нетипизированный объект.

Простые типы

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

Следующие примеры преобразуют значение переменной нетипизированный объект с именем UOValue.

Text(UOValue)
Value(UOValue)

В следующей таблице перечислены типы данных и соответствующие функции для преобразования нетипизированного объекта в этот тип данных.

Тип данных Function Description
Логический Логический() При преобразовании нетипизированного объекта в логическое значение базовое значение должно представлять логическое значение или тип, который может быть преобразован автоматически (например, строку «true»).
Color ColorValue() или RGBA() Цвета могут быть представлены в нотации определения цвета каскадной таблицы стилей (CSS) в виде строки или отдельных компонентов RGBA. Нетипизированный объект может быть преобразован непосредственно из строки определения цвета каскадной таблицы стилей (CSS) с использованием функции ColorValue() или из отдельных RGBA числа в цвет с помощью функции RGBA().
Номер валюты Значение() При преобразовании нетипизированного объекта в число базовое значение должно представлять число или тип, который может быть преобразован автоматически (например, строку «123,456»).
Дата, время и дата, время DateValue(), TimeValue() или DateTimeValue() Дата, время и дата и время могут быть напрямую преобразованы из нетипизированного объекта в их соответствующий тип, когда они представлены в формате ISO 8601. Другие форматы должны сначала быть преобразованы в текст с помощью функции Текст(), а затем перенесены в функцию DateValue(), TimeValue() или DateTimeValue(), которая по умолчанию будет использовать язык настроек текущего пользователя для интерпретации даты и времени.
GUID GUID() Нетипизированный объект может быть напрямую преобразован в GUID, если базовый объект представляет GUID или строку.
Гиперссылка, изображение, мультимедиа Текс() Эти типы данных являются текстовыми типами данных и могут быть преобразованы в текст, а затем использованы в Power Fx.
Выбор, два варианта Переключить или если() Варианты выбора и два варианта представлены в виде локализованных строк в Power Fx. Варианты выбора поддерживаются номером и двумя вариантами в качестве логических значений. Нет прямого преобразования логического значения, числа или строки в выбор или два варианта, но функции Переключить() или Если() могут использоваться для логического, текстового или числового значений, чтобы правильно назначать значение выбор или два варианта.
Запись н/д Нет прямого преобразования нетипизированного объекта в структуру записи, но отдельные поля можно получить из нетипизированного объекта для создания новой записи.
Ссылка на запись н/д Ссылки на записи уникальны для источников данных и не имеют значимого представления в нетипизированных объектах.
Таблицу Таблица() и ForAll() Нетипизированный объект может представлять собой массив, который можно преобразовать в таблицу. Эти объекты могут быть массивами записей или массивами значений, которые фактически являются таблицами с одним столбцом. ForAll() можно использовать для создания таблицы с полностью типизированными записями. Дополнительные сведения см. в примерах, приведенных ниже в этой статье.
Текст Текст() Текст может быть преобразован напрямую. Если нетипизированный объект представляет собой число, вам нужно сначала преобразовать нетипизированный объект в число, используя Значение() до преобразования в текст.

Типы записей

Вы можете получить доступ к полям переменной, представляющей запись нетипизированный объект с использованием обычной точечной нотации, используемой для записей. Однако существование полей не будет проверено до среды выполнения. В результате нет доступного intellisense. Если поле не существует или имеет базовое значение null, доступ к нему приведет к Пустому() значению.

Каждое поле в записи также имеет тип нетипизированный объект и должен быть правильно типизирован. Поле может быть нетипизированной записью простого типа. Если это запись, вы можете сформировать цепочку с точечной нотацией. Если какое-либо поле в цепочке не существует, возвращается значение Пусто().

Следующие примеры используют поля из переменной нетипизированный объект с именем UORecord.

Text(UORecord.StringField)
Value(UORecord.Field.ChildField)

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

untyped.'01'
untyped.'my-field'

Массивы

Переменная нетипизированный объект может содержать массив. Несмотря на то, что массив может быть либо массивом записей, либо массивом простых типов, преобразование массив нетипизированного объекта в таблицу с помощью функции Таблица() всегда будет приводить к созданию таблицы нетипизированных объектов с одним столбцом. Такие функции, как ForAll() и Index(), не требуют предварительного создания Table() и, соответственно, не требуют, чтобы вы использовали одностолбцовое поле Value,

Например, чтобы получить второе число в массиве нетипизированного объекта, содержащем числовые значения ( [1, 2, 3] ), следующую формулу можно использовать для извлечения второй строки в таблице и преобразования столбца в число:

Value( Index( UOArray, 2 ) )

Если нетипизированный объект был сначала преобразован в Table(), вторая строка в результирующей одностолбцовой таблице представляет собой столбец Value, содержащий нетипизированный объект:

Value( Index( Table( UOArray ), 2 ).Value )

Для массива записей, имеющих текстовый столбец с именемField, действует та же логика. Доступ к нетипизированному объекту может осуществляться напрямую или с помощью функции Table(), результатом которой является одностолбцовая таблица нетипизированного объекта.

Доступ к столбцу Field может осуществляться напрямую из нетипизированного объекта, возвращаемого функцией Index().

Text( Index( UORecordArray, 2 ).Field )

При использовании функции Table() сначала извлеките столбец Value одностолбцовой таблицы, чтобы получить нетипизированный объект, а затем получите доступ к столбцу Field:

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Чтобы преобразовать массив записей в типизированную таблицу, вы можете использовать функцию ForAll() и преобразовывать каждое отдельное поле.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Если нетипизированный объект сначала преобразуется в таблицу, опять же, результирующая одностолбцовая таблица нетипизированного объекта потребует использования столбца Value для получения полей.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )