【发布时间】:2011-01-19 14:13:20
【问题描述】:
我正在使用 MetadataService 创建 4 个实体并在它们之间创建关系。
实体是:TrexCalendar、TrexFrom、TrexTo、TrexAddress
关系(都是 1:Many)是:TrexFrom - TrexAddress、TrexCalendar - TrexFrom、TrexTo - TrexAddress、TrexCalendar - TrexTo
当我运行我的代码时,所有实体都已成功创建,第一、第二和第四个关系也已成功创建。
创建第三个关系失败并显示以下详细信息:
0x80047007 实体:new_trexaddress 是具有 id 的实体的父级: 7a6af338-bc23-e011-ad8c-9f5d300a22fe。无法创建另一个父母 与实体的关系:new_trexto 平台
7a6af338-bc23-e011-ad8c-9f5d300a22fe 是 TrexFrom 实体的 ID。
因此,SDK 似乎不允许我在 TrexTo 和 TrexAddress 之间创建 1:N 关系,因为 TrexFrom 和 TrexAddress 之间存在 1:N 关系。
奇怪的是,我可以使用 Dynamics Web 界面手动创建这种关系。
任何想法可能会发生什么?如何以编程方式创建这两种关系?
我正在使用以下代码来创建关系:
OneToManyMetadata relationship = new OneToManyMetadata
{
ReferencedEntity = "new_trexto",
ReferencingEntity = "new_trexaddress"
SchemaName = "new_trexto_trexaddress",
AssociatedMenuBehavior = new CrmAssociatedMenuBehavior { Value = AssociatedMenuBehavior.UseCollectionName },
CascadeAssign = new CrmCascadeType { Value = CascadeType.NoCascade },
CascadeDelete = new CrmCascadeType { Value = CascadeType.RemoveLink },
CascadeMerge = new CrmCascadeType { Value = CascadeType.NoCascade },
CascadeReparent = new CrmCascadeType { Value = CascadeType.NoCascade },
CascadeShare = new CrmCascadeType { Value = CascadeType.UserOwned },
CascadeUnshare = new CrmCascadeType { Value = CascadeType.NoCascade }
};
LookupAttributeMetadata lookup = new LookupAttributeMetadata
{
SchemaName = lookupName,
RequiredLevel = new CrmAttributeRequiredLevel(AttributeRequiredLevel.Recommended),
DisplayName = CrmServiceUtility.CreateSingleLabel("TrexTo - TrexAddress", 1033)
};
CreateOneToManyRequest request = new CreateOneToManyRequest
{
OneToManyRelationship = relationship,
Lookup = lookup
};
try
{
metadataService.Execute(request);
Debug.Print("Relationship created successfully");
}
catch (System.Web.Services.Protocols.SoapException ex)
{
Debug.Print(ex.Detail.InnerText);
}
【问题讨论】:
-
我可以通过省略设置任何 Cascade 值的代码行来实现此功能。
标签: dynamics-crm dynamics-crm-4