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


Функції Rerelation та Unrelate

Застосовується до: програм Canvas Програм на основі моделі

Зв'язування і відв'язування записів двох таблиць через зв'язок «один-до-багатьох» або «багато-до-багатьох».

Опис

Функція Relate зв’язує два записи за допомогою зв’язку «один-до-багатьох» або «багато-до-багатьох» у Microsoft Dataverse. Функція Unrelate змінює процес і видаляє зв’язок.

Для зв'язків «один до багатьох » таблиця «Багато» має ключове поле, яке вказує на запис однієї таблиці. Relate встановлює це поле так, щоб воно вказувало на конкретний запис однієї таблиці, тоді як Unrelate встановлює для поля значення пусто. Якщо поле вже встановлене під час виклику функції Relate, наявний зв’язок буде втрачено на користь нового зв’язку. Це поле також можна встановити за допомогою функції Patch або елемента керування Редагування форми. Не потрібно використовувати функцію Relate.

Для зв’язків «багато-до-багатьох» система, яка зв’язує записи, зберігає приховану таблицю приєднання. До цієї таблиці приєднання неможливо отримати доступ безпосередньо; її можна прочитати лише за допомогою проекції «один-до-багатьох» і встановити за допомогою функцій Relate та Unrelate. Жодна пов'язана таблиця не має зовнішнього ключа.

Дані для таблиці, указаної в першому аргументі, буде оновлено, щоб відобразити зміни, але дані для таблиці, указаної в другому аргументі, ні. Ці дані потрібно оновити вручну за допомогою функції Refresh, щоб відобразити результат операції.

Ці функції ніколи не створюють і не видаляють записи. Вони лише зв’язують два наявні записи або скасовують зв’язок між ними.

Ці функції можна використовувати лише у формулах поведінки.

Нотатка

Ці функції є частиною функції попереднього перегляду, і їхня поведінка доступна, лише якщо увімкнуто реляційні дані, набори параметрів та інші нові функції для CDS. Це параметр на рівні програми, який увімкнуто за замовчуванням для нових програм. Щоб знайти перемикач для цієї функції, відкрийте меню Параметри, а потім Заплановані функції. Ваші відгуки дуже важливі для нас. Поділіться з нами своїми враженнями на форумах спільноти Power Apps.

Синтаксис

Relate( Table1RelatedTable, Table2Record )

  • Table1RelatedTable – обов’язковий аргумент. Для запису Table1, таблиця з записів Table2, зв'язаних стосунками «один до багатьох» або б«багато до багатьох».
  • Table2Record – обов’язковий аргумент. Запис Table2, який потрібно додати до зв'язку.

Unrelate( Table1RelatedTable, Table2Record )

  • Table1RelatedTable – обов’язковий аргумент. Для запису 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 ) )

Наведена покрокова інструкція виконує саме ці операції з цими таблицями за допомогою програми з елементами керування Галерея і Combo box для вибору залучених записів.

Ці приклади залежать від зразків даних, які інсталюються в середовище. Створіть ознайомлювальне середовище зі зразками даних або додайте зразки даних до наявного середовища.

Один до багатьох

Функція Relate

Спочатку ви створите просту програму для перегляду й перепризначення резервувань, пов’язаних із продуктом.

  1. Створіть програму для планшета з пустого поля.

  2. На вкладці Подання виберіть Джерела даних.

  3. В області Дані натисніть Додати дані> виберіть Товари.
    Таблиця «Товари» є частиною прикладу даних, завантажених вище.

  4. На вкладці Вставлення додайте пустий вертикальний елемент керування Галерея.

  5. Переконайтеся, що щойно доданий елемент керування має ім’я Gallery1, а потім перемістіть його й змініть його розмір, щоб заповнити ліву частину екрана.

  6. На вкладці Властивості установіть для властивості ЕлементиGallery1 значення Продукти, а для макета – значення Заголовок і зображення.

    Настроювання галереї продуктів.

  7. У Gallery1 переконайтеся, що елемент керування Підпис має ім’я Title1, а потім установіть для його властивості Текст значення ThisItem.Name.

    Настроювання підпису в Gallery1.

  8. Виберіть екран, щоб уникнути вставлення наступного елемента в Gallery1. Додайте другий пустий вертикальний елемент керування Галерея, а потім переконайтеся, що він має ім’я Gallery2.

    У Gallery2 відображатимуться резервування для будь-якого продукту, який вибере користувач у Gallery1.

  9. Перемістіть і змініть розмір Gallery2, щоб заповнити правий верхній квадрант екрана.

  10. (Необов’язково) Додайте блакитний елемент керування Підпис над Gallery2, як показано на рисунку нижче.

  11. У рядку формул установіть для властивості ЕлементиGallery2 значення Gallery1.Selected.Reservations.

    Настроювання елементів Gallery2.

  12. На панелі властивостей установіть для макетаGallery2 значення Заголовок.

    Настроювання макета Gallery2.

  13. У Gallery2 додайте елемент керування Поле зі списком, назвіть його ComboBox1, а потім перемістіть і змініть його розмір, щоб уникнути блокування інших елементів керування у Gallery2.

  14. На вкладці Властивості установіть для властивості ЕлементиComboBox1 значення Продукти.

    Встановлення значення «Продукти» для властивості «Елементи».

  15. Прокрутіть униз на вкладці Властивості та встановіть для властивості Дозволити вибір кількох елементівComboBox1 значення Вимкнуто.

    Встановлення значення «Вимкнуто» для властивості «Дозволити вибір кількох елементів».

  16. У рядку формул установіть для властивості DefaultSelectedItemsComboBox1 значення ThisItem.'Product Reservation'.

    Установлення DefaultSelectedItems для ReserveCombo.

  17. У Gallery2 для властивості OnSelectNextArrow2 укажіть таку формулу:

    Relate( ComboBox1.Selected.Reservations, ThisItem )
    

    Коли користувач вибирає цю піктограму, поточне резервування змінюється на продукт, який користувач вибрав у ComboBox1.

    Настроювання NextArrow2.

  18. Натисніть клавішу F5, щоб протестувати програму в режимі попереднього перегляду.

