Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
みなさん、こんにちは。
今回は SDK 5.0.5 で提供された監査に関連するサンプルを紹介します。
このサンプルでは以下の機能を紹介しています。
‐ 組織レベルの監査の有効化/無効化
‐ エンティティレベルの監査の有効化/無効化
- 監査レコードの取得
またサンプルは以下のフォルダにあります。
sdk\samplecode\cs\datamanagement\auditing
早速サンプルの中身を確認しましょう。
サンプルのファイル構成
サンプルは以下のファイルで構成されています。
‐ CrmServiceHelpers.cs : Dynamics CRM サーバー接続用ヘルパーファイル
‐ DeviceIdManager.cs : デバイス ID 作成用ヘルパーファイル
‐ MyOrganizationCrmSdkTypes.cs : 事前バインド用ファイル
‐ Program.cs : メインプログラム
MyOrganizationCrmSdkTypes.cs ファイルに関しては、CrmSvcUtil.exe を利用して
独自環境のファイルに置き換え、カスタムエンティティの情報を利用することも可能です。
Program.cs
サービスの作成部分は他のサンプルと同じであるため、説明は割愛します。
以下の手順で処理が行われています。
1. 75 行目で WhoAmIRequest を実行して、現在のユーザーの組織 ID を取得します。
Guid orgId = ((WhoAmIResponse)_service.Execute(new WhoAmIRequest())).OrganizationId;
2. 82行目で、現在の監査設定を保存します。
bool organizationAuditingFlag = org.IsAuditEnabled.Value;
2. 次に 83 行目で監査設定を有効にし、次の行で更新します。
org.IsAuditEnabled = true;
_service.Update(org);
3. そして 87 行目で取引先企業の監査を有効にするメソッドを呼び出します。
bool accountAuditingFlag = EnableEntityAuditing(Account.EntityLogicalName, true);
4. EnableEntityAuditing メソッド内では、180 行目で現在の設定を取得、187 行目で設定を保存し、
192 行目で監査を有効にしています。
private bool EnableEntityAuditing(string entityLogicalName, bool flag)
{
// エンティティの情報を取得.
RetrieveEntityRequest entityRequest = new RetrieveEntityRequest
{
LogicalName = entityLogicalName,
EntityFilters = EntityFilters.Attributes
};
RetrieveEntityResponse entityResponse =
(RetrieveEntityResponse)_service.Execute(entityRequest);
// 結果から EntityMetadata を取得
EntityMetadata entityMetadata = entityResponse.EntityMetadata;
// 現在の監査設定を保存し、新しい監査設定を設定
bool oldValue = entityMetadata.IsAuditEnabled.Value;
entityMetadata.IsAuditEnabled = new BooleanManagedProperty(flag);
UpdateEntityRequest updateEntityRequest = new UpdateEntityRequest { Entity = entityMetadata };
// エンティティの情報を更新
UpdateEntityResponse updateEntityResponse =
(UpdateEntityResponse)_service.Execute(updateEntityRequest);
return oldValue;
}
5. 92 行目で、監査のレコードを作製するために取引先企業の作成および更新を
行うメソッドを呼び出します。
6. 100 行目より、監査のレコードを取得します。
// RetrieveRecordChangeHistoryRequest を作成。取引先企業エンティティであることと
// 監査レコードを取得したい取引先企業の GUID を引数として設定
RetrieveRecordChangeHistoryRequest changeRequest = new RetrieveRecordChangeHistoryRequest();
changeRequest.Target = new EntityReference(Account.EntityLogicalName, _newAccountId);
RetrieveRecordChangeHistoryResponse changeResponse =
(RetrieveRecordChangeHistoryResponse)_service.Execute(changeRequest);
// 結果から AuditDetailCollection を保存
AuditDetailCollection details = changeResponse.AuditDetailCollection;
7. 109 行目で、取得した AuditDetailCollection を AttributeAuditDetail にキャストします。
8. それ以降で中身を確認して、画面に表示します。
9. 152 行目以降で監査の設定を保存しておいた元の設定に戻し、作成したレコードを削除します。
まとめ
今回はシンプルなサンプルの紹介でしたが、監査のログは管理者が定期的に確認する必要があり、
また他のサーバー等へ情報をコピーしておきたいといった要望もあると思います。
こちらのサンプルを活用することで、柔軟な監査管理が行えそうですね。
監査に関係するサンプルは他にも、 DeleteAuditDataRequest を利用したパーティションの
削除や RetrieveAuditPartitionListRequest を利用したパーティションの取得が SDK 内、
DeleteAuditDataRequest Class のページ に紹介されています。
- Dynamics CRM サポート 中村 憲一郎