OData エンドポイントを使用して基本的なデータ操作を実行する

 

公開日: 2016年11月

対象: Dynamics CRM 2015

HTTP 要求を実行して、Microsoft Dynamics CRM 2015 および Microsoft Dynamics CRM Online 2015 更新プログラム で OData エンドポイントを使用するデータ操作を行う際には、さまざまなライブラリやテクノロジを使用できます。 このトピックでは、下位レベルの HTTP 要求の形式について説明します。 使用するライブラリやテクノロジにかかわらず、Fiddler などの Web デバッグ プロキシ ツールで、HTTP トラフィックを確認し、その結果を OData エンドポイントの要件と比較できます。 このトピックでは、Fiddler を使用して収集した HTTP 要求および応答の例を示します。 これらの例は、簡潔に示すためにその一部が編集されており、環境変数によって変化する内容については <placeholders> が指定されています。

特定のテクノロジを使用するアプリケーションに関する詳細については、「Ajax および JScript Web リソースで OData エンドポイントを使用する」を参照してください。

このトピックの内容

レコードの作成

  • ATOM の使用

  • JSON の使用

レコードの取得

  • ATOM の使用

  • JSON の使用

レコードの更新

  • PUT による更新

  • MERGE による更新

    • ATOM の使用

    • JSON の使用

レコードの削除

  • ATOM の使用

  • JSON の使用

HTTP ステータス コード

レコードの作成

新しいレコード、つまりエントリを作成するには、エントリが作成されるコレクションの URI に対して HTTP POST 要求を実行します。 POST 要求は、ATOM 形式または JSON 形式を使用して、その本体内に新しいエントリを含みます。

サーバーは、要求に指定されていないプロパティには既定値を割り当て、作成されたレコードの URL が格納された "Location" ヘッダーと共に結果を返します。 エントリのタイトル要素は、エンティティのプライマリ属性を反映します。 たとえば、account エンティティの場合、name 属性がプライマリ属性です。 HTTP ステータス コード 201 は、レコードが正常に作成されたことを表します。

関連レコードのコンテキストで新しいレコードを作成する別の方法の詳細については、「ディープ挿入の使用」を参照してください。

ATOM の使用

マネージド コード内で System.Data.Services.Client ライブラリを使用して新しい account レコードを作成する例を、次に示します。

HTTP 要求

POST <organization root>/xrmservices/2011/organizationdata.svc/AccountSet HTTP/1.1
Accept-Charset: UTF-8
Accept-Language: en-us
dataserviceversion: 1.0;NetFx
Accept:  application/atom+xml,application/xml
Content-Type:  application/atom+xml
maxdataserviceversion: 2.0;NetFx
Referer: <The URL to the HTML page >
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Content-Length: 26629
Connection: Keep-Alive
Pragma: no-cache
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
xmlns="http://www.w3.org/2005/Atom">
  <category 
   scheme="https://schemas.microsoft.com/ado/2007/08/dataservices/scheme" 
   term="Microsoft.Crm.Sdk.Data.Services.Account" 
  />
  <title type="text">New Account Created</title>
  <author>
    <name />
  </author>
  <updated>2010-07-22T22:51:50.0051481Z</updated>
  <id />
  <content type="application/xml">
    <m:properties>
[ Properties removed for brevity]
    </m:properties>
   </content>
</entry>

HTTP 応答

HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 26756
Content-Type:  application/atom+xml;charset=utf-8
Location:  <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c')
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Thu, 22 Jul 2010 22:51:49 GMT

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="<organization root>/XRMServices/2011/OrganizationData.svc/" 
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
xmlns="http://www.w3.org/2005/Atom">
  <id><organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c')</id>
  <title type="text">New Account Created</title>
  <updated>2010-07-22T22:51:50Z</updated>
  <author>
    <name />
  </author>
  <link rel="edit" title="Account" href="AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c')" />
[Links removed for brevity]
  <category 
   term="Microsoft.Crm.Sdk.Data.Services.Account" 
   scheme="https://schemas.microsoft.com/ado/2007/08/dataservices/scheme" 
  />
  <content type="application/xml">
    <m:properties>
[Properties removed for brevity]
</m:properties>
  </content>
</entry>

このトピックの内容

JSON の使用

ブラウザーから XMLHttpRequest オブジェクトを使用して新しい取引先企業レコードを作成する例を、次に示します。

HTTP 要求

POST <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet HTTP/1.1
Content-Type:  application/json; charset=utf-8
Accept-Language: en-us
Referer: <The URL to the HTML page sending the request>
Accept:  application/json
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Content-Length: 25
Connection: Keep-Alive
Pragma: no-cache
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

{"Name":"Sample Account"}

HTTP 応答

HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 17720
Content-Type:  application/json;charset=utf-8
Location: <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'5784bd4a-f595-df11-a492-00155dba380c')
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Fri, 23 Jul 2010 00:57:40 GMT

