Dynamics crm 2011 Microsoft CRM Web服务-查找属性元数据(一对多或一对一)

Dynamics crm 2011 Microsoft CRM Web服务-查找属性元数据(一对多或一对一),dynamics-crm-2011,crm,generic-programming,Dynamics Crm 2011,Crm,Generic Programming,我需要从Microsoft CRM 2011系统创建一个通用的导出器/导入器,但我无法确定LookupAttribute是一对一关系还是一对多关系 E.x。 我有一个叫做“电子邮件”的实体 电子邮件可以有一个“From”(这是一个查找属性,可在多个其他实体列表中查找) 然后它可以有多个“To”(也可以作为查找属性引用到多个实体列表中) 我刚刚得出的结论是我通过使用MS CRM门户网站得出的。我只是找不到任何方法来查看这些实体或属性的元数据中是否存在一对一或一对多的关系 我已经看了这个关于如何建

我需要从Microsoft CRM 2011系统创建一个通用的导出器/导入器,但我无法确定LookupAttribute是一对一关系还是一对多关系

E.x。 我有一个叫做“电子邮件”的实体

电子邮件可以有一个“From”(这是一个查找属性,可在多个其他实体列表中查找)

然后它可以有多个“To”(也可以作为查找属性引用到多个实体列表中)

我刚刚得出的结论是我通过使用MS CRM门户网站得出的。我只是找不到任何方法来查看这些实体或属性的元数据中是否存在一对一或一对多的关系

我已经看了这个关于如何建立这种关系的例子,但它并没有让我更进一步


是否有人有使用MS CRM 2011进行通用导出/导入的经验可以帮助我?

CRM有两种关系:

  • 一对多:一个实体上的查找,另一个实体上的网格
  • 多对多:两个实体上的网格
没有一对一的关系。您正在查看查找。您看到的90%的查找都很简单,您可以选择一种实体类型的一条记录

但是,有专门的系统字段查找,称为活动方。这些水有点混浊。有些活动方查找允许多个记录选择,有些链接到多种类型的实体。这意味着您可以使用多个实体类型的多条记录进行活动方查找。我想你可以称之为“多(实体)的一对多(记录)”

例如在电子邮件上;
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

您正在尝试导出/导入什么?您是在尝试转移解决方案还是只是一些定制?“发件人”和“收件人”不是查找字段,它们是称为“参与方列表”的特殊CRM字段,不能手动创建。基本上,它们是活动方的1:N,其中活动方可以是对该方列表字段的任何已定义系统实体的引用,也可以是带有电子邮件的简单字符串。CRM不支持一对一关系。你的问题太笼统了。很好的回答詹姆斯,昨天我检查了
AttributeType
属性,但没有找到
目标
如果你看你的输出(和我得到的一样)-你如何从输出中判断“To”是“一对多”而“from”是“一对多”呢?@CoBolt我确实研究过,但目前我不确定如何在上面的代码中确定它。您可能可以在
RetrieverRelationshipRequest
中找到答案(或者询问关系)。作为一个后备位置;由于我们这些凡人(例如,不是微软)无法自定义系统以添加
PartyList
,因此在CRM的主要版本中,
PartyList
字段的数量几乎是静态的。因此,您可以手动映射这些详细信息—虽然不是很好,但可能是实现目标的最快方法。我已经研究了电子邮件实体之间的关系。但我还没有找到任何与“from”或“to”属性相关的属性。就像你说的那样,我们可以用活动做一个特例,但我真的想避免这种情况