次の方法で共有


Web API を使用してテーブル行を作成する

POST要求を Web API エンティティセット リソースに送信して、Microsoft Dataverse でテーブル行 (エンティティ レコード) を作成します。 ディープ挿入を使用して、1 回の操作で複数の関連テーブル行を作成できます。 また、 @odata.bind 注釈を使用して、新しいテーブル行を既存のテーブルに関連付ける値を設定する方法も知っている必要があります。

ヒント

Web API を使用してテーブル (エンティティ) 定義を作成および更新する方法については、「Web API を使用して テーブル定義を作成および更新する」を参照してください。

基本的な生成

この例では、新しい取引先企業エンティティ レコードを作成します。 accounts取引先企業の EntityType のエンティティセット名です。 応答 OData-EntityId ヘッダーには、作成したエンティティの URI が含まれています。

要求:


POST [Organization URI]/api/data/v9.2/accounts
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

{
    "name": "Sample Account",
    "creditonhold": false,
    "address1_latitude": 47.639583,
    "description": "This is the description of the sample account",
    "revenue": 5000000,
    "accountcategorycode": 1
}

応答:


HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

レコードを作成するには、有効な エンティティ セット名、プロパティ名、および型を識別する必要があります。

ヒント

Power Apps で、テーブルのリストを表示しているときに、詳細設定>ツールを選択します。 セット名をコピーする を選択して、テーブルのエンティティ セット名をコピーします。

また、テーブル データへの API リンク を選択して、ブラウザでデータの上位 10 行を表示することもできます。 この機能は、返される JSON テキスト データを書式設定する JSON フォーマッタ などのブラウザー拡張機能がインストールされている場合に最適です。

エンティティ セット名は、テーブルのコレクション名または複数形の名前と常に同じであるとは限りません。 EntitySetNameと呼ばれる別のプロパティに格納されます。

新しいテーブル行を作成するとき、同時に非プライマリ イメージを挿入することはできません。 プライマリ以外のイメージを追加するには、行が既に存在している必要があります。 プライマリ イメージの詳細を確認します

すべてのシステム テーブルと属性 (テーブル列) については、Web API エンティティ タイプ参照 のそのエンティティの記事でこの情報を確認することができます。 ユーザー定義テーブルまたは列については、CSDL $metadata ドキュメントにあるそのテーブルの定義を参照してください。 詳細情報: Web API EntityTypes

主キー値の設定

各テーブルには、行の作成時に指定できる一意識別子の主キー列があります。 ほとんどの場合、システムによって生成される値は最適なパフォーマンスを得るために最適化されているため、システムでこの値を設定できるようにする必要があります。

Dataverse 主キー データをテレメトリに格納して、サービスの維持に役立てます。 カスタマイズした主キーの値を指定する場合は、それらの値に機密情報を使用しないでください。

エラスティック テーブルを使用すると、重複する主キー値と異なる partitionid 値を持つレコードを作成できます。 ただし、このパターンは、モデル駆動型またはキャンバス型の Power Apps と互換性がありません。 エラスティック テーブルを使用して主キー値を設定する方法について説明します

返されるデータで作成する

POST要求を作成して、201 (Created)の状態で作成されたレコードからデータを返すことができます。 この結果を取得するには、要求のヘッダーで return=representation の基本設定を使用する必要があります。

返されるプロパティを制御するには、エンティティ セットの URL に $select クエリ オプションを追加します。 $expandを使用して、関連エンティティを返すこともできます。

コレクション値ナビゲーション プロパティの入れ子になった $expand は、 return=representation 設定で使用してもデータを返しません。 詳細については、「コレクション値ナビゲーション プロパティの入れ子になった$expand」を参照してください。

このメソッドを使用してエンティティを作成する場合、作成されたレコードの URI を含む OData-EntityId ヘッダーは返されません。

次の例では、新しいアカウント エンティティを作成し、要求されたデータを応答で返します。

要求:


POST [Organization URI]/api/data/v9.2/accounts?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json; charset=utf-8
Prefer: return=representation

{
   "name": "Sample Account",
   "creditonhold": false,
   "address1_latitude": 47.639583,
   "description": "This is the description of the sample account",
   "revenue": 5000000
}

応答:


HTTP/1.1 201 Created
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: return=representation
OData-Version: 4.0

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
    "@odata.etag": "W/\"536530\"",
    "accountid": "d6f193fc-ce85-e611-80d8-00155d2a68de",
    "accountcategorycode": 1,
    "description": "This is the description of the sample account",
    "address1_latitude": 47.63958,
    "creditonhold": false,
    "name": "Sample Account",
    "createdon": "2016-09-28T22:57:53Z",
    "revenue": 5000000.0000,
    "_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"
}

