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

Dynamics crm 2011 从审核详细信息响应获取实体记录值,dynamics-crm-2011,dynamics-crm,dynamics-crm-online,Dynamics Crm 2011,Dynamics Crm,Dynamics Crm Online,实体审核已启用,我需要删除后的实体记录。因此 我试着从审计实体记录中得到,比如: RetrieveAuditDetailsRequest请求=新建RetrieveAuditDetailsRequest(); request.AuditId=_selectedId; RetrieveAuditDetailsResponse=(RetrieveAuditDetailResponse)\u orgService.Execute(请求); EntityReference ObjectId=(Entity

实体审核已启用,我需要删除后的实体记录。因此 我试着从审计实体记录中得到,比如:

RetrieveAuditDetailsRequest请求=新建RetrieveAuditDetailsRequest();
request.AuditId=_selectedId;
RetrieveAuditDetailsResponse=(RetrieveAuditDetailResponse)\u orgService.Execute(请求);
EntityReference ObjectId=(EntityReference)response.AuditDetail.AuditRecord.Attributes[“ObjectId”];
字符串ObjectName=ObjectId.LogicalName;
Guid Id=ObjectId.Id;
ColumnSet col=新列集(true);
实体ent=_orgService.Retrieve(ObjectName、Id、col);
它抛出了一个错误“预期的非空Guid”。 仅供参考,我想要此记录值,因为我想通过再次创建来恢复/恢复记录


请帮忙,有什么问题吗

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

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

string ObjectName = ObjectId.LogicalName; Guid Id = ObjectId.Id; ColumnSet col = new ColumnSet(true); Entity ent = _orgService.Retrieve(ObjectName,Id,col); 字符串ObjectName=ObjectId.LogicalName; Guid Id=ObjectId.Id; ColumnSet col=新列集(true); 实体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 } RetrieveRecordChangeHistoryRequest RetrieverRequest=新的RetrieveRecordChangeHistoryRequest(); changeRequest.Target=新的EntityReference(ObjectName,Id); RetrieveRecordChangeHistoryResponse响应= (RetrieveRecordChangeHistoryResponse)\ orgService.Execute(RetrieverRequest); if(response.AuditDetailCollection!=null) { var auditDetails=response.AuditDetailCollection; //工作 } 然后通过
auditDetails
枚举以获得正确的属性


您可以在上找到更多信息。

嗨,Daryl,首先感谢您的帮助。刚才选中的不是
\u selectedId
,而是
ObjectId.Id
为空Guid。引用的Guid为空,这怎么可能
ObjectId.LogicalName
的值正确。@TamAlkandey我以前没有处理过审核数据,因此无法为您提供更多帮助。我建议您在知道具体错误的情况下重新编写您的问题。谢谢Nick,但它引发了一个错误:
在MetadataCache中找不到名为“new\u projectdetails”的实体。
在获取
响应时。
。明白了,它似乎不是实体记录删除的审核记录。否则它会工作。你是说你从CRM中删除了实体定义吗?不仅仅是一个特定的记录。如果您已从CRM中删除了未审核的实体定义,并且没有元数据可用于从其审核日志项重建实体。否。很抱歉造成混淆。某些审核记录是在删除自定义实体的某些属性时创建的(在本例中为
new\u projectdetails
)。在这种情况下,数据恢复会抛出此错误(可能是因为您所说的)。如果是在删除任何实体记录时创建的审计记录,则其工作正常。