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


Связывание и отмена связывания строк таблицы с помощью веб-API

Отдельные записи в строках таблицы можно связать с другими записями с помощью связей, существующих между определениями таблиц. В OData связи выражаются как свойства навигации.

Вы можете узнать, какие свойства навигации существуют в документе службы $metadata. См. статью "Свойства навигации веб-API". Сведения о существующих таблицах Dataverse см. в справочнике по EntityType веб-API, где для каждого типа сущности указаны однозначные и коллекционные свойства навигации.

В следующей таблице описаны три типа связей между таблицами в Dataverse.

Тип Description Example
Один ко многим Одна запись может иметь множество записей, связанных с ней. Запись учетной записи может содержать множество записей контактов в 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

{
  "[email protected]": "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)

Как описано в статье "Связывание строк таблицы" при создании, новые записи также могут быть связаны с существующими записями таким же образом.

Отмена связывания с однозначным свойством навигации

Если вы хотите отключить связь, можно просто задать значение 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

{
  "[email protected]": 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

Замечание

Примечание. При задании значения @odata.idнеобходимо использовать абсолютный URL-адрес.

Чтобы удалить ссылку, можно также использовать этот 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

В следующем примере показано, как добавить запись роль в коллекцию systemusersystemuserroles_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 на стороне клиента)
Выполнение операций с помощью веб-API
Создание http-запросов и обработка ошибок
Запрос данных с помощью веб-API
Создание строки таблицы с помощью веб-API
Получение строки таблицы с помощью веб-API
Обновление и удаление строк таблицы с помощью веб-API
Использование функций веб-API
Использование действий веб-API
Выполнение пакетных операций с помощью веб-API
Войти под другим пользователем с помощью веб-API
Выполнение условных операций с помощью веб-API