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


AsType и IsType функции

Функция Применимо к
AsType Приложения На основе холста Приложения Copilot Studio, управляемые моделью приложения Power Platform CLI Dataverse, функции Power Pages
IsType Приложения На основе холста Приложения Copilot Studio , управляемые моделью, функции Dataverse функций Power Pages

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

Заметка

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

Description

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

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

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

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

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

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

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

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

Функция AsType обрабатывает ссылку на запись как определенный тип таблицы, который также называется приведением. Вы используете результат, как если бы это запись таблицы и используйте нотацию Record.Field для доступа ко всем полям этой записи. Если ссылка не имеет конкретного типа, возникает ошибка.

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

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

Эти функции требуются только в том случае, если вы обращаетесь к полям ссылки на запись. Например, вы используете ссылки на записи в функции фильтра без 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'
)

Для обеих функций укажите тип, используя имя источника данных, подключенного к таблице. Чтобы формула работала, добавьте источник данных в приложение для любых типов, которые необходимо проверить или привести. Например, добавьте таблицу Users в качестве источника данных, если вы хотите использовать 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( DynamicValue, TypeSpecification )

  • DynamicValue — обязательный. Динамическое значение из функции ParseJSON или вызова API.
  • TypeSpecification — обязательный аргумент. Спецификация типа или типа, определяемая функцией Type.

IsType( RecordReference, TableType )

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

IsType( DynamicValue, TypeSpecification )

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

Примеры

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

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

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

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

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

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

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

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

  5. Задайте для макета коллекции значение Title и подзаголовок.

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

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

  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 в Power Fx REPL Power Fx.

В этом первом примере сведения о типе не предоставляются ParseJSON, поэтому он возвращает динамическое значение.

>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Dynamic: 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