Создайте отношения «многие ко многим» в CRM 4 и 5 в C # - PullRequest
2 голосов
/ 01 июня 2011

Мне нужно создать / определить отношение «многие ко многим» между Лидом и пользовательским объектом, а также между Контактом и пользовательским объектом.Кажется, я не могу найти примеры кода того, что я хочу сделать.

Это должно работать как в CRM 4, так и в CRM 5.

Есть ли недостатки при выполнении двух N:1 отношение вместо отношения N: N?

1 Ответ

0 голосов
/ 01 июня 2011

Вы можете сделать отношения N: N через пользовательский интерфейс, перейдя к сущностям отношения N: N. Преимущество использования отношений 2: 1 с промежуточной сущностью перед выполнением одного N: N, например, вы можете хранить атрибуты отношений (роль для отношений), а также вы можете связывать рабочие процессы через двойные отношения N: 1.

EDIT:

Чтобы создать отношения N: N с помощью кода, вы можете обратиться к справочной странице CRM 2011 SDK «Создание и получение связей сущностей», приведенной ниже. Вы сможете сделать что-то похожее через сервис метаданных в 4.0 -

Создание отношения сущностей N: N

В следующем примере используется метод ElptableCreateManyToManyRelationship, чтобы убедиться, что сущности Account и Campaign могут участвовать в отношениях сущностей N: N, а затем создать связь сущностей с помощью CreateManyToManyRequest.

bool accountEligibleParticipate =
    EligibleCreateManyToManyRelationship("account");
bool campaignEligibleParticipate =
    EligibleCreateManyToManyRelationship("campaign");

if (accountEligibleParticipate && campaignEligibleParticipate)
{

    CreateManyToManyRequest createManyToManyRelationshipRequest =
        new CreateManyToManyRequest
    {
        IntersectEntitySchemaName = "new_accounts_campaigns",
        ManyToManyRelationship = new ManyToManyRelationshipMetadata
        {
            SchemaName = "new_accounts_campaigns",
            Entity1LogicalName = "account",
            Entity1AssociatedMenuConfiguration =
            new AssociatedMenuConfiguration
            {
                Behavior = AssociatedMenuBehavior.UseLabel,
                Group = AssociatedMenuGroup.Details,
                Label = new Label("Account", 1033),
                Order = 10000
            },
            Entity2LogicalName = "campaign",
            Entity2AssociatedMenuConfiguration =
            new AssociatedMenuConfiguration
            {
                Behavior = AssociatedMenuBehavior.UseLabel,
                Group = AssociatedMenuGroup.Details,
                Label = new Label("Campaign", 1033),
                Order = 10000
            }
        }
    };

    CreateManyToManyResponse createManytoManyRelationshipResponse =
        (CreateManyToManyResponse)_serviceProxy.Execute(
        createManyToManyRelationshipRequest);


    _manyToManyRelationshipId =
        createManytoManyRelationshipResponse.ManyToManyRelationshipId;
    _manyToManyRelationshipName =
        createManyToManyRelationshipRequest.ManyToManyRelationship.SchemaName;

    Console.WriteLine(
        "The many-to-many relationship has been created between {0} and {1}.",
        "account", "campaign");
}

EligibleCreateManyToManyRelationship

В следующем примере создается метод ElptableCreateManyToManyRelationship, который использует CanManyToManyRequest для проверки того, может ли объект участвовать в отношении сущностей N: N.

/// <summary>
/// Determines whether the entity can participate in a many-to-many relationship.
/// </summary>
/// <param name="entity">Entity</param>
/// <returns></returns>
public bool EligibleCreateManyToManyRelationship(string entity)
{
    CanManyToManyRequest canManyToManyRequest = new CanManyToManyRequest
    {
        EntityName = entity
    };

    CanManyToManyResponse canManyToManyResponse =
        (CanManyToManyResponse)_serviceProxy.Execute(canManyToManyRequest);

    if (!canManyToManyResponse.CanManyToMany)
    {
        Console.WriteLine(
            "Entity {0} can't participate in a many-to-many relationship.", 
            entity);
    }

    return canManyToManyResponse.CanManyToMany;
}
...