0

特定のレコードの特定のバージョンを復元しようとしています。

問題のエンティティの監査がオンになっています。私のプログラムは、crm レコードから特定のバージョンを選択し、すべてのプロパティと変更を元に戻して、古いバージョンのレコードが復元されるようにする必要があります。

これは基本的に、生産システムで偶然に発生したいくつかの変更を元に戻すことです。Xrm を使用してサーバーにアクセスしています。

また、Xrm オブジェクトまたは xrm データセットで関連する関数をいくつか見つけようとしましたが、見つかりません。

これまでのところ、特定のレコードのバージョン履歴を取得する次の方法を見つけました。

            var xrm = new XrmServiceContext(CrmHelper.GetCrmConnection(ConfigurationManager.ConnectionStrings["Xrm"] + "SG"));

            var changeRequest = new RetrieveRecordChangeHistoryRequest();
            changeRequest.Target = new EntityReference("account", new Guid("{D4E0990C-41C8-E211-B824-005056997F7A}"));

            var changeResponse = (RetrieveRecordChangeHistoryResponse)xrm.Execute(changeRequest);
            var details = changeResponse.AuditDetailCollection;

            for (int i = 0; i < details.Count; i++)
            {
                if (typeof (AttributeAuditDetail).Name == details[i].GetType().Name)
                {
                    AttributeAuditDetail detail = details[i] as AttributeAuditDetail;

                    Entity entity = detail.OldValue;
                }
            }

ただし、変更を元に戻すにはどうすればよいdetail.OldValueですか? すべての属性に対して foreach ループを作成し、レコードの属性を古い属性に設定する必要がありますか?

4

1 に答える 1

2

唯一の選択肢はAuditDetailCollection、誤って変更が発生した時点まで保存されている監査履歴をたどって、記録の元の状態を再構築することです。

これは注意が必要です。たとえば、参照整合性の問題が発生する可能性があります。また、カスタム ビジネス ロジック (プラグイン、ビジネス ルール) によって、意図した更新がブロックされたり、望ましくない副作用 (ワークフロー) が発生したりする場合があります。

幸いなことに、修正の更新は監査テーブルに記録されるため、それも修正できます。:-)

于 2015-09-03T18:41:47.773 に答える