{
"d" : {
"__metadata": {
"uri": "<organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'5784bd4a-f595-df11-a492-00155dba380c')", 
"type": "Microsoft.Crm.Sdk.Data.Services.Account"
},
[Properties removed for brevity]
 }
}

このトピックの内容

レコードの取得

レコードを取得するには、HTTP GET を使用します。 特定のレコードの一意の識別子を指定すると、そのレコードのみが取得されます。 それ以外の場合は、定義されているすべてのシステム クエリ オプションが適用され、システム クエリ オプション フィルターに一致するレコードが 50 個まで取得されます。

このトピックの内容

ATOM の使用

マネージド コード内で System.Data.Services.Client ライブラリを使用して単一の取引先企業レコードを取得する例を、次に示します。

HTTP 要求

GET <organization root>/xrmservices/2011/organizationdata.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c') HTTP/1.1
Accept-Charset: UTF-8
Accept-Language: en-us
dataserviceversion: 1.0;NetFx
Accept:  application/atom+xml,application/xml
maxdataserviceversion: 2.0;NetFx
Referer: <The URL to the HTML page >
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Connection: Keep-Alive
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

HTTP 応答

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 28231
Content-Type:  application/atom+xml;charset=utf-8
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Thu, 22 Jul 2010 22:51:51 GMT

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="<organization root>/XRMServices/2011/OrganizationData.svc/" 
   xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
   xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
   xmlns="http://www.w3.org/2005/Atom">
  <id><organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c')</id>
  <title type="text">New Account Created </title>
  <updated>2010-07-22T22:51:51Z</updated>
  <author>
    <name />
  </author>
  <link rel="edit" title="Account" href="AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c')" />
[Links removed for brevity]
  <category 
   term="Microsoft.Crm.Sdk.Data.Services.Account" 
   scheme="https://schemas.microsoft.com/ado/2007/08/dataservices/scheme" 
  />
  <content type="application/xml">
    <m:properties>
[Properties removed for brevity]
    </m:properties>
  </content>
</entry>

このトピックの内容

JSON の使用

ブラウザーから XMLHttpRequest オブジェクトを使用して取引先企業レコードを取得する例を、次に示します。

HTTP 要求

GET <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'5784bd4a-f595-df11-a492-00155dba380c') HTTP/1.1
Content-Type:  application/json; charset=utf-8
Accept-Language: en-us
Referer: <The URL to the HTML page sending the request>
Accept:  application/json
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Connection: Keep-Alive
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

HTTP 応答

GET <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'5784bd4a-f595-df11-a492-00155dba380c') HTTP/1.1
Content-Type:  application/json; charset=utf-8
Accept-Language: en-us
Referer: <The URL to the HTML page sending the request>
Accept:  application/json
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Connection: Keep-Alive
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

このトピックの内容

レコードの更新

OData では、PUT メソッドまたは MERGE メソッドを使用してレコードを更新できます。MERGE で多くの処理が行われ過ぎるのを回避するには、PUT を使用します。

更新が成功した場合の応答には HTTP ステータス コード 204 が含まれ、コンテンツは返されません。

注意

Microsoft Dynamics 365 の複合型の値を null に設定するには、複合型のすべてのプロパティを null に設定します。 詳細については、「複合型を Null に設定」を参照してください。

注意

PUT 要求または MERGE 要求をサーバーに送信するときに、要求の本体を含まないライブラリがあります。 これに対処するために、OData では、POST HTTP 演算子を使用した POST によるメソッド トンネリングをサポートしています。 メソッド トンネリングを使用するには、POST HTTP 操作を送信し、X-HTTP-Method ヘッダーを、実行する HTTP 操作に設定します。 たとえば、MERGE 要求を送信するには、HTTP 操作を POST に設定し、X-HTTP-Method HTTP ヘッダーを MERGE に設定します。

PUT による更新

重要

PUT を使用してレコードを更新すると、既存のレコードが、指定されたデータに置換されます。 レコード内のすべてのプロパティ値は、要求内で指定されている値を使用し、要求内に値が指定されていない場合はその既定値に設定されます。 リンクは置換されません。

個々のプロパティを更新する場合は、PUT を使用します。 詳細については、「個別のプロパティの更新」を参照してください。

MERGE による更新

Microsoft Dynamics 365 における一般的な更新ロジックは、通常、MERGE を使用して定義される動作に一致します。 要求に含まれるプロパティ値は、そのプロパティにのみ適用されます。 他のプロパティ データは変更されません。

重要

この動作を軽減する手順を実行しない限り、取得したエンティティ レコードをマネージド コードのプロキシ クラスを使用して更新する場合は、MERGE が使用され、すべてのプロパティが更新されます。 プロパティの値が変わらない場合も同様です。 このため、ワークフロー、プラグインなどのイベント ドリブン機能で、プロパティが変更されたと検出されると、望ましくない副作用が生じる可能性があります。 監査機能も、プロパティが変更されたと記録します。

さらに、エンティティ インスタンスが取得されるのではなくインスタンス化される場合、MERGE 要求でそのエンティティのすべてのプロパティが返されます。 コードで設定されないすべてのプロパティは null になります。 レコードの既存の値は、これらの null 値に上書きされます。

