从审核详细信息响应获取实体记录值

时间:2013-04-22 10:04:21

标签: dynamics-crm-2011 dynamics-crm dynamics-crm-online

启用了对实体的审核,删除后我想要实体记录。所以 我试图从审计实体记录中获取,如下所示:

RetrieveAuditDetailsRequest request = new RetrieveAuditDetailsRequest();
request.AuditId = _selectedId;
RetrieveAuditDetailsResponse response = (RetrieveAuditDetailsponse)_orgService.Execute(request);
EntityReference ObjectId = (EntityReference)response.AuditDetail.AuditRecord.Attributes["objectid"];
string ObjectName = ObjectId.LogicalName;
Guid Id = ObjectId.Id;
ColumnSet col = new ColumnSet(true);
Entity ent = _orgService.Retrieve(ObjectName,Id,col);

它抛出一个错误“预期非空Guid”。 仅供参考,我想要这个记录值,因为我想通过再次创建它来恢复/恢复记录。

请帮忙怎么回事?

2 个答案:

答案 0 :(得分:0)

"预计非空Guid"每当您尝试检索具有空GUID(Guid.Empty,00000000-0000-0000-0000-000000000000)的内容时,都会引发错误。我猜你的_selectedId没有设置为实际的GUID。也许您正在从Nullable GUID设置它并且您正在调用ValueOrDefault(),这导致它被设置为空Guid,并且在您的请求中失败?

答案 1 :(得分:0)

您正尝试使用以下代码检索已删除的记录:

string ObjectName = ObjectId.LogicalName;
Guid Id = ObjectId.Id;
ColumnSet col = new ColumnSet(true);
Entity ent = _orgService.Retrieve(ObjectName,Id,col);

由于没有这样的记录(它被删除),这将失败,因为没有这样的记录。与CRM 4及更早版本不同,2011年没有软删除,一旦删除它就会从数据库中消失。

将其替换为以下代码:

RetrieveRecordChangeHistoryRequest retrieveRequest = new RetrieveRecordChangeHistoryRequest();
changeRequest.Target = new EntityReference(ObjectName, Id);

RetrieveRecordChangeHistoryResponse response = 
   (RetrieveRecordChangeHistoryResponse)_orgService.Execute(retrieveRequest);

if (response.AuditDetailCollection != null)
{
var auditDetails = response.AuditDetailCollection;

// Do work
}

然后通过auditDetails枚举以获取正确的属性。

您可以在http://blogs.msdn.com/b/crm/archive/2011/05/23/recover-your-deleted-crm-data-and-recreate-them-using-crm-api.aspx找到更多信息。