Зв'язування та роз'єднання рядків таблиці за допомогою веб-API

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

Які властивості навігації існують, можна знайти в документі служби $metadata. Дивіться Властивості навігації веб-API. Для існуючих таблиць Dataverse див. посилання на Web API EntityType

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

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

Тип Опис Приклад
Один до багатьох З одним записом може бути пов'язано багато записів. Запис облікового запису може містити багато записів контактів у contact_customer_accountsвластивості навігації зі значенням колекції.
Багато до одного З одним записом може бути пов'язано багато записів.

«Багато до одного» – це дзеркальне відображення відносин «один до багатьох». Є лише один взаємозв'язок.
Кілька записів контактів можна пов'язати з одним записом облікового запису за допомогою parentcustomerid_accountвластивості навігації з одним значенням.
Багато до багатьох Багато записів можуть бути пов'язані з багатьма записами. Кожна роль (роль) безпеки може містити посилання на визначення системного користувача.
Обидві ці таблиці мають systemuserroles_associationвластивість навігації зі значенням колекції.

Використання однозначних властивостей навігації

Для наявних записів на стороні багатьох у зв'язку «один-до-багатьох» або «багато-до-одного» можна пов'язати запис, встановивши посилання Uri на інший запис. Найпростіший і найпоширеніший спосіб зробити це – додати @odata.bind анотацію до імені однозначної навігаційної властивості, а потім встановити значення як Uri до іншого запису в запиті PATCH .

Зв'язок з однозначною навігаційною властивістю

Наприклад, щоб пов'язати контактний запис із записом облікового запису за допомогою властивості однозначної навігації:parentcustomerid_account

Просити:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account@odata.bind": "accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

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

Відключення шляхом використання однозначної навігаційної властивості

Щоб відокремити, встановіть значення на null.

Просити:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account@odata.bind": null
}

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Коли ви відокремлюєтеся цим методом, не включайте анотацію @odata.bind . Використовуйте назву властивості однозначної навігації:

Просити:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account": null
}

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Додаткові відомості: Базове оновлення

Інші способи

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

Використовуйте наступний PUT запит для встановлення значення parentcustomerid_account властивості однозначної навігаційної функції:

Просити:

PUT [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Нотатка

Ви повинні використовувати абсолютну URL при встановленні значення для @odata.id.

Щоб видалити посилання, скористайтеся цим DELETE запитом:

Просити:

DELETE [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Використання властивостей навігації зі значенням колекції

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

Додавання запису до колекції

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

Просити:

POST [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)"
}

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0

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

Просити:

POST [Organization Uri]/api/data/v9.2/systemusers(34dcbaf5-f718-ed11-b83e-00224837179f)/systemuserroles_association/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/roles(886b280c-6396-4d56-a0a3-2c1b0a50ceb0)"
}

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Видалення запису з колекції

У наведеному нижче прикладі показано, як видалити запис контакту в колекцію облікових записівcontact_customer_accounts , де значення контакту contactid становить 00aa00aa-bb11-cc22-dd33-44ee44ee44ee.

Просити:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Також працює наступний запит:

Просити:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref?$id=[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Відповідь:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Див. також

Приклад базових операцій веб-API (C#)
Приклад базових операцій веб-API (JavaScript на стороні клієнта)
Виконання операцій за допомогою Web API
Створення HTTP-запитів і обробка помилок
Запит даних за допомогою веб-API
Створення рядка таблиці за допомогою Web API
Отримання рядка таблиці за допомогою веб-API
Оновлення та видалення рядків таблиці за допомогою веб-API
Використовуйте функції веб-API
Використання дій веб-API
Виконання пакетних операцій за допомогою веб-API
Видавати себе за іншого користувача за допомогою веб-API
Виконання умовних операцій за допомогою веб-API