Partager via


Propriétés de navigation de l’API web

Dans le document CSDL $metadata, chaque type d’entité qui n’est pas abstrait a NavigationProperty des éléments. NavigationProperty les éléments décrivent les données liées au type d’entité actuel. Lorsque vous récupérez un enregistrement, vous pouvez développer les propriétés de navigation pour inclure des données associées.

Le tableau suivant décrit les attributs des NavigationProperty éléments.

Caractéristique Descriptif
Name Nom de la propriété de navigation ; sensible à la casse
Type Type d’entité associé ; peut être à une valeur unique ou à une collection d’un type
Partner Nom de la propriété de navigation de l’autre côté de la relation
Nullable="false" Indique si la valeur peut être null

Important

Il existe deux types de propriétés de navigation : à valeur unique et valeur de collection. Cette distinction est importante, car les fonctionnalités de chaque type de propriété de navigation sont différentes.

Propriétés de navigation à valeur unique

Lorsqu’une propriété Type de navigation fait référence à une valeur unique, elle représente une relation un-à-plusieurs qui crée une référence à un autre enregistrement de table. Cette relation est communément appelée fonction de recherche. L’exemple suivant est la propriété de navigation de account table createdby :

<NavigationProperty 
    Name="createdby" 
    Type="mscrm.systemuser" 
    Nullable="false" 
    Partner="lk_accountbase_createdby">
    <ReferentialConstraint 
        Property="_createdby_value" 
        ReferencedProperty="systemuserid" />
</NavigationProperty>

Cette propriété de navigation à valeur unique connecte plusieurs account enregistrements à un seul systemuser enregistrement. Chaque systemuser enregistrement possède une propriété de navigation à valeur de collection nommée lk_accountbase_createdby qui la connecte aux enregistrements créés par l’utilisateur account .

Ces valeurs sont stockées dans les définitions de relation. Vous pouvez y accéder à l’aide du Kit de développement logiciel (SDK) OneToManyRelationshipMetadata ou du type d’entité d’API OneToManyRelationshipMetadata web, comme décrit dans le tableau suivant.

Caractéristique Propriété OneToManyRelationshipMetadata Descriptif
Name ReferencingEntityNavigationPropertyName Nom de la propriété de navigation à valeur unique.
Partner ReferencedEntityNavigationPropertyName Nom de la propriété de navigation à valeur de collection.

Propriétés de recherche

Les propriétés de navigation à valeur unique ont un ReferentialConstraintProperty attribut qui fait référence à une propriété de recherche. Les propriétés de recherche utilisent la convention d’affectation de noms suivante : _<name>_value. En savoir plus sur les propriétés de recherche.

ReferentialConstraint possède l'attribut ReferencedProperty qui identifie le nom de la clé primaire du type d’entité associé.

Dans la plupart des cas, la propriété de recherche <name> correspond au nom de la propriété de navigation, sauf lorsque la propriété de navigation à valeur unique représente une recherche multi-tableau.

Recherches multi-tables

Lorsque la propriété de navigation à valeur unique fait partie d’une recherche multi-tables (ou polymorphe), il y aura une seule propriété de recherche qui est la ReferentialConstraint pour plusieurs propriétés de navigation à valeur unique.

Un type d’entité peut avoir quelque chose comme la combinaison suivante, où une propriété de recherche unique _customerid_value prend en charge plusieurs propriétés de navigation à valeur unique qui représentent une recherche à plusieurs tables. Il existe une propriété de navigation à valeur unique pour chaque type de table pris en charge par la recherche sur plusieurs tables.

<EntityType 
    Name="socialprofile" 
    BaseType="mscrm.crmbaseentity">
    <Key>
        <PropertyRef Name="socialprofileid" />
    </Key>
    <Property 
        Name="_customerid_value" <!-- lookup property -->
        Type="Edm.Guid">
        <Annotation 
            Term="Org.OData.Core.V1.Description" 
            String="Shows the customer that this social profile belongs to." />
    </Property>
    <NavigationProperty 
        Name="customerid_contact" <!-- Name different from lookup property -->
        Type="mscrm.contact" 
        Nullable="false" 
        Partner="Socialprofile_customer_contacts">
        <ReferentialConstraint 
            Property="_customerid_value" <!--  Reference to lookup property  -->
            ReferencedProperty="contactid" />
    </NavigationProperty>
    <NavigationProperty 
        Name="customerid_account" <!-- Name different from lookup property -->
        Type="mscrm.account" 
        Nullable="false" 
        Partner="Socialprofile_customer_accounts">
        <ReferentialConstraint 
            Property="_customerid_value"  <!--  Reference to lookup property  -->
            ReferencedProperty="accountid" />
    </NavigationProperty>
</EntityType>

