Dynamics CRM 2011 削除サービスの役割

みなさん、こんにちは。

今回は US チームのブログより、Microsoft Dynamics CRM 2011 の
削除サービスに関する記事を紹介します。

こちらのブログでも以前、削除サービスの動作がバージョンによって
異なることを こちら の記事で紹介しましたが、今回はより詳細な内容を
解説しています。

元記事 : Dynamics CRM 2011 DeletionService Async Maintenance Operation Demystified

最近お客様より Microsoft Dynamics CRM 2011 における削除サービスの
機能に関して質問を受けました。背景を簡単に説明すると、Microsoft Dynamics
CRM 4.0 の頃は、画面からレコードを削除した場合には実際のレコードは削除
されず、各レコードの DeletionStateCode 削除フラグが 2 に設定されるだけで、
後から削除サービスがデータベースより物理削除を行っていました。

Microsoft Dynamics CRM 2011 からはこの動作が変更され、画面からレコードを
削除したタイミングで、データベースからも物理削除されるようになりました。では
一体、削除サービスはなにをしているのでしょうか。

削除サービスジョブは、組織全体に関わる処理と各レコードの処理に関わる処理が
存在します。重要なポイントとしては、レコードを画面から削除した場合、その後処理を
実行するために、SubscriptionTrackingDeletedObject テーブルに削除したレコード
の情報を格納しています。削除サービスはこちらの情報を利用して処理を行います。

仮に、1 件の取引先企業レコードがあったとします。

image

アプリケーションの画面よりこちらのレコードを削除すると、レコードはデータベース
より物理削除されます。しかし GUID の情報は SubscriptionTrackingDeletedObject
テーブルに挿入されます。削除サービスが処理を実行する際、p_GetTablesForDeletion
ストアドプロシージャーを実行し、後処理に必要な情報を取得します。

image

どのようなレコードが削除対象になるのでしょうか。主には重複検出用のレコードと
アクセス制御のための PrincipalObjectAccess テーブルのレコードが対象となります。

以下に、削除サービスの動作の概要を示します。

- p_GetTablesForDeletion ストアドプロシージャーを利用して、削除対象を収集します。
- 収集した情報より以下のテーブルのレコードを削除します。
   ・ 重複検出用のレコード
   ・ PrincipalObjectAccess テーブルのレコード
- Outlook クライアント同期の情報から期限切れものを削除します。
- SubscriptionTrackingDeletedObject のレコードを削除します。
- アクティビティ フィードで利用する PostRegarding を削除します。

以上が Dynamics CRM 2011 の削除サービスの役割です。

まとめ

Microsoft Dynamics CRM 2011 より、エンティティレコード削除時の動作が論理削除から
物理削除に変更されましたが、依然削除サービスは重要な役割を担っています。

削除サービスのスケジュール変更に関しては、再度のこちらの記事をご覧いただき、
注意をご確認ください。

- Dynamics CRM サポート 中村 憲一郎