顧客企業のセキュリティ用件により、各ビジネスデータのアクセスログを取得する必要があることがあります。自作しようと思っていたのですが、すでにかなりうまく動くCRM 4.0 の Audit Plugin が公開されていたので、本記事では日本語の環境で使用できるようにする手順を記載します。

ただし、記載時のAudit Plugin は参照(Retrieveメッセージ)ではうまく動かず、対象とするEntityの作成、更新、削除、状態変更などのメッセージにおいて、監査ログ用のEntity に監査レコードが作成できるようになっています。

プラグイン登録には、下記サイトで公開されている(CRM SDK にも付属しています)CRM Plugin Registration Tool を使用します。exe版も公開されており、コンパイルなしで動かせます。最新版は非常によくできていてGoodです。

-CRM Plugin Registration Tool
http://code.msdn.microsoft.com/crmplugin

1. CRM Audit Plugin のダウンロード

次のサイトからDynamics CRM 4.0 Audit Plugin をダウンロードします。下記URLのダウンロードページで"Compiled Version / Customisations / Documentation" を選択してダウンロードします。

Microsoft Dynamics CRM 4.0 Audit Plugin
http://crmaudit.codeplex.com/

ダウンロードしたファイルを解凍すると、Custom.Crm.Audit.dll, CRM 4 Audit Plug-in Overview.docx, customizations.xml という3つのファイルが作成されます。それぞれ、プラグインの本体と、プラグインのインストールと簡単な使い方、Entityのカスタマイズファイルです。

2. Plugin の登録

プラグインの登録はPlugin Registration Tool を使用します。ダウンロードするURLは本記事の冒頭に掲載しています。SDKにも付属していますが、最新版を取得したほうがよいでしょう。ここでは、exe版をダウンロードした前提で登録方法を記載します。

登録する内容は次のとおり

登録メッセージ 対象エンティティ プラグインが呼びだされる対象の属性
Create contact (取引先担当者) すべて
Update contact (取引先担当者) すべて

さっそく登録してみます。

2.1 Plugin Registration Tool の起動とCrmService への接続

ダウンロードしたPlugin Registration Tool を起動します。Plugin Registration Tool は1 AD 認証で CRM サーバに接続できるマシン上で実行してください。下図のようにConnections ウィンドウにDiscoveryServer のマシン名と、接続ユーザ名、ドメイン名を指定します。ここで、ユーザ名は展開管理者(既定ではCRMインストールユーザ)を指定します。CRMのシステム管理者ではないので注意してください。Connect ボタンをクリックして DiscoveryService に接続します。

 Discovery Service に接続したら、接続する組織を選択して、Connect ボタンをクリックします。下図ではdynに接続するようにしています。

2.2 アセンブリの登録

dyn に接続した後、Audit プラグインを登録します。タブ画面のRegisterメニューからRegister New Assembly を選択します。

Plugin の登録画面が表示されるので、codeplex のサイトからダウンロードしたAuditプラグイン Custom.Crm.Audit.dll をStep#1 で選択します。プラグインの格納場所はDatabase (既定) を選択します。 Disk はデバッグ時などに指定します。Register Selected ボタンをクリックします。

成功すると次のようなダイアログが表示されるので、登録画面を閉じます。

2.3 Step の登録

プラグインが含まれるdllを登録した後、Step を登録します。 下図のように、Custom.Crm.Audit クラスを右クリックして表示されるコンテキストメニューから Register New Step を選択します。

Step の登録画面が表示されます。この画面で取引先担当者のCreate に対してプラグインを登録してみます。下図のようにMessage に Create, Primary Entity に contact を選択します。それ以外は既定値のままでOKです。プラグインを起動させるためのフィルタ属性は必要に応じて設定します。Register New Step ボタンをクリックしてStep を登録します。Message項目など、項目が候補表示されるのでとても入力が簡単になっています。

Audit プラグインをうまく動かすためにImage の設定をします。 下図のように登録されたStep を 右クリックし Register New Image をクリックします。

Create メッセージに対するImage なので、 ImageType に Post Image を選択します。Entity Alias は Target と入力します。Register Image ボタンをクリックしてImage の登録を行います。

同様にUpdate メッセージに対しても、Step とImage を登録します。下図のように contact エンティティに対するUpdate メッセージ用のStep を登録します。

登録したStep に対して Image を登録します。 Update の場合、変更前後の値を取得するためにImageType はPost Image と Pre Image を選択し、Entity Alias に Target を入力します。Register Image ボタンをクリックします。

以上で取引先担当者Entity レコードに対する Create, Update 用の監査用Audit プラグインの登録が行えました。 

3. カスタマイズの登録

Audit Plugin はAudit, Audit Detail (論理名:custom_audit, custom_audit_detail) に監査ログレコードを登録します。 Audit プラグインをダウンロードしたファイルに含まれていたcustomizations.xml をインポートします。

日本語用のDynamics CRM では、そのままでは、customizations.xml を読み込めないので、修正を行います。

3.1 customizations.xml ファイルの編集

ダウンロードしたAudit プラグインに含まれていた customizations.xmlをコピーして customizations_ja.xml というファイルを作成します。customizations_ja.xml をノートパッドなどで開いて1033 という文字を 1041 に置換します。Entity名やラベル名は英語表記のままなので、必要に応じて日本語に変更してください。修正したファイルをUTF-8形式で保存します。

