Функции Relate и Unrelate
Применимо к: Приложениям Canvas Приложениям, управляемым моделями
Связывание и отмена связывания записей двух таблиц с использованием отношения "один ко многим" или "многие ко многим".
Description
Функция Relate связывает две записи с использованием связи "один ко многим" или "многие ко многим" в Microsoft Dataverse. Функция Unrelate полностью обращает этот процесс и удаляет связь.
Для отношений один-ко-многим таблица "Много" содержит поле внешнего ключа, которое указывает на запись таблицы "Одна". Relate устанавливает это поле так, чтобы оно указывало на определенную запись таблицы One, тогда как Unrelate устанавливает это поле в пустое. Если поле уже установлено, когда вызывается функция Relate, существующая ссылка теряется в пользу новой ссылки. Вы также можете установить это поле, используя функцию Patch или элемент управления Edit form; вам не нужно использовать функцию Relate.
Для отношений "многие ко многим" система, которая связывает записи, поддерживает скрытую таблицу соединений. Вы не можете получить доступ к этой таблице соединений напрямую; ее можно прочитать только через проекцию "один ко многим", а установить только через функции Relate и Unrelate. Ни одна из связанных таблиц не имеет внешнего ключа.
Данные для таблицы, которые вы указываете в первом аргументе, будут обновлены, чтобы отразить изменение, но данные для таблицы, которые вы указываете во втором аргументе, не будут. Эти данные должны быть обновлены вручную с помощью функции Refresh, чтобы показать результат операции.
Эти функции никогда не создают и не удаляют запись. Они только связывают две записи, которые уже существуют, или отменяют такую связь.
Эти функции можно использовать только в формулах поведения.
Заметка
Эти функции являются частью функции предварительной версии, и их поведение доступно только тогда, когда включена функция Реляционные данные, наборы параметров и другие новые функции для CDS. Это настройка уровня приложения, которая по умолчанию включена для новых приложений. Чтобы найти этот переключатель функции, выберите Настройки, а затем выберите Предстоящие функции. Ваш отзыв очень важен для нас — сообщите нам свое мнение на форумах сообщества Power Apps.
Синтаксис
Связать( Table1RelatedTable, Table2Record )
- Таблица1СвязаннаяТаблица - Обязательно. Для записи из Table1 таблица записей Table2, связанных через отношение "один-ко-многим" или "многие-ко-многим".
- Table2Record - Обязательно. Запись Table2 для добавления к отношению.
Unrelation( Таблица1СвязаннаяТаблица, Таблица2Запись )
- Таблица1СвязаннаяТаблица - Обязательно. Для записи из Table1 таблица записей Table2, связанных через отношение "один-ко-многим" или "многие-ко-многим".
- Table2Record - Обязательно. Запись Table2 для удаления из отношения.
Примеры
Рассмотрим таблицу Продукты со следующими отношениями, как отображается в средстве просмотра таблиц портала Power Apps:
Отображаемое имя отношения | Связанная таблица | Тип отношения |
---|---|---|
Резервирование продукта | Резервирование | Один-ко-многим |
Продукт ↔ Контакты | Контакт | Многие ко многим |
Продукты и Бронирования связаны отношением «один ко многим». Чтобы связать первую запись таблицы Резервирования с первой записью таблицы Продукты:
Relate( First( Products ).Reservations, First( Reservations ) )
Чтобы удалить связь между этими записями:
Unrelate( First( Products ).Reservations, First( Reservations ) )
Мы ни разу не создавали и не удаляли какую-либо запись, только отношение между записями было изменено.
Продукты и Контакты связаны посредством отношения «многие ко многим». Чтобы связать первую запись таблицы Контакты с первой записью таблицы Продукты:
Relate( First( Products ).Contacts, First( Contacts ) )
Поскольку отношения "многие ко многим" симметричны, мы могли бы также сделать это в обратном направлении:
Relate( First( Contacts ).Products, First( Products ) )
Чтобы удалить связь между этими записями:
Unrelate( First( Products ).Contacts, First( Contacts ) )
или:
Unrelate( First( Contacts ).Products, First( Products ) )
Приведенные ниже пошаговые инструкции выполняют именно эти операции с этими таблицами с помощью приложения с элементами управления Gallery и Combo box для выбора затрагиваемых записей.
Эти примеры зависят от примеров данных, устанавливаемых в вашей среде. Или создайте пробную среду, включающую образцы данных, или добавьте образцы данных в существующую среду.
Один-ко-многим
Функция связать
Сначала вы создадите простое приложение для просмотра и переназначения резервирований, связанных с продуктом.
Создайте планшетное приложение с нуля.
На вкладке Вид выберите Источники данных.
На панели Данные выберите Добавить данные> выберите Продукты.
Таблица "Продукты" является частью демонстрационных данных, загруженных выше.На вкладке Вставка добавьте пустой вертикальный элемент управления Gallery.
Убедитесь, что только что добавленный элемент управления называется Gallery1, затем переместите и измените его размер, чтобы заполнить левую часть экрана.
На вкладке Свойства задайте для свойства Items элемента управления Gallery1 значение Products, а для свойства Макет — значение Изображение и заголовок.
В коллекции Gallery1 убедитесь, что элемент управления Label имеет имя Title1, затем задайте для его свойства Text значение ThisItem.Name.
Выберите экран, чтобы не вставлять следующий элемент в Gallery1. Добавьте второй пустой вертикальный элемент управления Gallery и убедитесь, что он называется Gallery2.
Gallery2 покажет бронирования для любого продукта, выбранного пользователем в Gallery1.
Переместить и изменить размер коллекции Gallery2, чтобы заполнить верхний правый квадрант экрана.
(Необязательно) Добавьте синий элемент управления Label над коллекцией Gallery2, как показано на следующем рисунке.
В строке формул установите для свойства Items коллекции Gallery2 значение Gallery1.Selected.Reservations.
На панели свойств установите для свойства Макет коллекции Gallery2 значение Плитка.
В коллекции Gallery2 добавьте элемент управления Combo box, убедитесь, что он называется ComboBox1, затем переместите и измените его размер, чтобы не блокировать другие элементы управления в коллекции Gallery2.
На вкладке Свойства задайте для свойства Items поля со списком ComboBox1 значение Products.
Прокрутите вниз на вкладке Свойства и установите для свойства Allow multiple selection элемента управления ComboBox1 значение Выкл.
В строке формул установите для свойства DefaultSelectedItems элемента управления ComboBox1 значение ThisItem.'Product Reservation'.
В коллекции Gallery2 задайте для свойства OnSelect элемента управления NextArrow2 следующую формулу:
Relate( ComboBox1.Selected.Reservations, ThisItem )
Когда пользователь выбирает этот значок, текущее резервирование изменяется на продукт, выбранный пользователем в коллекции ComboBox1.
Нажмите F5, чтобы протестировать приложение в режиме предварительного просмотра.
С помощью этого приложения пользователь может перемещать резервирование с одного продукта на другой. Для резервирования по одному товару пользователь может выбрать другой товар в поле со списком ComboBox1, затем выбрать стрелку NextArrow2, чтобы изменить это резервирование.
Функция Unrelation
На этом этапе вы можете перемещать отношения из одной записи в другую, но вы не можете удалить отношения вообще. Вы можете использовать функцию Unrelate для отключения записи резервирования от любого продукта.
На вкладке Вид выберите Источники данных.
На панели Данные выберите Добавить источник данных>Microsoft Dataverse>Reservations>Подключить.
В коллекции Gallery2 задайте для формулы OnSelect элемента управления NextArrow2 следующую формулу:
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
Скопируйте Gallery2 в буфер обмена, выделив его и нажав CTRL-C.
Вставьте дубликат Gallery2 на тот же экран, нажав Ctrl-V, затем переместите его в нижний правый квадрант экрана.
(Необязательно.) Если вы добавили метку над Gallery2, повторите два предыдущих шага для этой метки.
Убедитесь, что дубликат Gallery2называется Gallery2_1, затем установить для его свойства Items следующую формулу:
Filter( Reservations, IsBlank( 'Product Reservation' ) )
Появляется предупреждение о делегировании, но это не имеет значения при небольшом количестве данных в этом примере.
С этими изменениями пользователи могут отменить выбор в ComboBox1 для контакта, если этот человек не зарезервировал продукт. Контакты, которые не зарезервировали продукт, появляются в Gallery2_1, где пользователи могут назначить каждый контакт продукту.
Многие ко многим
Создать отношение "многие ко многим"
Демонстрационные данные не включают отношения "многие-ко-многим", но вы создадите его между таблицей "Продукты" и таблицей "Контакты". Пользователи могут связать каждый продукт с более чем одним контактом, а каждый контакт — с более чем одним продуктом.
С этой страницы выберите Данные в левой панели навигации, затем выберите Таблицы.
Измените фильтр таблиц, чтобы включить все таблицы.
По умолчанию демонстрационные таблицы не отображаются.
Прокрутите вниз, откройте таблицу Продукт и выберите Отношения.
Выберите Добавить отношение>Многие ко многим.
Выберите таблицу Контакт для отношения.
Выберите Готово>Сохранить таблицу.
Связывание контактов с одним или несколькими продуктами и отмена такой связи
Вы создадите другое приложение, похожее на то, которое вы создали ранее в этой теме, но новое приложение предложит отношения "многие ко многим". Каждый контакт сможет зарезервировать несколько продуктов вместо одного.
В пустом приложении для планшетов создайте Gallery1, как описывается в первой процедуре в этой теме.
Добавьте еще один пустой вертикальный элемент управления Gallery, убедитесь, что он назван Gallery2, а затем переместите его в верхний правый угол экрана.
Позже в этой теме вы добавите элемент управления Combo box под Gallery2.
В строке формул установите для свойства Items коллекции Gallery2 значение Gallery1.Selected.Contacts.
На вкладке Свойства задайте для параметра Макет значение Изображение и заголовок.
В коллекции Gallery2 убедитесь, что элемент управления Label имеет имя Title2, затем задайте для его свойства Text значение ThisItem.'Full Name'.
Никакого текста в этом элементе управления не появится, пока вы не закончите эту процедуру и не назначите контакт для продукта.
Удалите NextArrow2 вставьте значок Отмена и убедитесь, что он назван icon1.
Задайте для свойства OnSelect значка Отмена эту формулу:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
На вкладке Вид выберите Источники данных.
На панели Данные выберите Добавить источник данных>Microsoft Dataverse>Контакты>Подключить.
Под Gallery2 добавьте элемент управления Combo box, убедитесь, что он назван ComboBox1, затем установите для его свойства Items значение Контакты.
На вкладке Свойства задайте для параметра Разрешить множественный выбор значение Выкл.
Добавьте кнопку Добавить и задайте следующую формулу в качестве значения свойства OnSelect:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
С помощью этого приложения пользователи теперь могут свободно связывать и отменять связь набора контактов с каждым продуктом.
Чтобы добавить контакт в продукт, выберите контакт в поле со списком в нижней части экрана, затем выберите значок Добавить.
Чтобы удалить контакт из продукта, выберите значок Отмена для этого контакта.
В отличие от отношения "один ко многим", отношение "многие ко многим" позволяет пользователям связывать один и тот же контакт с несколькими продуктами.
В обратном порядке: связывайте и отменяйте связь продуктов с несколькими контактами
Отношения многие-ко-многим симметричны. Вы можете расширить пример, чтобы добавить продукты в контакт, а затем переключаться между двумя экранами, чтобы показать, как отношения отображаются в любом направлении.
Установите для свойства OnVisible элемента Screen1 функцию Refresh( Products ).
При обновлении отношения "один-ко-многим" или "многие-ко-многим" обновляются только данные таблицы из первого аргумента вызова функции Relate или Unrelate. Второй должен быть обновлен вручную, если вы хотите переключаться между экранами этого приложения.
Создайте дубликат Screen1.
Дубликат будет назван Screen1_1, и будет образовывать базис для просмотра отношений со стороны контактов.
Чтобы создать обратный вид, измените следующие формулы в элементах управления Screen1_1:
- Screen1_1.OnVisible =
Refresh( Contacts )
- Gallery1_1.Items =
Contacts
- Title1_1.Text =
ThisItem.'Full Name'
- Label1_1.Text =
"Selected Contact Products"
- Gallery2_1.Items =
Gallery1_1.Selected.Products
- Title2_1.Text =
ThisItem.Name
- Icon1_1.OnSelect =
Unrelate( Gallery1_1.Selected.Products, ThisItem )
- ComboBox1_1.Items =
Products
- Icon2_1.OnSelect =
Relate( Gallery1_1.Selected.Products, ComboBox1_1.Selected )
Результат будет очень похож на предыдущий экран, но будет зависеть от отношения со стороны Контакты.
- Screen1_1.OnVisible =
Вставьте значок Стрелки вверх-вниз и установите для его свойства OnSelect функцию Navigate( Screen1, None ). Сделайте то же самое на экране Screen1 с формулой Navigate( Screen1_1, None ).
На этом новом экране пользователи могут добавить контакт к продукту, а затем перейти к просмотру контактов и просмотреть связанный продукт. Отношения симметричны и являются общими между двумя экранами.