За допомогою цієї програми користувач може перемістити резервування з одного продукту на інший. Щоб зарезервувати один продукт, користувач може вибрати інший продукт у ComboBox1, а потім вибрати NextArrow2, щоб змінити це резервування.

Демонстрація функції Relate у програмі «один-до-багатьох».

Функція Unrelate

На цьому етапі можна перемістити зв’язок з одного запису на інший, проте його неможливо повністю видалити. Функцію Unrelate можна використовувати, щоб від’єднати запис резервування від будь-якого продукту.

  1. На вкладці Подання виберіть Джерела даних.

  2. В області Дані виберіть Додати джерело даних>Microsoft Dataverse>Резервування>Пов’язати.

  3. У Gallery2 для властивості OnSelectNextArrow2 укажіть таку формулу:

    If( IsBlank( ComboBox1.Selected ),
        Unrelate( Gallery1.Selected.Reservations, ThisItem ),
        Relate( ComboBox1.Selected.Reservations, ThisItem )
    );
    Refresh( Reservations )
    

    Настроювання правої піктограми.

  4. Скопіюйте Gallery2 в буфер обміну, виділивши його й натиснувши клавіші Ctrl + C.

  5. Вставте повтор Gallery2 на той самий екран, натиснувши клавіші Ctrl + V, а потім перемістіть його в нижній правий квадрант екрана.

  6. (Необов’язково) Якщо підпис додано над Gallery2, повторіть два попередніх кроки для цього підпису.

  7. Переконайтеся, що повтор Gallery2 має ім’я Gallery2_1, а потім для його властивості Елементи вкажіть таку формулу:

    Filter( Reservations, IsBlank( 'Product Reservation' ) )
    

    Відобразиться попередження про делегування, але в цьому прикладі невелика кількість даних не має значення.

    Налаштування властивості «Елементи» Gallery2_1.

Після внесення цих змін користувачі можуть очистити вибір у ComboBox1 для контактної особи, якщо вона не зарезервувала продукт. Контактні особи, які не зарезервували продукт, відображаються в Gallery2_1, де користувачі можуть призначити продукт кожній контактній особі.

Демонстрація функцій Relate та Unrelate у програмі «один-до-багатьох».

Багато-до-багатьох

Створення зв’язку «багато-до-багатьох»

Приклади даних не містять зв'язки «багато до багатьох», але буде створено зв'язок між таблицею «Продукти» та таблицею «Контактні особи». Користувачі можуть зв’язувати продукт із кількома контактними особами, контактну особу з кількома продуктами.

  1. На цій сторінці, виберіть Дані у лівій панелі переходів і натисніть Таблиці.

    Відкрийте список таблиць.

  2. Змініть фільтр таблиці, щоб він включав усі таблиці.

    За замовчуванням приклади таблиць не відображаються.

    Видалити фільтр таблиці.

  3. Прокрутіть вниз, відкрийте таблицю Продукт і виберіть Зв'язки.

  4. Виберіть Додати зв’язок>Багато-до-багатьох.

  5. Виберіть таблицю «Контактна особа» для зав'язків.

  6. Виберіть Готово>Зберегти таблицю.

Зв’язування контактних осіб і скасування зв’язку між ними за допомогою одного або кількох продуктів