Dans ces cas, la définition de la valeur de l’une des propriétés de navigation à valeur unique définit toutes les autres propriétés de navigation à valeur unique participantes sur Null. La valeur GUID de propriété de recherche correspondante change, mais vous devez récupérer des annotations spécifiques pour connaître la table à laquelle elle fait désormais référence. Plus d’informations : Données de propriété de recherche

Propriétés de navigation à valeur de collection

Lorsqu’une propriété Type de navigation fait référence à une valeur de collection, elle représente une relation plusieurs-à-un ou plusieurs-à-plusieurs. L’exemple suivant est la propriété de navigation de l'entité de compte Account_Tasks :

<NavigationProperty 
    Name="Account_Tasks" 
    Type="Collection(mscrm.task)" 
    Partner="regardingobjectid_account_task" 
/>

Cette propriété de navigation connecte un account enregistrement à de nombreux task enregistrements. Chacun task possède une propriété de navigation à valeur unique nommée regardingobjectid_account_task qui fait référence à l’objet account en tant qu'objet lié.

La façon dont vous travaillez avec les propriétés de navigation à valeur de collection à l’aide d’OData est identique, que la relation soit un-à-plusieurs ou plusieurs-à-plusieurs. Les deux sont considérés comme des collections et vous interagissez avec eux de la même façon.

Relations plusieurs-à-un

Une relation de plusieurs à un reflète une relation de un à plusieurs. Elle aura une propriété de navigation partenaire à valeur unique. Dans l’exemple de propriétés de navigation à valeur unique précédente, nous avons examiné la createdby propriété de navigation à valeur unique pour le account type d’entité.

Au sein du type d’entité systemuser, vous trouverez le partenaire de propriété de navigation à valeur de collection nommé lk_accountbase_createdby.

<NavigationProperty Name="lk_accountbase_createdby"
    Type="Collection(mscrm.account)"
    Partner="createdby" />

Relations plusieurs-à-plusieurs

Lorsque le Name et le Partner de la propriété de navigation à valeur de collection sont identiques, cela représente une relation plusieurs-à-plusieurs.

Les relations multiple-à-multiple ont des détails d’implémentation que vous pouvez trouver dans les documents de la prestation de service. Pour la plupart des cas d’usage, vous pouvez les ignorer.

Par exemple, chaque relation plusieurs-à-plusieurs a une table d’intersection qui la prend en charge. Ces tables d’intersection ont des types d’entités qui ont généralement quatre propriétés en lecture seule. Dans l’exemple suivant, le type d’entité teammembership est une table d’intersection qui prend en charge une relation plusieurs-à-plusieurs entre les types d’entités systemuser et team.

<EntityType Name="teammembership"
    BaseType="mscrm.crmbaseentity">
    <Key>
        <PropertyRef Name="teammembershipid" />
    </Key>
    <Property Name="systemuserid"
        Type="Edm.Guid" />
    <Property Name="versionnumber"
        Type="Edm.Int64" />
    <Property Name="teammembershipid"
        Type="Edm.Guid" />
    <Property Name="teamid"
        Type="Edm.Guid" />
</EntityType>

Vous ne pouvez pas utiliser les types d’entités qui représentent des tables d’intersection directement, car toutes les propriétés sont en lecture seule. Effectuez des opérations sur les propriétés de navigation à valeur de collection respectives pour chaque type d’entité. Plus d’informations : Associer et dissocier des lignes de table à l’aide de l’API web

Pour cette relation plusieurs à plusieurs, l’entité de type systemuser a cette propriété de navigation à valeur de collection :

<NavigationProperty Name="teammembership_association"
    Type="Collection(mscrm.team)"
    Partner="teammembership_association" />

L’entité de type team a cette propriété de navigation à valeur de collection :

<NavigationProperty Name="teammembership_association"
    Type="Collection(mscrm.systemuser)"
    Partner="teammembership_association" />

Ces valeurs sont stockées dans les définitions de relation. Vous pouvez y accéder à l’aide du Kit de développement logiciel (SDK) ManyToManyRelationshipMetadata ou du type d’entité d’API ManyToManyRelationshipMetadata web, comme décrit dans le tableau suivant.

Caractéristique Propriété ManyToManyRelationshipMetadata Descriptif
Name Entity1NavigationPropertyName Nom de la propriété de navigation avec une valeur de collection prise en charge pour un de ces types d’entité
Partner Entity2NavigationPropertyName Nom de la propriété de navigation avec une valeur de collection prise en charge pour l’autre type d’entité

Étapes suivantes

Découvrez les définitions d’action.

Voir aussi

Types d’API Web et opérations
Documents de service d’API web
EntityTypes de l’API web
Propriétés de l’API web
Actions de l’API web
Fonctions d’API web
Types complexes et énumération d’API web
Utiliser l’API web Dataverse
OData version 4.0. Partie 3 : Common Schema Definition Language (CSDL) Plus Errata 03 7.1 Element edm:NavigationProperty