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


Функции AsType и IsType

Применимо к: приложениям на основе холста приложениям на основе модели Power Pages интерфейс командной строки Power Platform CLI

Проверяет, является ли ссылка на запись определенным типом таблицы (IsType) и рассматривает ссылку как этот тип (AsType).

Заметка

Команды PAC CLI pac power-fx не поддерживают IsType.

Description

Функции AsType и IsType можно использовать для преобразования ссылок на записи (например, полиморфных подстановок в Dataverse) и нетипизированных объектов в типизированные объекты, которые можно использовать напрямую.

Ссылки на запись

Ознакомьтесь с разделом Общие сведения о ссылках на записи и полиморфных подстановках для более широкого введения и более подробной информации.

Поле подстановки обычно ссылается на записи в определенной таблице. Поскольку тип таблицы хорошо установлен, доступ к полям подстановки возможен с помощью простой точечной нотации. Например, First( Учетные записи ).'Основной контакт'.'Полное имя' переходит из таблицы Учетные записи к записи Основной контакт в таблице Контакты и извлекает поле Полное имя.

Microsoft Dataverse также поддерживает поля полиморфной подстановки, которые могут ссылаться на записи из набора таблиц, как в этих примерах.

Поле поиска Может ссылаться на
Ответственное лицо Пользователи или Рабочие группы
Клиент Организации или Контакты
В отношении Организации, Контакты, Статьи базы знаний и т. д.

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

Функция IsType проверяет, ссылается ли ссылка на запись на определенный тип таблицы. Функция возвращает логическое значение TRUE или FALSE.

Функция AsType рассматривает ссылку на запись как определенный тип таблицы, что также называется приведением типов. Результат можно использовать как запись таблицы и снова использовать нотацию Запись.Поле для доступа ко всем полям этой записи. Ошибка возникает, если ссылка не имеет определенный тип.

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

If( IsType( First( Accounts ).Owner, Users ),
    AsType( First( Accounts ).Owner, Users ).'Full Name',
    AsType( First( Accounts ).Owner, Teams ).'Team Name'
)

Эти функции нужны только при обращении к полям ссылки на запись. Например, вы можете использовать ссылки на записи в функции Filter без функций IsType или AsType:

Filter( Accounts, Owner = First( Users ) )

Точно так же вы можете использовать ссылки на записи с функцией Patch:

Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )

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

If( IsType( ThisItem.'Company Name', Accounts ),
    AsType( ThisItem.'Company Name', Accounts ).'Account Name',
    AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)

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

Если ссылка на запись пустая, функция IsType возвращает FALSE, а функция AsType возвращается пусто. Все поля пустой записи также будут пустыми.

Нетипизированные объекты

Внимание!

Нетипизированный объект из веб-API или [функция ParseJSON] должна быть преобразована в типизированный объект, прежде чем его можно будет использовать в Power Fx. Это можно сделать следующим образом:

  1. Неявно введите поле в той точке, где оно используется. Например, объект преобразуется в число, если он используется с оператором +, если его можно преобразовать в число. Этот параметр может приводить к непредвиденным преобразованиям и не может преобразовывать записи и таблицы в целом.
  2. Явно задайте тип каждого поля по отдельности с помощью функций типов Decimal, Text, DateTime, GUID и других функций конструктора типов. Это наиболее инвазивно для ваших формул, так как каждое поле должно быть выполнено отдельно.
  3. Явно задайте тип JSON со вторым аргументом функции ParseJSON. Это простой вариант, который позволяет избежать необходимости в нетипизированном объекте.
  4. Явным образом задайте тип нетипизированного объекта с помощью функции AsType. Вы также можете перед попыткой преобразования протестировать тип с помощью функции IsType.

Синтаксис

AsType( RecordReference, TableType )

  • RecordReference — обязательный аргумент. Ссылка на запись, часто поле подстановки, которое может ссылаться на запись в любой из нескольких таблиц.
  • TableType — обязательно. Конкретная таблица, на которую должен быть приведен тип записи.

AsType( UntypedObject, TypeSpecification )

  • UntypedObject — обязательный аргумент. Ссылка на запись, часто поле подстановки, которое может ссылаться на запись в любой из нескольких таблиц.
  • TypeSpecification — обязательный аргумент. Имя типа или спецификация типа, определенная с помощью функции Type.

IsType( RecordReference, TableType )

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

IsType( UntypedObject, TypeSpecification )

  • UntypedObject — обязательный аргумент. Ссылка на запись, часто поле подстановки, которое может ссылаться на запись в любой из нескольких таблиц.
  • TypeSpecification — обязательный аргумент. Имя типа или спецификация типа, определенная с помощью функции Type.

Примеры

Ссылки на запись

Раздел Общие сведения о ссылках на записи и полиморфных подстановках содержит обширные примеры.

  1. Создайте пустое приложение на основе холста для планшетов.

  2. В левой области выберите Данные>Добавить данные. А затем добавьте таблицы Учетные записи и Контакты.

    Пустое приложение с двумя источниками данных: организации и контакты.

  3. В левой области выберите + (Вставить) >Макет>Пустая вертикальная коллекция.

    Вставьте элемент управления Gallery с пустым вертикальным макетом.

  4. Выберите Подключение к данным, затем выберите Контакты в качестве источника данных.

  5. Установите макет коллекции на Заголовок и подзаголовок.

    Откройте средство выбора макета на панели свойств.

    Установите макет

  6. На панели Данные откройте список Title1, затем выберите Полное имя.

    Установите значение заголовка.

  7. Выберите элемент управления метки Subtitle1.

    Установите значение подзаголовка.

  8. Задайте для свойства Text элемента Subtitle1 следующую формулу:

    If( IsBlank( ThisItem.'Company Name' ), "--",
        IsType( ThisItem.'Company Name', Accounts ),
            "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name',
        "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name'
    )
    

    Экран завершен, показывая организации и контакты, смешанные в коллекции.

    Подзаголовок в коллекции показывает эти значения:

    • "--", если 'Имя компании'пусто.
    • "Учетная запись: ", и затем поле Имя учетной записи из таблицы Учетные записи, если поле Название компании ссылается на учетную запись.
    • "Контакт: ", и затем поле Полное имя из таблицы Контакты, если поле Название компании ссылается на контакт.

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

Нетипизированные объекты

В следующих примерах показана простая запись JSON, интерпретируемая различными способами функциями ParseJSON, AsType и IsType в Pac CLI Power Fx REPL.

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

>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>

При использовании в числовом контексте поле неявно преобразуется в число.

>> 1 + rec.a
2

В качестве альтернативы в этом примере запись явно преобразуется в типизированную запись Power Fx со вторым аргументом в ParseJSON.

>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}

И еще одна альтернатива, в этом примере запись явно преобразуется в типизированную запись Power Fx с помощью функции AsType.

>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}

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

>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true