1 つの要求で複数のレコードを作成する

1 つの要求で同じ種類の複数のレコードをすばやく作成するには、 CreateMultiple アクションを使用します。 この記事の執筆時点では、 CreateMultiple アクション はすべての標準テーブルでサポートされているわけではありませんが、すべてのエラスティック テーブルでサポートされています。

詳細については、以下を参照してください:

標準テーブルを使用すると、ナビゲーション プロパティ値として定義することで、相互に関連するエンティティを作成できます。 このパターンを ディープ挿入 と言います。 この方法には、2 つの利点があります。 複数の単純な作成操作と関連付け操作を 1 つの結合 されたアトミック 操作に置き換えるため、より効率的です。 アトミック操作は成功するか、完全に失敗します。

基本的な作成と同様に、応答 OData-EntityId ヘッダーには、作成したエンティティの URI が含まれています。 作成された関連するエンティティの URI は返されません。 Prefer: return=representation ヘッダーを使用してレコードの主キー値を取得し、作成されたレコードの値を返すことができます。 返されるデータを含むレコードの作成について詳しくは、こちらをご覧ください

たとえば、accounts エンティティ セットに投稿された次の要求本文は、アカウントの作成のコンテキストで合計 4 つのレコードを作成します。

  • 連絡先は、firstnameという名前の単一値ナビゲーション プロパティのオブジェクト プロパティとして定義されるため、lastname値とprimarycontactid値で作成されます。

  • アカウントに関連する機会が作成されるのは、opportunity_customer_accountsという名前のコレクション値ナビゲーション プロパティの値に設定された配列内のオブジェクトとして定義するためです。

  • 営業案件に関連するタスクが作成されるのは、 Opportunity_Tasksという名前のコレクション値ナビゲーション プロパティの値に設定された配列内のオブジェクトとして定義するためです。

要求:

POST [Organization URI]/api/data/v9.2/accounts
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

{
 "name": "Sample Account",
 "primarycontactid":
 {
     "firstname": "John",
     "lastname": "Smith"
 },
 "opportunity_customer_accounts":
 [
  {
      "name": "Opportunity associated to Sample Account",
      "Opportunity_Tasks":
      [
       { "subject": "Task associated to opportunity" }
      ]
  }
 ]
}

応答:


HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)

作成時にテーブル行を関連付ける

新しいレコードを作成するときに既存のレコードに関連付けるには、 @odata.bind 注釈を使用してナビゲーション プロパティの値を設定します。

accounts のエンティティ セットに投稿された以下の要求本文は、contactid の値が 00000000-0000-0000-0000-000000000001 の既存の連絡先と、activityid の値が 00000000-0000-0000-0000-00000000000200000000-0000-0000-0000-000000000003 の 2 つの既存のタスクに関連付けられたアカウントを作成します。

この要求では、 Prefer: return=representation ヘッダーが使用されるため、作成されたレコードの値が返されます。 詳細については、「 返されるデータを使用した作成」を参照してください。

要求:


POST [Organization URI]/api/data/v9.2/accounts?$select=name&$expand=primarycontactid($select=fullname),Account_Tasks($select=subject)
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Prefer: return=representation

{
    "name": "Sample Account",
    "primarycontactid@odata.bind": "/contacts(00000000-0000-0000-0000-000000000001)",
    "Account_Tasks@odata.bind": [
        "/tasks(00000000-0000-0000-0000-000000000002)",
        "/tasks(00000000-0000-0000-0000-000000000003)"
    ]
}

応答:


HTTP/1.1 201 Created
OData-Version: 4.0
Preference-Applied: return=representation

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,primarycontactid(fullname),Account_Tasks(subject))/$entity",
    "@odata.etag": "W/\"36236432\"",
    "name": "Sample Account",
    "accountid": "00000000-0000-0000-0000-000000000004",
    "primarycontactid": {
        "@odata.etag": "W/\"28877094\"",
        "fullname": "Yvonne McKay (sample)",
        "contactid": "00000000-0000-0000-0000-000000000001"
    },
    "Account_Tasks": [
        {
            "@odata.etag": "W/\"36236437\"",
            "subject": "Task 1",
            "activityid": "00000000-0000-0000-0000-000000000002"
        },
        {
            "@odata.etag": "W/\"36236440\"",
            "subject": "Task 2",
            "activityid": "00000000-0000-0000-0000-000000000003"
        }
    ]
}

