トピックス

知識創造研究室 by CRM(xRM)

Dynamics 365 変更履歴 と SDK を利用したデータ同期の方法

みなさん、こんにちは。
先日、2017年5月16日に『uSonar アダプタ for ASTERIA WARP』をリリース致しました!
当製品は、ランドスケイプ社が提供する日本最大(820万件)の企業データベース『LBC』を搭載したデータ統合ツール『 uSonar(ユーソナー)』と連携し、顧客データの一元化を行なうことができます。ASTERIAの既存の豊富なアダプターを選択して組み合わせて利用することで、『uSonar』と外部システムとの連携は柔軟に対応できるようになり、顧客情報の正確性の向上・メンテナンスコストの削減を実現します。

uSonar アダプタ for ASTERIA WARP

と、リリース作業に追われてました(言い訳ですwww)

さて、今回はSDKを利用したデータ連携について少し書いてみようかと思います。
Dynamics CRM 2015 Update 1 で追加された機能のひとつである「変更履歴」機能があります。この機能追加に伴いSDKにも「RetrieveEntityChanges」が追加されました。この機能を利用してリアルタイム性の高いデータ連携をご紹介します。

エンティティに対する変更の追跡を有効化

[設定]->[カスタマイズ]->[システムのカスタマイズ] の順に移動します。エンティティを選択し、データ サービス で、[変更履歴] チェック ボックスをオンにします。
上記を行ったら忘れずに、公開してください。

エンティティの変更の取得

サンプルコードでご説明します。

// ここに前回取得したDataTokenを保持
string token = null;var records = new List<Entity>();

// 今回の目玉クラス
var request = new RetrieveEntityChangesRequest();
request.EntityName = "account";
request.Columns = new ColumnSet(true);
// ここ重要!
request.DataVersion = token;

var response = client.Execute(request) as RetrieveEntityChangesResponse;
records.AddRange(response.EntityChanges.Changes.Select(x => (x as NewOrUpdatedItem).NewOrUpdatedEntity).ToArray());
records.ForEach(x => Console.WriteLine("initial record id:{0}", x.Id));
token = response.EntityChanges.DataToken;// 次回実行用のDataTokenを保持

ここでミソとなるのが、RetrieveEntityChangesRequest.DataVersion に入れている token 変数です。ここに前回取得時の RetrieveEntityChangesResponse.EntityChanges.DataTokenを設定することで前回取得時以降に変更されたデータのみを対象とすることができます。

短いスパンで定期的に実行するような同期バッチの場合には、この方法が有効なのではないでしょうか?

エンティティの変更の取得の制限

以下の制限に注意ください。

  • 変更の取得では、1 つのエンティティのみが追跡されます。 トークンなしで変更の取得が実行された場合、すべてのレコードを新規として返します。 削除済みのレコードは返されません。
  • 最後のトークンが既定値の 90 日以内である場合は変更レコードは返されます。 それが 90 日 を超えている場合は、すべてのレコードが返されます。
  • 新規または更新された レコードが 5000 件を超える場合は複数ページ返されます。
  • レコードは、サーバー側ロジックによって決定される順序で取得されます。 常に、新規、または、更新されたすべてのレコード (バージョン番号で並べ替え) を取得し、それに続く削除されたレコードを取得します。
  • レコードは、変更の取得の前にレコードが作成され、削除された場合、削除されていてもレコードは取得されます。

※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。

この記事を書いた人
原田 研吾

文系プログラマ(.NET Framework、Java)。
25歳から始めたプログラムは死ぬ気で頑張った(誰も褒めてくれないので自分で誉めてます)。
気が付けば製品開発部のマネージャー・・・
弊社Dynamics CRM トレーニングの講師をやったりもします。
事業部やら役職やらありますが、『事業部内の便利屋』が一番フィットする肩書です。
アーカス・ジャパン株式会社 CRM製品
CRM製品に関するお問い合わせ
TEL 06-6195-7501
お問い合わせはこちら

同じカテゴリの記事

Translate »