3.2 カスタマイズのインポート

下図はカスタマイズのインポート画面で、customizations_ja.xml をアップロードした画面です。すべてのレコードを選択して、リスト上部のセンタk吹田カスタマイズのインポートボタンをクリックしてカスタマイズをインポートします。

3.3 Audit Entity のメニューを追加

ナヴィゲーションの設定→エンティティのカスタマイズから、Audit, Audit Detail という名前でEntity が登録されていることを確認します。ナヴィゲーションの設定メニューにAudit メニューを表示するため、custom_audit エンティティのレコードをダブルクリックします。

エンティティのカスタマイズ画面の全般タブのこのエンティティが表示される領域セクションで設定にチェックを入れて保存して閉じるボタンをクリックして画面を閉じます。

3.4 カスタマイズの公開

最後にエンティティのカスタマイズ画面のリストからcustom_audit, custom_audit_detail エンティティを選択してリスト上部の公開ボタンでカスタマイズを公開します。

4. 動作確認

ブラウザを一度閉じて、再ログインを行います。ナヴィゲーションのワークプレース画面で取引先担当者を選択し、取引先担当者一覧のリスト上位の新規ボタンをクリックします。

下図のように新規作成画面で適当に情報を入力して保存ボタンをクリックします。まだ画面は閉じません。

次に、同画面で役職を変更して(下図参照) 保存して閉じるボタンをクリックし、Entityレコードの編集画面を閉じます。

ナヴィゲーションメニューの設定をクリックし表示されるAudit メニューをクリックして右ペインにAudit Entity レコードのリストを表示します。表示するとCreate, Update の監査レコードが登録されていることが確認できます。

監査レコードをダブルクリック(下図はUpdateの監査レコードの編集画面) して詳細メニューのFiled Level Changes をクリックして関連ビューを表示すると、編集されたフィールド項目の編集前、編集後の値が監査ログの詳細レコードとして登録されていることが確認できます。

5. そのほかのオプション

CRM Audit Plugin では Plugin Registration Tool でプラグインのステップを登録するときにUnsecure Configurationにコンフィグレーション設定を指定することができます。

コンフィギュレーションは、Configurationをルート要素とするXMLで指定します。次の表の項目を子要素とし、各コンフィグ用の要素に設定値を指定します。次の例は、custom_auditに監査対象EntityへのLookup 属性を定義した場合に、その属性名を指定することで、CRM Audit Plugin がcustom_audit のEntity レコードに監査対象Entityレコードへのlookupを設定してくれるようにする例です。例では取引先担当者contactレコードへの1:N属性用のcustom_auditに追加した属性 new_contactid をlookup設定用の属性としてAudit プラグインに指定します。

<Configuration>
  <KeyField>new_contactid</KeyField>
</Configuration>

コンフィグレーション項目 説明
AuditEntity 監査ログエンティティ名。通常はcustom_audit。
AuditDetailEntity 監査詳細ログエンティティ名。通常はcustom_audit_detail
MaxLength

監査詳細ログエンティティの変更前後の属性値の最大長。既定値は100
MaxLengthより文字数が大きい場合は、詳細ログエンティティレコードのノートとして変更前後の値が設定される。

MessageTooBig 変更前または後の値の文字列がMaxLengthより長い場合、そのことを説明する文字列。AuditDetailEntityのレコードの変更前または後の属性値に設定される。
KeyField 監査対象のEntityへのルックアップフィールドをcrm_auditに追加した場合に、そのLOOKUP型の属性名を指定する。このフィールドが指定されると、属性に監査対象のEntittyデータのGUIDが設定される用になる。

6. まとめ

説明は以上です。Audit プラグインはソースが公開されているので、各クライアントのセキュリティ要件に合うように修正することで業務データのアクセス、編集の監査ログを取得できるようになります。記事の作成時点では、Crm Audit Plugin は、Retrive, RetrieveMulple メッセージなどで監査ログを作成できないので、必要に応じて修正する必要があります。照会処理時のRetrieveメッセージに対してプラグインが起動されるようにStepを登録するとエラーが発生します。

おまけ そのほかの業務ログ取得方法

監査ログを取得する方法としてそのほかにワークフローを作成する方法が提案されています。具体的なツールや方法は下記リンクを参照。ワークフローを使用する方法では監査対象のEntityごとにワークフローと監査用Entityを作成するのでカスタムEntityが増加すると保守が大変になります。プラグインを使用する方法がシンプルかつ簡単なため優れていると思います。

- Business Data Auditing Accelerator for Microsoft Dynamics CRM Online
http://blogs.msdn.com/dynamicscrmonline/archive/2009/06/26/business-data-auditing-accelerator-for-microsoft-dynamics-crm-online.aspx

- Accelerators for Microsoft Dynamics CRM
http://crmaccelerators.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27404
- Use Workflow to Configure Business Data Auditing in Microsoft Dynamics CRM 4.0
http://blogs.msdn.com/crm/archive/2008/06/13/use-workflow-to-configure-business-data-auditing-in-microsoft-dynamics-crm-4-0.aspx