Web API を使用して、テーブル定義間に存在するリレーションシップを介して、テーブル行を他のテーブル行と関連付け、関連付けを解除します。 OData では、関連付けはナビゲーション プロパティとして表現されます。
どのナビゲーション プロパティが $metadata サービス ドキュメントに存在するかを検出できます。 Web API ナビゲーション プロパティを参照してください。 既存の Dataverse テーブルについては、 Web API EntityType リファレンスを参照してください。 エンティティの種類ごとに、一覧表示されている単一値ナビゲーション プロパティとコレクション値ナビゲーション プロパティを参照してください。
次のテーブルは、Dataverse におけるテーブル間の 3 種類の関係性について説明しています。
| タイプ | Description | Example |
|---|---|---|
| 一対多 | 1 つのレコードに多数のレコードを関連付けることができます。 |
取引先企業 レコードには、contact_customer_accountsに多くの取引先担当者レコードが存在する場合があります。 |
| 多対一 | 多数のレコードを 1 つのレコードに関連付けることができます。 多対一は、一対多の関連付けのミラー イメージです。 リレーションシップは 1 つだけです。 |
parentcustomerid_accountレコードは、single 値ナビゲーション プロパティを使用して、1 つの取引先企業レコードに複数関連付けることができます。 |
| 多対多 | 多数のレコードを多数のレコードに関連付けることができます。 | 各セキュリティロール (役割) には、システムユーザーの定義への参照が含まれる場合があります。 どちらのテーブルにも systemuserroles_associationコレクション値ナビゲーション プロパティがあります。 |
単一値ナビゲーション プロパティを使用する
一対多リレーションシップまたは 多 対一リレーションシップの多側にある既存のレコードの場合は、URI 参照を他のレコードに設定してレコードを関連付けることができます。 これを行う最も簡単で最も一般的な方法は、単一値ナビゲーション プロパティの名前に @odata.bind 注釈を追加し、その値を、PATCH 要求で他方のレコードの URI に設定することです。
単一値ナビゲーション プロパティを使用して関連付ける
たとえば、単一値ナビゲーション プロパティを使用して取引先企業レコードに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)
詳細については、「 基本的な更新プログラム」を参照してください。
$ref要求を使用して関連付けと関連付け解除を行う
他の方法を使用して、単一値ナビゲーション プロパティで前述したのと同じ結果を得ることができます。
次の 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
Note
@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 では、多対多リレーションシップの両側にコレクション値のナビゲーション プロパティがあります。 1 対多および多対 1 のリレーションシップにおいて、「1」側のテーブルはコレクション値のナビゲーションプロパティがあります。 コレクション値ナビゲーション プロパティを使用しながら、これらの種類のリレーションシップを操作する方法に違いはありません。 このセクションでは、任意の種類のリレーションシップに対してコレクション値ナビゲーション プロパティを操作する方法について説明します。
レコードをコレクションに追加する
次の例は、取引先担当者レコードを取引先企業contact_customer_accountsコレクション (1 対多リレーションシップ) に追加する方法を示しています。
要求:
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であるcontactid00aa00aa-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
参照
Web API 基本操作のサンプル (C#)
Web API の基本的な操作のサンプル (クライアント側の JavaScript)
Web API を使用した操作の実行
Http 要求を作成し、エラーを処理する
Web API を使用してデータのクエリを実行する
Web API を使用してテーブル行を作成する
Web API を使用してテーブル行を取得する
Web API を使用してテーブル行を更新および削除する
Web API 関数の使用
Web API アクションの使用
Web API を使用してバッチ操作を実行する
Web API を使用して別のユーザーを偽装する
Web API を使用して条件付き操作を実行する