Web API を使用したテーブル行の関連付けと関連付け解除

テーブル定義間に存在する関連付けを使用して、テーブル行の個々のレコードを他のレコードと関連付けることができます。 ODataでは、リレーションシップ はナビゲーション プロパティとして表現されます。

どのナビゲーション プロパティが $metadata サービス ドキュメントに存在するかを検出できます。 Web API ナビゲーション プロパティを参照してください。 既存の Dataverse テーブルについては、 Web API EntityType Reference を参照してください。各エンティティ タイプについては、一覧表示されている単一値およびコレクション値のナビゲーション プロパティを参照してください。

次のテーブルは、Dataverse のテーブル間の関連付けの 3 つのタイプについて説明しています。

タイプ 説明設定
一対多 1 つのレコードに多数のレコードを関連付けることができます。 account レコードは contact_customer_accountsコレクション値ナビゲーション プロパティに多数の contact レコードを持つことができます。
多対一 多数のレコードを 1 つのレコードに関連付けることができます。

多対一は、一対多の関連付けのミラー イメージです。 関係はただ一つです。
複数の contact レコードは parentcustomerid_account 単一値ナビゲーション プロパティを使用してaccount レコードに関連付けられます。
多対多 多数のレコードを多数のレコードに関連付けることができます。 それぞれ security role (role) には、aの定義への参照が含まれる場合があります systemuser
これらのテーブルには両方とも、 systemuserroles_association コレクション値ナビゲーション プロパティがあります

単一値ナビゲーション プロパティを使用する

一対多または多対一の関連付けの側の既存のレコードについては、他のレコードへの URI 参照を設定することでレコードを関連付けることができます。 これを行う最も簡単で一般的な方法は、単一値ナビゲーション プロパティの名前に @odata.bind 注釈 を追加し、その値を PATCH リクエスト内の他のレコードのURIとして設定することです。

単一値ナビゲーション プロパティと関連付ける

たとえば、parentcustomerid_account 単一値ナビゲーション プロパティを使用して contact レコードを account に関連付けます:

要求:

PATCH [Organization Uri]/api/data/v9.2/contacts(cf9eaaef-f718-ed11-b83e-00224837179f) 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(cf9eaaef-f718-ed11-b83e-00224837179f)

作成時にテーブル行を関連付けるで説明されているように、新しいレコードも同じ方法で既存のレコードに関連付けることができます。

単一値ナビゲーション プロパティとの関連付けを解除する

関連付けを解除する場合は、単に値を null に設定できます。

要求:

PATCH [Organization Uri]/api/data/v9.2/contacts(cf9eaaef-f718-ed11-b83e-00224837179f) 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(cf9eaaef-f718-ed11-b83e-00224837179f)

この方法で関連付けを解除する場合、@odata.bind 注釈を含める必要はありません。 単一値ナビゲーション プロパティの名前を使用するだけです:

要求:

PATCH [Organization Uri]/api/data/v9.2/contacts(cf9eaaef-f718-ed11-b83e-00224837179f) 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(cf9eaaef-f718-ed11-b83e-00224837179f)

詳細情報: 基本アップデート

他のメソッド

単一値ナビゲーション プロパティを使用して、前述の同じ結果を実現する方法は他にもあります。

以下の PUT を使用して、parentcustomerid_account 単一値ナビゲーション プロパティの値を設定できます:

要求:

PUT [Organization Uri]/api/data/v9.2/contacts(cf9eaaef-f718-ed11-b83e-00224837179f)/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(cf9eaaef-f718-ed11-b83e-00224837179f)/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の「1」側にはコレクション値のナビゲーション プロパティがあります。 コレクション値のナビゲーション プロパティを使用する場合、これらのタイプの リレーションシップ を操作する方法に違いはありません。 このセクションでは、任意の種類のリレーションシップでコレクション値ナビゲーション プロパティを操作する方法について説明します。

レコードをコレクションに追加する

次の例は、1対多の関係の一部であるコレクションにレコードを追加する方法を示しています。 contact account 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(cf9eaaef-f718-ed11-b83e-00224837179f)"
}

応答:

HTTP/1.1 204 NoContent
OData-Version: 4.0

次の例は、多対多の関係であるコレクションにレコードを追加する方法を示しています。 role systemuser 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 レコードを、取引先担当者 contactid 値が cf9eaaef-f718-ed11-b83e-00224837179f である accountcontact_customer_accounts コレクションから削除する方法を示します。

要求:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts(cf9eaaef-f718-ed11-b83e-00224837179f)/$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(cf9eaaef-f718-ed11-b83e-00224837179f) 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 を使用する条件付き演算を実行する

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。