重複レコードの確認

既定では、レコードの作成時に重複検出が抑制されます。 重複検出を有効にするには、MSCRM.SuppressDuplicateDetection: false要求に POST ヘッダーを含めます。 重複データ検出 は、次の条件が当てはまる場合にのみ適用されます:

  • 組織で重複検知を有効にしました。
  • 重複検出が可能なエンティティです。
  • アクティブな重複データ検出ルールが適用されます。

詳細については、以下を参照してください:

別のレコードからレコードを作成する

InitializeFrom 関数を使用して、テーブル間にリレーションシップのマッピングが存在する既存のレコードのコンテキスト内にレコードを新規作成することができます。 これらのマッピングの作成については、以下を参照してください。

二つのエンティティをマッピング可能かどうか判断するには、このクエリを使用します:

GET [Organization URI]/api/data/v9.2/entitymaps?
$select=sourceentityname,targetentityname&$orderby=sourceentityname

別のレコードから新しいレコードを作成するには、2 段階のプロセスがあります。 まず、InitializeFrom 関数 を使用して、元のレコードからマップされたプロパティ値を返します。 次に、 InitializeFrom 関数 で返された応答データを変更と組み合わせ、データを POST してレコードを作成します。

次の例では、accountidと等しい00000000-0000-0000-0000-000000000001値を持つ既存の取引先企業レコードの値を使用して、取引先企業レコードを作成する方法を示します。

手順 1: InitializeFrom を使用してデータを取得する

要求:

GET [Organization URI]/api/data/v9.2/InitializeFrom(EntityMoniker=@p1,TargetEntityName=@p2,TargetFieldType=@p3)?
@p1={'@odata.id':'accounts(00000000-0000-0000-0000-000000000001)'}&
@p2='account'&@p3=Microsoft.Dynamics.CRM.TargetFieldType'ValidForCreate'
If-None-Match: null
OData-Version: 4.0
OData-MaxVersion: 4.0
Content-Type: application/json
Accept: application/json

応答:

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
    "@odata.type": "#Microsoft.Dynamics.CRM.account",
    "parentaccountid@odata.bind": "accounts(00000000-0000-0000-0000-000000000001)",
    "transactioncurrencyid@odata.bind": "transactioncurrencies(732e87e1-1d96-e711-80e4-00155db75426)",
    "address1_line1": "123 Maple St.",
    "address1_city": "Seattle",
    "address1_country": "United States of America"
}

ステップ 2 - 新しいレコードを作成する

InitializeFromから受け取る応答には、ソース テーブルとターゲット テーブルの間にマップされた列の値と、親レコードの GUID が含まれます。 リレーションシップを持つテーブル間の列マッピングは、テーブルと組織によって異なるため、 InitializeFrom からの応答は異なります。

次の例に示すように、JSON 要求本文に追加することで、新しいレコードの他のプロパティ値を設定または変更できます。

POST [Organization URI]/api/data/v9.2/accounts
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

    {
        "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
        "@odata.type": "#Microsoft.Dynamics.CRM.account",
        "parentaccountid@odata.bind": "accounts(00000000-0000-0000-0000-000000000001)",
        "transactioncurrencyid@odata.bind": "transactioncurrencies(732e87e1-1d96-e711-80e4-00155db75426)",
        "name":"Contoso Ltd",
        "numberofemployees":"200",
        "address1_line1":"100 Maple St.",
        "address1_city":"Seattle",
        "address1_country":"United States of America",
        "fax":"73737"
    }
}

ストレージ パーティション内のドキュメントを作成する

エラスティック テーブル用に多数のレコードを作成する場合は、ストレージ パーティションにエンティティを作成して、それらのエンティティ レコードへのアクセスを高速化します。

エラスティック テーブルでのレコードの作成について説明します

参照

Web API 基本操作のサンプル (C#)
Web API 基本操作のサンプル (クライアント側の JavaScript)
InitializeFrom 関数
Web API を使用して演算を実行する
HTTP 要求の作成とエラーの処理
Web API を使用したデータのクエリ
Web API を使用してテーブルの行を取得する
Web API を使用したテーブル行の更新と削除
Web API を使用したテーブル行の関連付けと関連付け解除
Web API 関数の使用
Web API アクションの使用
Web API を使用してバッチ操作を実行する
Web API を使用して別のユーザーを偽装する
Web API を使用する条件付き演算を実行する