Функції зв’язку та скасування зв’язку
Застосовується до: програм Canvas Програм на основі моделі
Зв'язування і відв'язування записів двох таблиць через зв'язок «один-до-багатьох» або «багато-до-багатьох».
Опис
Функція Relate зв’язує два записи за допомогою зв’язку «один-до-багатьох» або «багато-до-багатьох» у Microsoft Dataverse. Функція Unrelate змінює процес і видаляє зв’язок.
Для зв'язків «один до багатьох » таблиця «Багато» має ключове поле, яке вказує на запис однієї таблиці. Параметр «Пов’язати » встановлює це поле так, щоб воно вказувало на конкретний запис однієї таблиці, тоді як «Скасувати » встановлює це поле як пусте. Якщо поле вже встановлене під час виклику функції Relate, наявний зв’язок буде втрачено на користь нового зв’язку. Це поле також можна встановити за допомогою функції Patch або елемента керування Редагування форми. Не потрібно використовувати функцію Relate.
Для зв’язків «багато-до-багатьох» система, яка зв’язує записи, зберігає приховану таблицю приєднання. До цієї таблиці приєднання неможливо отримати доступ безпосередньо; її можна прочитати лише за допомогою проекції «один-до-багатьох» і встановити за допомогою функцій Relate та Unrelate. Жодна пов'язана таблиця не має зовнішнього ключа.
Дані для таблиці, указаної в першому аргументі, буде оновлено, щоб відобразити зміни, але дані для таблиці, указаної в другому аргументі, ні. Ці дані потрібно оновити вручну за допомогою функції Refresh, щоб відобразити результат операції.
Ці функції ніколи не створюють і не видаляють записи. Вони лише зв’язують два наявні записи або скасовують зв’язок між ними.
Ці функції можна використовувати лише у формулах поведінки.
Нотатка
Ці функції є частиною функції попереднього перегляду, і їхня поведінка доступна, лише якщо увімкнуто реляційні дані, набори параметрів та інші нові функції для CDS. Це параметр на рівні програми, який увімкнуто за замовчуванням для нових програм. Щоб знайти перемикач для цієї функції, відкрийте меню Параметри, а потім Заплановані функції. Ваші відгуки дуже важливі для нас. Поділіться з нами своїми враженнями на форумах спільноти Power Apps.
Синтаксис
Rerel( Таблиця1Пов’язана Таблиця, Таблиця2Запис)
- Table1RelatedTable - Обов’язковий. Для запису Table1, таблиця з записів Table2, зв'язаних стосунками «один до багатьох» або б«багато до багатьох».
- Таблиця 2Запис - обов’язковий. Запис Table2, який потрібно додати до зв'язку.
Unrelate( Table1RelatedTable, Table2Record )
- Table1RelatedTable - Обов’язковий. Для запису Table1, таблиця з записів Table2, зв'язаних стосунками «один до багатьох» або б«багато до багатьох».
- Таблиця 2Запис - обов’язковий. Запис 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 ) )
Наведена покрокова інструкція виконує саме ці операції з цими таблицями за допомогою програми з елементами керування Галерея і Combo box для вибору залучених записів.
Ці приклади залежать від зразків даних, які інсталюються в середовище. Або створіть ознайомлювальне середовище, що включає зразки даних , або додайте зразки даних до наявного середовища.
Один до багатьох
Функція зв’язку
Спочатку ви створите просту програму для перегляду й перепризначення резервувань, пов’язаних із продуктом.
Створіть програму для планшета з пустого поля.
На вкладці Подання виберіть Джерела даних.
В області Дані натисніть Додати дані> виберіть Товари.
Таблиця «Товари» є частиною прикладу даних, завантажених вище.На вкладці Вставлення додайте пустий вертикальний елемент керування Галерея.
Переконайтеся, що щойно доданий елемент керування має ім’я Gallery1, а потім перемістіть його й змініть його розмір, щоб заповнити ліву частину екрана.
На вкладці Властивості установіть для властивості Елементи Gallery1 значення Продукти, а для макета – значення Заголовок і зображення.
У Gallery1 переконайтеся, що елемент керування Підпис має ім’я Title1, а потім установіть для його властивості Текст значення ThisItem.Name.
Виберіть екран, щоб уникнути вставлення наступного елемента в Gallery1. Додайте другий пустий вертикальний елемент керування Галерея, а потім переконайтеся, що він має ім’я Gallery2.
Галерея2 покаже бронювання для будь-якого товару, який користувач вибере в Галереї1.
Перемістіть і змініть розмір Gallery2, щоб заповнити правий верхній квадрант екрана.
(Необов’язково) Додайте блакитний елемент керування Підпис над Gallery2, як показано на рисунку нижче.
У рядку формул установіть для властивості Елементи Gallery2 значення Gallery1.Selected.Reservations.
На панелі властивостей установіть для макета Gallery2 значення Заголовок.
У Gallery2 додайте елемент керування Поле зі списком, назвіть його ComboBox1, а потім перемістіть і змініть його розмір, щоб уникнути блокування інших елементів керування у Gallery2.
На вкладці Властивості установіть для властивості Елементи ComboBox1 значення Продукти.
Прокрутіть униз на вкладці Властивості та встановіть для властивості Дозволити вибір кількох елементів ComboBox1 значення Вимкнуто.
У рядку формул установіть для властивості DefaultSelectedItems ComboBox1 значення ThisItem.'Product Reservation'.
У Gallery2 для властивості OnSelect NextArrow2 укажіть таку формулу:
Relate( ComboBox1.Selected.Reservations, ThisItem )
Коли користувач вибирає цю піктограму, поточне резервування змінюється на продукт, який користувач вибрав у ComboBox1.
Натисніть клавішу F5, щоб протестувати програму в режимі попереднього перегляду.
За допомогою цієї програми користувач може перемістити резервування з одного продукту на інший. Щоб зарезервувати один продукт, користувач може вибрати інший продукт у ComboBox1, а потім вибрати NextArrow2, щоб змінити це резервування.
Функція Unrelate
На цьому етапі можна перемістити зв’язок з одного запису на інший, проте його неможливо повністю видалити. Функцію Unrelate можна використовувати, щоб від’єднати запис резервування від будь-якого продукту.
На вкладці Подання виберіть Джерела даних.
В області Дані виберіть Додати джерело даних>Microsoft Dataverse>Резервування>Пов’язати.
У 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, а потім для його властивості Елементи вкажіть таку формулу:
Filter( Reservations, IsBlank( 'Product Reservation' ) )
Відобразиться попередження про делегування, але в цьому прикладі невелика кількість даних не має значення.
Після внесення цих змін користувачі можуть очистити вибір у ComboBox1 для контактної особи, якщо вона не зарезервувала продукт. Контактні особи, які не зарезервували продукт, відображаються в Gallery2_1, де користувачі можуть призначити продукт кожній контактній особі.
Багато-до-багатьох
Створення зв’язку «багато-до-багатьох»
Приклади даних не містять зв'язки «багато до багатьох», але буде створено зв'язок між таблицею «Продукти» та таблицею «Контактні особи». Користувачі можуть зв’язувати продукт із кількома контактними особами, контактну особу з кількома продуктами.
На цій сторінці, виберіть Дані у лівій панелі переходів і натисніть Таблиці.
Змініть фільтр таблиці, щоб він включав усі таблиці.
За замовчуванням приклади таблиць не відображаються.
Прокрутіть вниз, відкрийте таблицю Продукт і виберіть Зв'язки.
Виберіть Додати зв’язок>Багато-до-багатьох.
Виберіть таблицю «Контактна особа» для зав'язків.
Виберіть Готово>Зберегти таблицю.
Зв’язування контактних осіб і скасування зв’язку між ними за допомогою одного або кількох продуктів
Ви створите ще одну програму, схожу на створену раніше в цьому розділі, але нова програма буде пропонувати зв’язок «багато-до-багатьох». Кожна контактна особа зможе резервувати кілька продуктів, а не лише один.
У пустій програмі для планшетів створіть Gallery1 як першу процедуру в цьому розділі.
Додайте інший пустий вертикальний елемент керування Галерея, переконайтеся, що він має ім’я Gallery2, а потім перемістіть його в правий верхній кут екрана.
Потім у цьому розділі ви додасте елемент керування Поле зі списком під Gallery2.
У рядку формул установіть для властивості Елементи Gallery2 значення Gallery1.Selected.Contacts.
На вкладці Властивості для макета установіть значення Зображення та заголовок.
У Gallery2 переконайтеся, що елемент керування Підпис має ім’я Title2, а потім установіть для його властивості Текст значення ThisItem.'Full Name'.
У цьому елементі керування не відображатиметься текст, доки не буде завершено цю процедуру й призначено контактну особу для продукту.
Видаліть NextArrow2, вставте піктограму Скасувати й переконайтесь, що вона має ім’я icon1.
Для властивості OnSelect піктограми Скасувати вкажіть таку формулу:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
На вкладці Подання виберіть Джерела даних.
В області Дані виберіть Додати джерело даних>Microsoft Dataverse>Контактні особи>Пов’язати.
У Gallery2 додайте елемент керування Поле зі списком, переконайтеся, що він має ім’я ComboBox1, а потім установіть для властивості Елементи значення Контактні особи.
На вкладці Властивості установіть значення Вимкнуто для властивості Дозволити вибір кількох елементів.
Вставте піктограму Додати й для її властивості OnSelect укажіть таку формулу:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
За допомогою цієї програми користувачі можуть вільно зв’язувати набір контактних осіб із кожним продуктом і скасовувати такий зв’язок.
Щоб додати контактну особу до продукту, виберіть її в полі зі списком у нижній частині екрана, а потім виберіть піктограму Додати.
Щоб видалити контактну особу з продукту, виберіть піктограму Скасувати для цієї контактної особи.
На відміну від зв’язку «один-до-багатьох», зв’язок «багато-до-багатьох» дає користувачам змогу зв’язувати одну й ту саму контактну особу з кількома продуктами.
Навпаки: зв’язування та скасування зв’язування продуктів із кількома контактними особами
Зв’язки «багато-до-багатьох» є симетричними. Можна розширити приклад, додавши продукти до контактної особи, а потім перемикати їх між двома екранами, щоб показати, як зв’язок відображається з будь-якого напрямку.
Для властивості OnVisible Screen1 установіть значення Refresh( Products ).
У разі оновлення зв'язку «один-до-багатьох» або «багато до багатьох» оновлюється лише дані першої таблиці аргументів виклику «Зв'язок» або «Скасувати зв'язок». Другий аргумент слід оновити вручну, якщо потрібно перемикати екрани цієї програми.
Повтор 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 ).
Завдяки цьому новому екрану користувачі можуть додати контактну особу до продукту, а потім перейти до подання контактних осіб і бачити пов’язаний продукт. Зв’язки симетричні та є спільними для двох екранів.