使用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);
}
答案 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)