如何还原记录的特定版本

本文关键字:版本 记录 何还原 还原 | 更新日期: 2023-09-27 18:11:14

我正在尝试恢复某些给定记录的特定版本。

在有问题的实体上打开审计。我的程序需要从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循环,并将记录的属性设置为旧的属性?

如何还原记录的特定版本

您唯一的选择是通过遍历存储在AuditDetailCollection中的审计历史,一直到意外修改发生的时间点,来重建记录的原始状态。

请注意,这可能很棘手。例如,您可能会遇到参照完整性问题。此外,自定义业务逻辑(插件、业务规则)可能会阻止预期的更新或具有不希望的副作用(工作流)。

幸运的是,你们的纠正更新将被记录在审核表中,所以你们也可以纠正它。: -)