0

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

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”。仅供参考,我想要这个记录值,因为我想通过再次创建它来恢复/恢复记录。

请帮忙看看有什么问题??

4

2 回答 2

0

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

于 2013-04-22T10:42:40.577 回答
0

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

字符串 ObjectName = ObjectId.LogicalName;
Guid Id = ObjectId.Id;
ColumnSet col = new ColumnSet(true);
实体 ent = _orgService.Retrieve(ObjectName,Id,col);

这将失败并出现您收到的错误,因为不存在此类记录(已删除。)与 CRM 4 及更早版本不同,2011 年没有软删除,一旦删除,它就会从数据库中消失。

将其替换为以下代码:

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

RetrieveRecordChangeHistoryResponse 响应 =
   (RetrieveRecordChangeHistoryResponse)_orgService.Execute(retrieveRequest);

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

// 做工作
}

然后你通过枚举auditDetails来获得正确的属性。

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

于 2013-04-24T02:54:17.183 回答