Ви створите ще одну програму, схожу на створену раніше в цьому розділі, але нова програма буде пропонувати зв’язок «багато-до-багатьох». Кожна контактна особа зможе резервувати кілька продуктів, а не лише один.

  1. У пустій програмі для планшетів створіть Gallery1 як першу процедуру в цьому розділі.

  2. Додайте інший пустий вертикальний елемент керування Галерея, переконайтеся, що він має ім’я Gallery2, а потім перемістіть його в правий верхній кут екрана.

    Потім у цьому розділі ви додасте елемент керування Поле зі списком під Gallery2.

  3. У рядку формул установіть для властивості ЕлементиGallery2 значення Gallery1.Selected.Contacts.

    Налаштування ContactsGallery – властивість Items.

  4. На вкладці Властивості для макета установіть значення Зображення та заголовок.

    Налаштування ContactsGallery – макет.

  5. У Gallery2 переконайтеся, що елемент керування Підпис має ім’я Title2, а потім установіть для його властивості Текст значення ThisItem.'Full Name'.

    У цьому елементі керування не відображатиметься текст, доки не буде завершено цю процедуру й призначено контактну особу для продукту.

    Відображення імені контактної особи.

  6. Видаліть NextArrow2, вставте піктограму Скасувати й переконайтесь, що вона має ім’я icon1.

  7. Для властивості OnSelect піктограми Скасувати вкажіть таку формулу:

    Unrelate( Gallery1.Selected.Contacts, ThisItem )
    

    Настроювання піктограми «Скасувати».

  8. На вкладці Подання виберіть Джерела даних.

  9. В області Дані виберіть Додати джерело даних>Microsoft Dataverse>Контактні особи>Пов’язати.

  10. У Gallery2 додайте елемент керування Поле зі списком, переконайтеся, що він має ім’я ComboBox1, а потім установіть для властивості Елементи значення Контактні особи.

    Настроювання властивості «Елементи» поля зі списком.

  11. На вкладці Властивості установіть значення Вимкнуто для властивості Дозволити вибір кількох елементів.

    Настроювання властивості «Макет» поля зі списком.

  12. Вставте піктограму Додати й для її властивості OnSelect укажіть таку формулу:

    Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
    

    Настроювання піктограми «Додати».

За допомогою цієї програми користувачі можуть вільно зв’язувати набір контактних осіб із кожним продуктом і скасовувати такий зв’язок.

  • Щоб додати контактну особу до продукту, виберіть її в полі зі списком у нижній частині екрана, а потім виберіть піктограму Додати.

  • Щоб видалити контактну особу з продукту, виберіть піктограму Скасувати для цієї контактної особи.

    На відміну від зв’язку «один-до-багатьох», зв’язок «багато-до-багатьох» дає користувачам змогу зв’язувати одну й ту саму контактну особу з кількома продуктами.

Демонстрація функцій Relate та Unrelate у програмі «багато-до-багатьох».

Навпаки: зв’язування та скасування зв’язування продуктів із кількома контактними особами

Зв’язки «багато-до-багатьох» є симетричними. Можна розширити приклад, додавши продукти до контактної особи, а потім перемикати їх між двома екранами, щоб показати, як зв’язок відображається з будь-якого напрямку.

  1. Для властивості OnVisibleScreen1 установіть значення Refresh( Products ).

    У разі оновлення зв'язку «один-до-багатьох» або «багато до багатьох» оновлюється лише дані першої таблиці аргументів виклику «Зв'язок» або «Скасувати зв'язок». Другий аргумент слід оновити вручну, якщо потрібно перемикати екрани цієї програми.

    Встановлення властивості OnVisible для функції Refresh.

  2. Повтор Screen1.

    Повтор матиме ім’я Screen1_1 і буде основою для перегляду зв’язків зі сторони контактних осіб.

    Повтор екрана.

  3. Щоб створити зворотний перегляд, змініть ці формули на елементах керування 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 )

    Результат буде дуже схожим на попередній екран, але виходитиме на зв’язок зі сторони контактних осіб.

    Демонстрація зв’язку «багато-до-багатьох», починаючи з контактних осіб.

  4. Вставте піктограму Стрілки вгору/вниз і встановіть для її властивості OnSelect значення Navigate( Screen1, None ). Зробіть те саме на Screen1 з формулою Navigate( Screen1_1, None ).

    Додавання переходів між екранами.

Завдяки цьому новому екрану користувачі можуть додати контактну особу до продукту, а потім перейти до подання контактних осіб і бачити пов’язаний продукт. Зв’язки симетричні та є спільними для двох екранів.

Демонстрація зв’язків «багато-до-багатьох» з обох сторін.