Microsoft Dataverse и улучшение работы с источником данных

Обзор

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

Нативная Dataverse

Если вы создали приложение на основе холста с соединителем Dataverse или Dynamics 365 Connector до ноября 2019 года, тогда у вас может не быть преимуществ от использования текущего собственного соединения для Dataverse.

Если вы создали свое приложение до ноября 2019 года и не используете нативное подключение Dataverse, то в настройках на вкладке "Предстоящие функции" на вкладке "Устаревшие" вы найдете параметр Улучшение взаимодействия с источниками данных и представлениями Microsoft Dataverse, а также Реляционные данные, наборы параметров и другие новые функции для Microsoft Dataverse.

Как выполнить обновление?

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

Параметр Реляционные данные, наборы параметров и другие новые функции для Microsoft Dataverse выключен

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

Если нет Реляционные данные, наборы параметров и другие новые функции для Microsoft Dataverse в Общие параметры или это уже Включено, пропустите следующие шаги и перейдите в следующий раздел.

  • Шаг 1. Включите функцию Использовать отображаемые имена:

    1. Включите функцию Использовать отображаемые имена.
    2. Подождите, пока монитор работоспособности завершит анализ вашего приложения.
    3. Сохраните, закройте и повторно откройте ваше приложение.
    4. Устраните все ошибки формул.
    5. Сохраните, закройте и повторно откройте ваше приложение.

    Возможные ошибки и предложения:

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

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

    Используйте квадратную скобку с символом @, чтобы указать глобальную область, чтобы она разрешалась на таблицу, например, [@tableName].

  • Шаг 2. Установите для параметров Реляционные данные, наборы параметров и другие новые функции для Microsoft Dataverse и Использовать типы данных GUID вместо строк значение Вкл.:

    1. Установите для функции Реляционные данные, наборы параметров и другие новые функции для Microsoft Dataverse значение Вкл.:
    2. Установите для функции Использовать типы данных GUID вместо строк значение Вкл..
    3. Подождите, пока монитор работоспособности завершит анализ вашего приложения.
    4. Устраните все ошибки формул.
    5. Сохраните, закройте и повторно откройте ваше приложение.

    Возможные ошибки и предложения:

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

    • Значения выбора: если вы используете поле выбора с текстовым идентификатором для значения выбора, используйте нотацию точек вместо ссылки на значение выбора. Например, измените Patch(Accounts, OptionSet1 = “12345”) на Patch(Accounts, OptionSet.Item1), где Item1 соответствует значению 12345.
      Больше информации: Подробные примеры.
    • Идентификаторы GUID: если вы используете статическую строку GUID, такую как 015e45e1044e49f388115be07f2ee116, преобразуйте ее в функцию, которая возвращает объект GUID; например GUID(“015e45e1044e49f388115be07f2ee116”).
    • Подстановки: если вы используете функции подстановки, чтобы получить значения подстановки первого уровня, такие как, Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), рассмотрите возможность использования ThisItem.PrimaryContacts (где PrimaryContacts — это имя таблицы) вместо этого.

Параметр Улучшение взаимодействия с источниками данных и представлениями Microsoft Dataverse выключен

Используйте следующую инструкцию, чтобы установите для функции Улучшение взаимодействия с источниками данных и представлениями Microsoft Dataverse значение Вкл.:

  1. Удалите свои существующие подключения к источникам данных Dataverse.
  2. Включите функцию Улучшение взаимодействия с источниками данных и представлениями Microsoft Dataverse.
  3. Добавьте подключение Dataverse с использованием нового взаимодействия выбора источника данных.
  4. Сохраните свое приложение.

Примечание

Если ваше приложение очень большое, добавление соединений источников данных обратно может занять некоторое время. Не закрывайте приложение во время этого процесса.

Преобразование приложений на основе холста с помощью соединителя Dynamics 365 Connector

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

  1. Убедитесь, что для функции Улучшение взаимодействия с источниками данных и представлениями Microsoft Dataverse задано значение Вкл..

  2. Удалите свои существующие подключения к источникам данных Dynamics 365.

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

    Примечание

    • Если у вас есть связи с другими средами (кроме текущей), выберите категорию Таблица, затем пункт Дополнительно (...) для изменения среды. Затем можно выбрать таблицу из другой среды для добавления в приложение. Соединения между клиентами не работают с улучшенным собственным соединителем. Вам нужно будет использовать интеграцию данных для доступа к данным между клиентами.
    • Вам необходимо выполнить одно из следующих требований, чтобы увидеть среду, в которую вы хотите добавить соединение:
      • Вы владелец приложения или вам предоставлен общий доступ к приложению его совладельцем.
      • Вы являетесь участником как минимум одной из следующих ролей безопасности: Администратор среды, Создатель среды или Системный администратор. Дополнительные сведения о ролях безопасности в среде см. в разделе Настройка безопасности пользователей для ресурсов в среде.
  4. Сохраните свое приложение.

Возможные ошибки и предложения:

Ошибки возможны при конвертировании, если вы не используете отображаемые имена, если используете строки GUID или если используете набор выбор.

  • Если имя элемента управления конфликтует, измените имя элемента управления на другое и уникальное.
  • Для любых конфликтов отображаемых имен таблицы или поля можно увидеть формулу, которая ожидает таблицу, но разрешается на более локальное имя поля. Используйте квадратную скобку с символом @, чтобы указать глобальную область, чтобы она разрешалась на таблицу, например, [@tableName].
  • Значения выбора: если вы используете поле выбора с текстовым идентификатором для значения выбора, используйте нотацию точек вместо ссылки на значение выбора. Например, измените Patch(Accounts, OptionSet1 = “12345”) на Patch(Accounts, OptionSet.Item1), где Item1 соответствует значению 12345.
    Больше информации: Подробные примеры.
  • Идентификаторы GUID: если вы используете статическую строку GUID, такую как 015e45e1044e49f388115be07f2ee116, преобразуйте ее в функцию, которая возвращает объект GUID; например GUID(“015e45e1044e49f388115be07f2ee116”).
  • Подстановки: если вы используете функции подстановки, чтобы получить значения подстановки первого уровня, такие как, Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), рассмотрите возможность использования ThisItem.PrimaryContacts (где PrimaryContacts — это имя таблицы) вместо этого.
  • Для любых полиморфных ссылок см. раздел "Подробные примеры" ниже.

Подробные примеры

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

Наборы выбора

Отдельные поля _myfield и _myfield_label были использованы для набора выбора ранее. Теперь есть один myfield который можно использовать как для сравнений, не зависящих от языкового стандарта, так и для получения метки, зависящей от языкового стандарта.

Удаление и добавление карточек данных набора выбора

Рекомендуется удалить существующие карточки данных и добавить их обратно для работы с вашим набором выбора. Например, если вы работаете с таблицей учетных записей и набором выбора "Категория", вы увидите, что свойство DataField карточки данных было установлено на _accountcategorycode_label. В списке полей вы можете увидеть, что карточка данных имеет тип String:

OptionSet с именем в старом стиле.

С новой функцией Улучшение взаимодействия с источниками данных и представлениями Microsoft Dataverse вы больше не видите _accountcategorycode_label. Оно заменено accountcategorycode. Ваша карточка теперь помечена как пользовательская, и вы увидите ошибки. Удалите старую карточку данных и добавьте обратно Набор выбора. Новая карточка данных теперь учитывает Набор выбора.

OptionSet с новым именем стиля.

Редактирование выражений фильтра набора выбора для использования нового синтаксиса

Ранее, если вы хотели использовать значение набора выбора в выражении фильтра, необходимо было использовать поле Значение. Например:

Filter(Account,'Category Value' = "1")

Вам потребуется отредактировать эту формулу. Текстовый идентификатор набора выбора больше не используется для значения. Это выражение следует обновить до:

Filter(Account, Category= ‘Category (Accounts)’.’Preferred Customer’)

«Category(Accounts)» — это имя перечисления, используемое в поле категории таблицы учетных записей. Это локальный набор выбора. Вы можете прочитать больше о локальных и глобальных наборах выборах здесь: Глобальные наборы выбора.

Редактирование операторов Patch для использования нового синтаксиса

Ниже приводится пример более раннего оператора Patch для набора выбора:

Patch( Accounts, First(Accounts), { ‘Category Value’: 1 } ) )

Вам необходимо обновить свои операторы, чтобы следовать этой форме:

Patch( Accounts, First(Accounts), { Category: ‘Category (Accounts)’.’Preferred Customer’ } )

Устранение неоднозначности набора выбора

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

Filter(Accounts, 'Category Code' = [@’Category Code’].'Preferred Customer')

Два параметра

Удаление и добавление карточек данных "Да/Нет"

Удалите существующие карточки данных и добавить их обратно для работы с вашим набором "Да/Нет". Типы данных ранее распознавались как простые логические значения, такие как true/on и false/off без меток:

Да/Нет — старый стиль.

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

Да/Нет — новый стиль.

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

Toggle1.Default = ThisItem.’Do not allow Bulk Emails’
Toggle1.TrueText = ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’
Toggle1.FalseText = ‘Do not allow Bulk Emails (Accounts)’.Allow
DataCard.Value = If( Toggle1.Value,
    ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’,
    ‘Do not allow Bulk Emails (Accounts)’.Allow )

Выключатель с двумя параметрами.

Уточнение операторов Patch двух параметров

Использование функции Patch с двумя параметрами должна работать "как есть". Она поддерживает прямое использование true и false, аналогично типу Boolean. Единственное отличие состоит в том, что если вы ранее поместили значение в элемент управления Подпись, который показывал true и false, теперь вместо него будут отображаться метки двух параметров.

Полиморфные подстановки

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

Доступ, установка и фильтрация в поле "Владелец" записи

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

Полиморфное поле "Владелец".

Полиморфные с функциями Filter и Patch

Ссылки на запись могут использоваться как полная запись:

Filter( Accounts, Owner = First( Teams ) )
Patch( Accounts, First( Accounts ), { Owner: First( Users ) })

