Créer et récupérer des relations de table
Cette rubrique explique comment créer et récupérer des relations entre tables.
Créer une relation 1:N
L’exemple de code suivant utilise la méthode EligibleCreateOneToManyRelationship pour vérifier que les tables Account
et Campaign
peuvent participer à une relation 1 à N, puis crée la relation en utilisant 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
L’exemple de code suivant utilise la méthode EligibleCreateOneToManyRelationship
qui utilise à son tour CanBeReferencedRequest et CanBeReferencingRequest pour vérifier si deux tables peuvent participer à une relation 1 à N.
/// <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;
}
}
Créer une relation d’entité N:N
L’exemple de code suivant utilise la méthode EligibleCreateManyToManyRelationship pour vérifier que les tables Account
et Campaign
peuvent participer à une relation N à N, puis crée la relation en utilisant 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
L’exemple de code suivant créé une méthode EligibleCreateManyToManyRelationship
qui utilise CanManyToManyRequest pour vérifier si une table peut participer à une relation 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)service.Execute(canManyToManyRequest);
if (!canManyToManyResponse.CanManyToMany)
{
Console.WriteLine(
"Entity {0} can't participate in a many-to-many relationship.",
entity);
}
return canManyToManyResponse.CanManyToMany;
}
Récupérer des relations de table
L’exemple de code suivant récupère les deux relations de table précédemment créées à l’aide de RetrieveRelationshipRequest. Le premier exemple utilise MetadataId
et le second utilise 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);
Voir aussi
Messages de définition de relation de table
Notes
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).