Dynamics CRM Online 2015 Update 1 SDK 新機能: Upsert

みなさん、こんにちは。

Dynamics CRM Online 2015 Update 1 で提供されるプラット
フォームと SDK の新機能より、今回は Upsert を紹介します。
Upsert は代替えキーと連携して機能します。こちらの記事は
前回からの続きとなっているため以下の記事を前提とします。

Dynamics CRM Online 2015 Update 1 SDK 新機能: 代替えキー

概要

Upsert は Insert + Update の意味です。Upsert リクエストを
利用すると、既に存在するレコードは更新対象となり、まだ
存在しないレコードは作成対象となります。

レコードの存在確認は、代替えキーの値を利用します。よって
Upsert を利用するためには代替えキーの設定が必須です。

Upsert の利用

ここからは前回記事の操作の続きになります。

1. 前回作成したコンソールアプリケーションソリューションを
開きます。

2. 前回実装したコードのうち、組織サービスの作成以下を全て
コメントアウトします。

image

3. 以下のコードを追加します。代替えキーを指定した Entity
オブジェクトを作成し、UpsertRequest に渡しています。

Entity account = new Entity("account", "accountnumber", "UpsertTest");
account["name"] = "Upsert テスト取引先企業";
UpsertRequest request = new UpsertRequest()
{
    Target = account
};
UpsertResponse response = (UpsertResponse)service.Execute(request);

4. 以下のコードを追加して、レコードが作成されたか表示
するようにします。

if(response.RecordCreated)
    Console.WriteLine("レコードが作成されました");
else
    Console.WriteLine("レコードが更新されました");
Console.Read();

5. F5 キーを押下してプログラムを実行します。レコードが
作成されたことを確認します。

image

6. コードを変更せずに、再度プログラムを実行します。
レコードが更新対象と正しく認識されます。

image

より高度な使い方

Upsert と代替えキーで参照を指定することもできます。
今回は取引先企業の Upsert 時に、主取引先担当者を
指定します。

1. まず取引先担当者についても代替えキーを設定します。
今回は姓と名でキーとしました。

image

2. サンプルの取引先担当者を作成します。

image

3. 取引先企業のレコードの参照に渡す EntityReference を
作成します。代替えキーが複数ある場合は、以下のように
KeyAttributeCollection を利用します。

Entity account = new Entity("account", "accountnumber", "UpsertTest");
account["name"] = "Upsert テスト取引先企業";
// 取引先担当者の参照を追加
EntityReference contact = 
     ew EntityReference("contact",
    new KeyAttributeCollection { { "lastname", "サンプル" }, { "firstname", "担当者" } }
    );
account["primarycontactid"] = contact;

4. F5 キーを押下してプログラムを実行します。

5. レコードが更新されていることを確認します。

image

6. 新規作成時の挙動を検証するため、一旦取引先企業の
レコードを削除して、再度プログラムを実行します。
意図通りレコードが作成されることを確認します。

まとめ

Upsert を利用することで、他システム連携時のコードが
簡単に書けるだけでなく、読み取りと更新要求を別々に
送信していた時に比べて、Upsert 要求だけで良い事から
サーバーに対する要求数も削減でき、パフォーマンスの
向上も期待できます。 是非お試しください!

- 中村 憲一郎