Dynamics CRM のブログで紹介されていた Configuration Data Utility がかなり使えそうなので使ってみました。使い方を覚書として記載します。このツールはかなり使えるようです。紹介されている記事は次のリンク参照。

- ISV Utilities for Comparing Customizations and Transferring Configuration Data
http://msdn.microsoft.com/en-us/library/dd442453.aspx
- ISV Utilities for Comparing Customizations and Transferring Configuration Data
http://blogs.msdn.com/crm/archive/2010/01/14/isv-utilities-for-comparing-customizations-and-transferring-configuration-data.aspx

ツールは次のリンク先からダウンロードできます。

ConfigurationDataUtility.exe

詳しく使い切れていませんが、本ツールは非常によくできていると思います。マスタとして使用しているエンティティのデータを環境間(開発、検証、プロダクション)で維持しやすくなります。エクスポート、インポートでエンティティのGUIDは失われません。GUIDを維持してくれるのはありがたいです。また、親子関係のデータをエクスポート、インポートしてもLOOKUPを保持してくれたり、重複データが存在すれば更新を行ってくれます。詳しく内部を確認仕切れていませんが、同一データの存在判定は賢く行っているみたいです。

更新か登録かの判定は次のアルゴリズムで行っているみたいです。(ソースを見た限りはですが)

  1. GUIDに一致するレコードが存在する場合は更新
  2. 1.ないとき、主属性と値が一致する項目が1つ存在する場合は更新
  3. 2.の処理で複数見つかった場合はエラー
  4. 2.の処理でレコードが道からなかった場合は新規作成

状態のアクティブ、非アクティブ設定も行ってくれます。

マスタやコンフィグレーションで使用しているエンティティデータを環境間で同期を取れるようにしたい場合、このツールの使用を検討してみる価値はあります。

1. まず使えるようにする

いきなりですが、このツール、エンティティのデータに日本語が入っていると文字化けします。そこで、冒頭で紹介したリンクから 自己回答形式の exe をダウンロードしファイルを展開します。ソリューションが付属するので次の箇所を修正します。

修正場所は Exporter.cs の 149行目 (Exporte メソッド内) あたりです。Encoding.ASCII としている箇所をコメントして、 Encoding.UTF8 に変更します。こうしないと、エクスポート時に作成される xml ファイルのエンコーディングが ascii-us になって日本語が文字化けします。

Exporter.cs  の 149行目(Exporte メソッド内)あたり
//XmlTextWriter writer = new XmlTextWriter(OutputPath, Encoding.ASCII);
XmlTextWriter writer = new XmlTextWriter(OutputPath, Encoding.UTF8);
この記述に変更しないと、出力されるxmlファイルのエンコーディングが ascii-us になって、日本語が化ける。

ビルドが成功すれば準備完了です。早速使ってみます。

2. エクスポートしてインポートしてみる

特定の環境でエンティティレコードをエクスポートして、 インポートしてみます。ちなみに動作確認は OnPremise (AD認証) で Dynamics CRM がインストールされた環境で行っています。

2.1 エクスポートする

ビルドした exe を実行します。Export と Import ウィザードを開始するフォームが起動します。とりあえずエンティティレコードをエクスポートするため、 Export Data ボタンをクリックします。

Export ウィザードが起動するので、 Dynamics への URL と 組織名を入力して Next ボタンをクリックします。

 

エクスポートするエンティティの一覧が表示されるので、エクスポートするカスタムエンティティを選択します。エクスポート設定は、 Save As ボタンでサーブすることもできます。エクスポートするエンティティを選択したら、 Next ボタンをクリックします。

出力先を指定して Next ボタンをクリックします。

サマリが表示されるので、 Export ボタンをクリックして エクスポートを開始します。

エクスポートが完了したら Close ボタンをクリックしてエクスポートを終了します。

2.2 インポートを行う

2.1でエクスポートした ファイルをインポートします。インポートを行う環境で Configuration Data Utility を起動し、画面の Import Data ボタンをクリックします。Import Data ウィザードが始まるので、Dynamics CRM の URL と 組織名を入力して Next ボタンをクリックします。

インポートする xml ファイル を選択して Next ボタンをクリックします。

インポートのサマリが表示されるので、問題なければ Import ボタンをクリックします。

インポートがかんりょうしたら Close ボタンをクリックします。

データを確認すると、 新規データは GUID が維持されたままインポートされます。また、データが存在すれば更新されていると思います。

3. まとめ

今回の説明は以上です。このツール自身は別のブログで紹介したのですが、実際に使ってみました。[Dynamics CRM] MSCRM 4.0 Bulk Data Export Tool を使えるようにする で紹介した Bulk Data Export Tool とともに環境のメンテナンスに有用なツールだと思います。

気づくころには遅いのですが、マスタやコンフィグ用に使用するエンティティはレコードのGUIDも含めてマスタデータとして管理するほうがよいですね。そう気づいたころには手遅れってことになっていることもあると思いますが。

Configuration Data Utilityは、マスタや構成用に使用しているエンティティ(もちろんそのほかのエンティティも含む)を環境間でインポート、エクスポートするのに使用できる便利なツールです。常にこのツールを使えばGUIDが維持されてデータの登録されまた更新を行ってくれます。環境間でマスタの維持はGUID縛りのあるDynamicsでは頭の痛い問題です。そのためこのツールを使用する検討をするのは価値のあることだと思います。

追記(2010/01/22) :日本のDynamics CRM Team Blog でも、本ツールの紹介がされています(こちら)。日本語訳だと Visual Studio 2008 用 CRM 4.0 カスタム エンティティ データ移行ツール というそうです。