Dynamics crm 2011 从活动响应中检索客户Id的智能方法

Dynamics crm 2011 从活动响应中检索客户Id的智能方法,dynamics-crm-2011,Dynamics Crm 2011,我正在从CRM 2011检索客户id。 我正在使用活动响应实体,但它适用于包含客户查找的任何其他实体 到目前为止,我找到的唯一方法是: var customerGuid = ((EntityReference) ((EntityCollection) ebCampaignResponse.Entity.Attributes["customer"]).Entities[0] .Attributes["partyid"]).Id; 我认为这太复杂了

我正在从CRM 2011检索客户id。 我正在使用活动响应实体,但它适用于包含客户查找的任何其他实体

到目前为止,我找到的唯一方法是:

var customerGuid =
    ((EntityReference)
        ((EntityCollection) ebCampaignResponse.Entity.Attributes["customer"]).Entities[0]
            .Attributes["partyid"]).Id; 
我认为这太复杂了,我错过了一些东西。有没有更好的办法

改进代码:

var customerGuid = Guid.Empty;
EntityCollection customer = null;
if (ebCampaignResponse.Entity != null && ebCampaign.Entity.Contains("customer")) 
    customer = (EntityCollection) ebCampaignResponse.Entity.Attributes["customer"];

if(customer != null && customer.Entities != null && customer.Entities[0] != null)
    customerGuid = ((EntityReference)(customer.Entities[0]
            .Attributes["partyid"])).Id;

如果customer属性为null,则代码容易出错;虽然您检索它的方式是正确的,但我更希望这样做的方式更简洁,如下所示

var customer = ebCampaignResponse.Entity.GetAttributeValue<EntityCollection>("customer").Entities.FirstOrDefault();
if(customer != null) {
var customerGuid = customer.GetAttributeValue<EntityReference>("partyid").Id;
}

如果在if语句中声明Guid,则实体集合没有FirstOrDefault和GetAttributeValue方法。该if将包含您的整个逻辑,我的意思是,如果您的客户最初不在场,那么进一步处理有什么意义。这一切都取决于你想做什么。正如我所说,这只是您代码的格式化版本。对于EntityCollection,很抱歉我错过了那里的
Entities
关键字。代码现在已更正。当客户为空时,这没有帮助。我仍然得到一个错误,说给定的键不在字典中。我已经更新了代码以包含这种可能性。伙计,堆栈溢出是为了帮助你找到出路,而不是为你编码。这些错误是最常见的错误,也是最具描述性的错误
KeyNotFoundException
表示客户不在场,因此相应地修改代码并在代码中处理这种情况。
var customer = ebCampaignResponse.Entity.GetAttributeValue<EntityCollection>("customer").Entities.FirstOrDefault();
if(customer == null) return;
var customerGuid = customer.GetAttributeValue<EntityReference>("partyid").Id;