如何确定PartyId的实体类型?

时间:2016-08-17 21:56:04

标签: plugins dynamics-crm-2013 phone-call

使用Dynamics CRM 2011.我正在学习ActivityPartys。

由于ActivityParty的PartyId是EntityReference,因此为了设置PartyId,您需要知道实体类型。

我正在尝试使用与现有电话相同的收件人创建新的PhoneCall(在插件中)。我可以使用ActivityPartySet中的LINQ检索收件人的PartyId Guid,但是如何确定实体类型,可以是帐户还是联系人?

相反,是否可以在不知道EntityLogicalName?

的情况下设置PartyId

更新

感谢您的回复,但我误解了您或您误解了我想要确定的内容。这是我现在的代码:

 // Get the oldPhoneCall's To ActivityParty list:
                    EntityCollection Recipients = oldPhonecall.GetAttributeValue<EntityCollection>("to");

                    // Use the first one to find the partyId 
                    // Need to do it this way because we don't know if partyId points to an Account or a Contact:
                    Guid activityPartyId = Recipients.Entities[0].Id;
                    var activityParty2 = new Xrm.ActivityParty();

                    context.GetWorkflowHelper().serviceContext.ClearChanges();

                    var queryParty = from ap in context.GetWorkflowHelper().serviceContext.ActivityPartySet
                                     where ap.ActivityPartyId.Equals(activityPartyId)
                                    select new { ap.PartyId, ap.LogicalName };
                    foreach (var party in queryParty)
                    {
                        activityParty2.PartyId = new EntityReference(party.LogicalName, party.PartyId.Id);
                    }

我发现在foreach中,party.LogicalName是ActivityParty。这不是oldphonecall的收件人的实体类型,在我的测试案例中是联系人,但在其他情况下是帐户。

如何确定实体逻辑名称?我哪里出错?

UPDATE2:

在SQL中,我可以看到字段PartyObjectTypeCode,我知道我可以将其映射到实体类型(其中1 = Account,2 = Contact等)但是当我查询ActivityPartySet时,似乎不存在这样的字段。

更新3:

知道了 -

 foreach (var party in queryParty)
                    {
                        activityParty2.PartyId = new EntityReference(party.PartyId.LogicalName, party.PartyId.Id);
                    }

2 个答案:

答案 0 :(得分:4)

  

如何确定实体类型,可以是帐户或   联络?

PartyId的类型为EntityReference,其中LogicalName会为您提供相关的实体类型。

var entityLogicalName = context.EmailSet.FirstOrDefault().To.FirstOrDefault().PartyId.LogicalName
  

相反,是否可以在不知道的情况下设置PartyId   EntityLogicalName?

不,在设置CRM实体引用时,Id和LogicalName都是必填字段。

答案 1 :(得分:3)

要设置PartyId,您需要知道实体的LogicalName。

您没有发布代码,但如果您能够从收件人检索ID,您还可以检索LogicalName(它们存储为EntityReference)