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 回答