Поскольку ссылка может указывать на различные таблицы, вы должны быть конкретными. Вы не можете использовать ThisItem.Owner.Name, так как поле имен в таблице Рабочая группа называется Название рабочей группы, а поле имени в таблице Пользователь называется Полное имя. Power Apps не знает, к какому типу подстановки вы обращаетесь, пока вы не запустите приложение.

Чтобы устранить эту проблему:

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

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

  • IsType — проверяет, имеет ли ссылка на запись определенный тип таблицы.
  • AsType — преобразует ссылку на запись в определенный тип таблицы.

С помощью этих функций можно написать формулу, отображающую имя владельца, взятое из двух по-разному названных полей, на основе типа таблицы "Владелец":

If( IsType( ThisItem.Owner,  [@Teams]), 
    AsType( ThisItem.Owner, [@Teams]).'Team Name', 
    AsType( ThisItem.Owner, [@Users]).'Full Name' )

Коллекция с As Type.

Глобальный оператор устранения неоднозначности для [@Teams] и [@Users] используется для обеспечения того, чтобы вы ссылаетесь на глобальный тип таблицы. Хотя в этом случае это не обязательно, рекомендуется всегда быть точным. Отношения "один-ко-многим" часто конфликтует в области записей коллекции, и эта практика избегает этой путаницы.

Доступ и задание поля имени компании (тип данных клиента) таблицы контактов

Поле подстановки "Клиент" является еще одной полиморфной подстановкой, которая похожа на поле "Владелец". У каждой таблицы может быть только одно поле "Владелец". Но таблица может включать ноль, одно или несколько полей подстановки клиентов. Системная таблица "Контакты" включает в себя поле "Имя компании", который является полем подстановки "Клиент". Подробнее см. в разделе Отображение полей клиента.

Доступ и задание таблицы "В отношении" таблицы действий, таких как факсы, телефонные звонки, сообщения электронной почты

Полиморфные подстановки не ограничивается организациями и контактами. Список таблиц является расширяемым с пользовательскими таблицами. Например, таблица "Факсы" имеет полиморфное поле подстановки "В отношении", который может ссылаться на таблицы "Учетные записи", "Контакты" и другие таблицы. Если у вас есть коллекция с источником данных, установленным на Факсы, вы можете использовать следующую формулу для отображения имени, связанного с полем подстановки "В отношении".

If( IsBlank( ThisItem.Regarding ), "",
   IsType( ThisItem.Regarding, [@Accounts] ),
       "Account: " & AsType( ThisItem.Regarding, [@Accounts] ).'Account Name',
   IsType( ThisItem.Regarding, [@Contacts] ),
       "Contacts: " & AsType( ThisItem.Regarding, [@Contacts] ).'Full Name',
   "" )

Коллекция с полем "В отношении".

Подробные сведения см. в разделе Поля подстановки "В отношении" и Отношения "В отношении".

Доступ к списку всех действий для записи

В Dataverse таблицы, такие как "Факсы", "Задачи", "Адреса электронной почты", "Заметки", "Звонки", "Письма" и "Чаты" обозначены как действия. Вы также можете создавать свои собственные пользовательские таблицы действий.

Можно показать действия определенного типа (например, факсы или налоги) или все действия, связанные с таблицей, такой как учетная запись. Добавьте таблицу "Действия" и другие отдельные таблицы, данные которых планируется отображать в приложении на основе холста.

Каждый раз, когда вы добавляете запись (например, таблицу "Задачи"), создается запись в таблице "Действия" с полями, общими во всех таблицах действий. Ознакомьтесь с таблицей действий для получения подробной информации.

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

Полиморфные действия.

Записи отображаются из таблицы "Действие". Но вы все еще можете использовать функцию IsType, чтобы определить, каким видом действий они являются. Опять же, прежде чем использовать IsType с типом таблицы, вы должны добавить необходимый источник данных.

Используя эту формулу, вы можете показать тип записи в элементе управления "Метка" в коллекции:

If( IsType( ThisItem, [@Faxes] ), "Fax",
   IsType( ThisItem, [@'Phone Calls'] ), "Phone Call",
   IsType( ThisItem, [@'Email Messages'] ), "Email Message",
   IsType( ThisItem, [@Chats] ), "Chat",
   "Unknown")

Новый Polymorphic-IsType.

Доступ к списку всех заметок для записи

При создании таблицы можно включить вложения. Если вы установите флажок для включения вложений, вы создадите отношение "В отношении" с таблицей "Заметки", как показано на рисунке для таблицы "Учетные записи":

Поле заметок.

Фильтрация

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

First( Accounts ).Notes
PATCH

Вы не можете задать поле заметок в таблице с помощью функции Patch. Чтобы добавить запись в таблицу заметок, можно использовать функцию Relate. Сначала создайте заметку, как в этом примере:

Relate( ThisItem.Notes, Patch( Notes, Defaults( Notes ), { Title: "A new note", isdocument:'Is Document (Notes)'.No } ) )

Дальнейшие шаги

См. также

Что такое Dataverse?

Примечание

Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).

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