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


Функції зв’язку та скасування зв’язку

Застосовується до: програм 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 для вибору залучених записів.

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

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

Функція зв’язку

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

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

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

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

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

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

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

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

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

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

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

    Галерея2 покаже бронювання для будь-якого товару, який користувач вибере в Галереї1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Relate( ComboBox1.Selected.Reservations, ThisItem )
    

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

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

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

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

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

Функція Unrelate

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

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

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

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

    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. Для властивості OnVisible Screen1 установіть значення 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 ).

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

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

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