我需要从Microsoft CRM 2011系统创建一个通用导出器/导入器,但我无法确定LookupAttribute是一对一还是一对多关系。
E.x。 我有一个名为“电子邮件”的实体。
电子邮件可以有一个“From”(这是一个查找属性,可以查找多个其他实体列表)
它可以有多个“To”(也可以作为查找属性引用到多个实体列表中)。
我刚刚提出的结论是我通过使用MS CRM的门户网站找到的东西。我无法找到任何方式来查看这些实体或属性的元数据,如果它是一对一或多对多的关系。
https://msdn.microsoft.com/en-us/library/gg509035.aspx#BKMK_CreateLookupAttribute
我看过这个关于如何建立这种关系的例子,但它还没有让我更进一步。
有没有人对MS CRM 2011的通用导出/导入有任何经验可以帮助我?
答案 0 :(得分:3)
CRM有两种类型的关系:
没有一对一的关系。你正在寻找一个查找。您看到的90%的查找都很简单,您可以选择一个实体类型的一条记录。
但是,有一些特殊的系统字段查找,名为活动方。这些水浑浊一点。某些活动方查找允许多个记录选择,一些链接到多个类型的实体。这意味着您可以使用多个实体类型的多个记录进行活动方查找。我想你可以称之为“许多(实体)的一对多(记录)”。
例如在电子邮件中; To
字段可以填充多个帐户和联系人记录。虽然From
字段只能有一条记录,但可以是系统用户或队列。 To
和From
都是活动方查找的示例。
因此,就您要做的事情而言,您需要检查:
AttributeMetadata.AttributeType
看看它是否是一个派对列表。
LookupAttributeMetadata.Targets
查看查找中允许的记录类型。
以下代码显示了如何针对几个不同的字段执行此操作。
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = "email",
LogicalName = "to",
RetrieveAsIfPublished = true
};
RetrieveAttributeResponse result = Service.Execute(attributeRequest) as RetrieveAttributeResponse;
Trace.WriteLine("Email - To");
Trace.WriteLine("AttributeMetadata.AttributeType: " + result.AttributeMetadata.AttributeType);
Trace.WriteLine("LookupAttributeMetadata.Targets: " + ((LookupAttributeMetadata)result.AttributeMetadata).Targets.CollectionToString(", "));
attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = "email",
LogicalName = "from",
RetrieveAsIfPublished = true
};
result = Service.Execute(attributeRequest) as RetrieveAttributeResponse;
Trace.WriteLine("Email - From");
Trace.WriteLine("AttributeMetadata.AttributeType: " + result.AttributeMetadata.AttributeType);
Trace.WriteLine("LookupAttributeMetadata.Targets: " + ((LookupAttributeMetadata)result.AttributeMetadata).Targets.CollectionToString(", "));
attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = "account",
LogicalName = "parentaccountid",
RetrieveAsIfPublished = true
};
result = Service.Execute(attributeRequest) as RetrieveAttributeResponse;
Trace.WriteLine("Account - Parent Account Id");
Trace.WriteLine("AttributeMetadata.AttributeType: " + result.AttributeMetadata.AttributeType);
Trace.WriteLine("LookupAttributeMetadata.Targets: " + ((LookupAttributeMetadata)result.AttributeMetadata).Targets.CollectionToString(", "));
输出:
Email - To
AttributeMetadata.AttributeType: PartyList
LookupAttributeMetadata.Targets: account, contact, lead, queue, systemuser
Email - From
AttributeMetadata.AttributeType: PartyList
LookupAttributeMetadata.Targets: queue, systemuser
Account - Parent Account Id
AttributeMetadata.AttributeType: Lookup
LookupAttributeMetadata.Targets: account