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


Связывание и отмена связывания строк таблицы с помощью веб-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

{
  "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)

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

Диссоциация с помощью навигационного свойства с одним значением

Чтобы отсоединить, задайте значение 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

Замечание

При настройке значения @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