Export (0) Print
Expand All

Create and retrieve entity relationships

Applies To: Microsoft Dynamics CRM 2013, Microsoft Dynamics CRM Online

This topic shows how to create and retrieve entity relationships.

Create a 1:N entity relationship

The following sample uses the EligibleCreateOneToManyRelationship method to verify that the Account and Campaign entities can participate in a 1:N entity relationship and then creates the entity relationship by using CreateOneToManyRequest.



Dim eligibleCreateOneToManyRelationship As Boolean =
 Me.EligibleCreateOneToManyRelationship("account", "campaign")

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


 Dim createOneToManyRelationshipResponse As CreateOneToManyResponse =
  CType(_serviceProxy.Execute(createOneToManyRelationshipRequest), CreateOneToManyResponse)

 _oneToManyRelationshipId = createOneToManyRelationshipResponse.RelationshipId
 _oneToManyRelationshipName = createOneToManyRelationshipRequest.OneToManyRelationship.SchemaName

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

EligibleCreateOneToManyRelationship

The following sample creates a EligibleCreateOneToManyRelationship method that uses CanBeReferencedRequest and CanBeReferencingRequest to verify whether two entities can participate in a 1:N entity relationship.


''' <summary>
''' Determines whether two entities are eligible to participate in a relationship
''' </summary>
''' <param name="referencedEntity">Primary Entity</param>
''' <param name="referencingEntity">Referencing Entity</param>
''' <returns></returns>
Public Function EligibleCreateOneToManyRelationship(ByVal referencedEntity As String, ByVal referencingEntity As String) As Boolean
 'Checks whether the specified entity can be the primary entity in one-to-many
 'relationship.
 Dim canBeReferencedRequest As CanBeReferencedRequest =
  New CanBeReferencedRequest With {.EntityName = referencedEntity}

 Dim canBeReferencedResponse As CanBeReferencedResponse =
  CType(_serviceProxy.Execute(canBeReferencedRequest), CanBeReferencedResponse)

 If Not canBeReferencedResponse.CanBeReferenced Then
  Console.WriteLine("Entity {0} can't be the primary entity in this one-to-many relationship", referencedEntity)
 End If

 'Checks whether the specified entity can be the referencing entity in one-to-many
 'relationship.
 Dim canBereferencingRequest As CanBeReferencingRequest =
  New CanBeReferencingRequest With {.EntityName = referencingEntity}

 Dim canBeReferencingResponse As CanBeReferencingResponse =
  CType(_serviceProxy.Execute(canBereferencingRequest), CanBeReferencingResponse)

 If Not canBeReferencingResponse.CanBeReferencing Then
  Console.WriteLine("Entity {0} can't be the referencing entity in this one-to-many relationship", referencingEntity)
 End If


 If canBeReferencedResponse.CanBeReferenced = True AndAlso canBeReferencingResponse.CanBeReferencing = True Then
  Return True
 Else
  Return False
 End If
End Function

Create an N:N entity relationship

The following sample uses a EligibleCreateManyToManyRelationship method to verify that the Account and Campaign entities can participate in a N:N entity relationship and then creates the entity relationship by using CreateManyToManyRequest.



Dim accountEligibleParticipate As Boolean = EligibleCreateManyToManyRelationship("account")
Dim campaignEligibleParticipate As Boolean = EligibleCreateManyToManyRelationship("campaign")

If accountEligibleParticipate AndAlso campaignEligibleParticipate Then

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

 Dim createManytoManyRelationshipResponse As CreateManyToManyResponse =
  CType(_serviceProxy.Execute(createManyToManyRelationshipRequest), CreateManyToManyResponse)


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

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

EligibleCreateManyToManyRelationship

The following sample creates a EligibleCreateManyToManyRelationship method that uses CanManyToManyRequest to verify whether an entity can participate in a N:N entity relationship.


''' <summary>
''' Determines whether the entity can participate in a many-to-many relationship.
''' </summary>
''' <param name="entity">Entity</param>
''' <returns></returns>
Public Function EligibleCreateManyToManyRelationship(ByVal entity As String) As Boolean
 Dim canManyToManyRequest As CanManyToManyRequest =
  New CanManyToManyRequest With {.EntityName = entity}

 Dim canManyToManyResponse As CanManyToManyResponse =
  CType(_serviceProxy.Execute(canManyToManyRequest), CanManyToManyResponse)

 If Not canManyToManyResponse.CanManyToMany Then
  Console.WriteLine("Entity {0} can't participate in a many-to-many relationship.", entity)
 End If

 Return canManyToManyResponse.CanManyToMany
End Function

Retrieve entity relationships

The following sample retrieves the two entity relationships previously created using RetrieveRelationshipRequest. The first example uses the MetadataId and the second uses the Name.



'You can use either the Name or the MetadataId of the relationship.

'Retrieve the One-to-many relationship using the MetadataId.
Dim retrieveOneToManyRequest As RetrieveRelationshipRequest =
 New RetrieveRelationshipRequest With {.MetadataId = _oneToManyRelationshipId}
Dim retrieveOneToManyResponse As RetrieveRelationshipResponse =
 CType(_serviceProxy.Execute(retrieveOneToManyRequest), RetrieveRelationshipResponse)

Console.WriteLine("Retrieved {0} One-to-many relationship by id",
                  retrieveOneToManyResponse.RelationshipMetadata.SchemaName)

'Retrieve the Many-to-many relationship using the Name.
Dim retrieveManyToManyRequest As RetrieveRelationshipRequest =
 New RetrieveRelationshipRequest With {
  .Name = _manyToManyRelationshipName
 }
Dim retrieveManyToManyResponse As RetrieveRelationshipResponse =
 CType(_serviceProxy.Execute(retrieveManyToManyRequest), RetrieveRelationshipResponse)

Console.WriteLine("Retrieved {0} Many-to-Many relationship by Name",
                  retrieveManyToManyResponse.RelationshipMetadata.MetadataId)

See Also

Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online
Send comments about this topic to Microsoft.
© 2014 Microsoft Corporation. All rights reserved.
Show:
© 2014 Microsoft