如何恢复记录的特定版本
How to restore a specific version of a record
我正在尝试为某些给定记录恢复特定版本。
已对相关实体进行审核。我的程序需要 select 来自 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
中的审核历史一直到发生意外修改的时间点来重建记录的原始状态。
请注意这可能很棘手。例如。您可能 运行 陷入参照完整性问题。此外,自定义业务逻辑(插件、业务规则)可能会阻止预期更新或产生不良副作用(工作流)。
幸运的是,您的更正更新将记录在审核中 table,因此您也可以更正它。 :-)
我正在尝试为某些给定记录恢复特定版本。
已对相关实体进行审核。我的程序需要 select 来自 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
中的审核历史一直到发生意外修改的时间点来重建记录的原始状态。
请注意这可能很棘手。例如。您可能 运行 陷入参照完整性问题。此外,自定义业务逻辑(插件、业务规则)可能会阻止预期更新或产生不良副作用(工作流)。
幸运的是,您的更正更新将记录在审核中 table,因此您也可以更正它。 :-)