DataServiceContext イベント、ReadingEntity イベントと WritingEntity イベントのイベント ハンドラーを実装することで、この動作を軽減できます。

このトピックの内容

ATOM の使用

マネージド コード内で System.Data.Services.Client ライブラリを使用して取引先企業レコードを更新する例を、次に示します。

HTTP 要求

POST <organization root>/xrmservices/2011/organizationdata.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c') HTTP/1.1
Accept:  application/atom+xml,application/xml
Accept-Language: en-us
dataserviceversion: 1.0;NetFx
x-http-method: MERGE
Accept-Charset: UTF-8
Content-Type:  application/atom+xml
maxdataserviceversion: 2.0;NetFx
Referer: <The URL to the HTML page >
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Content-Length: 26753
Connection: Keep-Alive
Pragma: no-cache
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry 
   xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
   xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
   xmlns="http://www.w3.org/2005/Atom">
  <category 
   scheme="https://schemas.microsoft.com/ado/2007/08/dataservices/scheme" 
   term="Microsoft.Crm.Sdk.Data.Services.Account" 
  />
  <title type="text">Account updated </title>
  <author>
    <name />
  </author>
  <updated>2010-07-22T22:51:51.0053481Z</updated>
  <id><organization root>/xrmservices/2011/organizationdata.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c')</id>
  <content type="application/xml">
    <m:properties>
[Properties removed for brevity]
    </m:properties>
  </content>
</entry>

HTTP 応答

HTTP/1.1 204 No Content
Cache-Control: no-cache
Content-Length: 0
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Thu, 22 Jul 2010 22:51:51 GMT

このトピックの内容

JSON の使用

ブラウザーから XMLHttpRequest オブジェクトを使用して取引先企業レコードを更新する例を、次に示します。

HTTP 要求

POST <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'5784bd4a-f595-df11-a492-00155dba380c') HTTP/1.1
Accept:  application/json
Accept-Language: en-us
Referer: <The URL to the HTML page sending the request>
x-http-method: MERGE
Content-Type:  application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Content-Length: 117
Connection: Keep-Alive
Pragma: no-cache
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

{"Name":"Updated Sample","Telephone1":"555-0123","AccountNumber":"ABCDEFGHIJ","EMailAddress1":"someone1@example.com"}

HTTP 応答

HTTP/1.1 204 No Content
Cache-Control: no-cache
Content-Length: 0
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Fri, 23 Jul 2010 00:57:41 GMT

レコードの削除

POST 要求と、X-HTTP-METHOD および削除されるレコードの URI 参照が設定された DELETE を使用します。

注意

OData 仕様では、正常な削除操作は HTTP ステータス コード 200 (OK) を返すことが指定されていますが、Microsoft Dynamics 365 実装では 204 (コンテンツなし) が返されます。

詳細については、「レコードの関連付けと関連付け解除」を参照してください。

このトピックの内容

ATOM の使用

マネージド コード内で System.Data.Services.Client ライブラリを使用して取引先企業レコードを削除する例を、次に示します。

HTTP 要求

POST <organization root>/xrmservices/2011/organizationdata.svc/AccountSet(guid'732b64b6-e395-df11-a492-00155dba380c') HTTP/1.1
Accept:  application/atom+xml,application/xml
Accept-Language: en-us
dataserviceversion: 1.0;NetFx
x-http-method: DELETE
Accept-Charset: UTF-8
Content-Type:  application/atom+xml
maxdataserviceversion: 2.0;NetFx
Referer: <The URL to the HTML page >
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

HTTP 応答

HTTP/1.1 204 No Content
Cache-Control: no-cache
Content-Length: 0
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Thu, 22 Jul 2010 22:51:54 GMT

このトピックの内容

JSON の使用

ブラウザーから XMLHttpRequest オブジェクトを使用して取引先企業レコードを削除する例を、次に示します。

HTTP 要求

POST <organization root>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'5784bd4a-f595-df11-a492-00155dba380c') HTTP/1.1
Accept:  application/json
Accept-Language: en-us
Referer: <The URL to the HTML page sending the request>
x-http-method: DELETE
Content-Type:  application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)
Host: <CRM Server>
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
Cookie: <cookie data>
Authorization: Negotiate <authentication token>

HTTP 応答

HTTP/1.1 204 No Content
Cache-Control: no-cache
Content-Length: 0
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
DataServiceVersion: 1.0;
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate <authentication token>
Date: Fri, 23 Jul 2010 00:57:57 GMT

このトピックの内容

HTTP ステータス コード

返される HTTP ステータス コードの詳細については、「OData endpoint Http status codes」を参照してください。

関連項目

Web リソースで OData エンドポイントを使用する
OData エンドポイントを使用して追加データ操作を実行する
Ajax および JScript Web リソースで OData エンドポイントを使用する
OData endpoint Http status codes

© 2017 Microsoft. All rights reserved. 著作権