Search code examples
c#dynamics-crmmicrosoft-dynamics

Programmatically creating LookupAttributeMetadata in Dynamics CRM 2015


I am about to migrate a Dynamics CRM 2011 On Premise instance to Dynamics CRM 2015 Online.

I'm using the current Dynamics CRM SDK (current Version 7.1) and have managed to migrate the custom attributes, except the Virtual and Lookup ones, which can't be created via CreateAttributeRequest.

Now next, I need to migrate all the relationships. So far I've been able to get the necessary OneToManyRelationshipMetadata and ManyToManyRelationshipMetadata. However, for OneToManyRelationshipMetadata I need to pass a LookupAttributeMetadata to the CreateAttributeRequest.

OneToManyRelationshipRequest request = new OneToManyRelationshipRequest() 
{
    Lookup = new LookupAttributeMetadata() 
    {
        SchemaName = "new_topicid",
        DisplayName = new Label("Subject", 1033),
        Description = new Label("Subject Description", 1033)
    },
    OneToManyRelationship = new OneToManyRelationshipMetadata() 
    {
        ReferencedEntity = "subject",
        ReferencedAttribute = "subjectid",
        ReferencingEntity = "customer",
        ReferencingAttribute = "new_topicid"
    }
}

However, I get the exception that attribute new_topicid doesn't exist. That may make sense, since I had to skip it during Attribute creation earlier (since it can't be created through CreateAttributeRequest).

Is there any other way how I can migrate the LookupAttributeMetadata or OneToManyRelationshipMetadata/ManyToManyRelationshipMetadata to Dynamics CRM online?


Solution

  • There is a sample on the MSDN for this.

    The sample has significantly more parameters than your code above which is probably the cause of the problem.

    Sample: Create and retrieve entity relationships

    CreateOneToManyRequest createOneToManyRelationshipRequest =
        new CreateOneToManyRequest
    {
        OneToManyRelationship =
        new OneToManyRelationshipMetadata
        {
            ReferencedEntity = "account",
            ReferencingEntity = "campaign",
            SchemaName = "new_account_campaign",
            AssociatedMenuConfiguration = new AssociatedMenuConfiguration
            {
                Behavior = AssociatedMenuBehavior.UseLabel,
                Group = AssociatedMenuGroup.Details,
                Label = new Label("Account", 1033),
                Order = 10000
            },
            CascadeConfiguration = new CascadeConfiguration
            {
                Assign = CascadeType.NoCascade,
                Delete = CascadeType.RemoveLink,
                Merge = CascadeType.NoCascade,
                Reparent = CascadeType.NoCascade,
                Share = CascadeType.NoCascade,
                Unshare = CascadeType.NoCascade
            }
        },
        Lookup = new LookupAttributeMetadata
        {
            SchemaName = "new_parent_accountid",
            DisplayName = new Label("Account Lookup", 1033),
            RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
            Description = new Label("Sample Lookup", 1033)
        }
    };