Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This topic shows how to create and retrieve table relationships.
Create a 1:N relationship
The following code sample uses the EligibleCreateOneToManyRelationship method to verify that the Account
and Campaign
tables can participate in a 1:N relationship and then creates the relationship by using CreateOneToManyRequest.
bool eligibleCreateOneToManyRelationship =
EligibleCreateOneToManyRelationship("account", "campaign");
if (eligibleCreateOneToManyRelationship)
{
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)
}
};
CreateOneToManyResponse createOneToManyRelationshipResponse =
(CreateOneToManyResponse)service.Execute(
createOneToManyRelationshipRequest);
_oneToManyRelationshipId =
createOneToManyRelationshipResponse.RelationshipId;
_oneToManyRelationshipName =
createOneToManyRelationshipRequest.OneToManyRelationship.SchemaName;
Console.WriteLine(
"The one-to-many relationship has been created between {0} and {1}.",
"account", "campaign");
}
EligibleCreateOneToManyRelationship
The following code sample uses the EligibleCreateOneToManyRelationship
method that in turn uses CanBeReferencedRequest and CanBeReferencingRequest to verify whether two table can participate in a 1:N 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 bool EligibleCreateOneToManyRelationship(string referencedEntity,
string referencingEntity)
{
//Checks whether the specified entity can be the primary entity in one-to-many
//relationship.
CanBeReferencedRequest canBeReferencedRequest = new CanBeReferencedRequest
{
EntityName = referencedEntity
};
CanBeReferencedResponse canBeReferencedResponse =
(CanBeReferencedResponse)service.Execute(canBeReferencedRequest);
if (!canBeReferencedResponse.CanBeReferenced)
{
Console.WriteLine(
"Entity {0} can't be the primary entity in this one-to-many relationship",
referencedEntity);
}
//Checks whether the specified entity can be the referencing entity in one-to-many
//relationship.
CanBeReferencingRequest canBereferencingRequest = new CanBeReferencingRequest
{
EntityName = referencingEntity
};
CanBeReferencingResponse canBeReferencingResponse =
(CanBeReferencingResponse)service.Execute(canBereferencingRequest);
if (!canBeReferencingResponse.CanBeReferencing)
{
Console.WriteLine(
"Entity {0} can't be the referencing entity in this one-to-many relationship",
referencingEntity);
}
if (canBeReferencedResponse.CanBeReferenced == true
&& canBeReferencingResponse.CanBeReferencing == true)
{
return true;
}
else
{
return false;
}
}
Create an N:N relationship
The following code sample uses the EligibleCreateManyToManyRelationship method to verify that the Account
and Campaign
tables can participate in a N:N relationship and then creates the relationship by using 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)service.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
The following code sample creates a EligibleCreateManyToManyRelationship
method that uses CanManyToManyRequest to verify whether a table can participate in a N:N relationship.
/// <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)service.Execute(canManyToManyRequest);
if (!canManyToManyResponse.CanManyToMany)
{
Console.WriteLine(
"Entity {0} can't participate in a many-to-many relationship.",
entity);
}
return canManyToManyResponse.CanManyToMany;
}
Retrieve table relationships
The following code sample retrieves the two table 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.
RetrieveRelationshipRequest retrieveOneToManyRequest =
new RetrieveRelationshipRequest { MetadataId = _oneToManyRelationshipId };
RetrieveRelationshipResponse retrieveOneToManyResponse =
(RetrieveRelationshipResponse)service.Execute(retrieveOneToManyRequest);
Console.WriteLine("Retrieved {0} One-to-many relationship by id", retrieveOneToManyResponse.RelationshipMetadata.SchemaName);
//Retrieve the Many-to-many relationship using the Name.
RetrieveRelationshipRequest retrieveManyToManyRequest =
new RetrieveRelationshipRequest { Name = _manyToManyRelationshipName};
RetrieveRelationshipResponse retrieveManyToManyResponse =
(RetrieveRelationshipResponse)service.Execute(retrieveManyToManyRequest);
Console.WriteLine("Retrieved {0} Many-to-Many relationship by Name", retrieveManyToManyResponse.RelationshipMetadata.MetadataId);