Ошибка при создании нескольких отношений N: 1 для объекта - PullRequest
1 голос
/ 19 января 2011

Я использую MetadataService для создания 4-х сущностей и создания отношений между ними.

Сущности: TrexCalendar, TrexFrom, TrexTo, TrexAddress

отношения (все 1: многие): TrexFrom - TrexAddress, TrexCalendar - TrexFrom, TrexTo - TrexAddress, TrexCalendar - TrexTo

Когда я запускаю свой код, все сущности создаются успешно, и первое, второе и четвертое отношенияуспешно создан.

Не удается создать третье отношение со следующими сведениями:

0x80047007 Объект: new_trexaddress связан с объектом с идентификатором: 7a6af338-bc23-e011-ad8c-9f5d300a22fe.Невозможно создать другое родительское отношение с Entity: платформа new_trexto

7a6af338-bc23-e011-ad8c-9f5d300a22fe - это идентификатор для сущности TrexFrom.

Так что это похоже на SDKне позволит мне создать отношение 1: N между TrexTo и TrexAddress, потому что существует отношение 1: N между TrexFrom и TrexAddress.

Что странно, так это то, что я могусоздайте это отношение вручную с помощью веб-интерфейса Dynamics.

Есть идеи, что может произойти?Как я могу создать оба отношения программно?

Я использую следующий код для создания отношений:

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);
}

1 Ответ

4 голосов
/ 19 января 2011

Если оба отношения установлены как «Родительские», вам, вероятно, потребуется установить одно из них как «Ссылочные»

...