次の方法で共有


Web API ナビゲーション プロパティ

CSDL $metadata ドキュメントでは、抽象ではない各エンティティ型にNavigationProperty要素があります。 NavigationProperty 要素は、現在のエンティティ型に関連するデータを記述します。 レコードを取得するときに、ナビゲーション プロパティを展開して関連データを含めることができます。

次の表では、 NavigationProperty 要素の属性について説明します。

特性 Description
Name 単一値のナビゲーション プロパティの名前: 大文字と小文字を区別する
Type 関連するエンティティ型。には、単一の値または型のコレクションを指定できます
Partner 関連付けの反対側にあるナビゲーション プロパティの名前
Nullable="false" 値を null にできるかどうかを指定します。

Important

ナビゲーション プロパティには、 単一値コレクション値の 2 種類があります。 ナビゲーション プロパティの種類ごとに機能が異なるため、この違いは重要です。

単一値ナビゲーション プロパティ

ナビゲーション プロパティ Type 単一の値を参照する場合、別のテーブル レコードへの参照を作成する一対多リレーションシップを表します。 このリレーションシップは、一般に ルックアップと呼ばれます。 次の例は、account テーブルcreatedby ナビゲーションプロパティです。

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

この単一値ナビゲーション プロパティは、複数の account レコードを 1 つの systemuser レコードに接続します。 各systemuser レコードには、ユーザーが作成したlk_accountbase_createdby レコードに接続する、accountという名前のコレクション値ナビゲーション プロパティがあります。

これらの値はリレーションシップ定義に格納されます。 次の表に示すように、SDK OneToManyRelationshipMetadata または Web API OneToManyRelationshipMetadata エンティティ型を使用してアクセスできます。

特性 OneToManyRelationshipMetadata プロパティ Description
Name ReferencingEntityNavigationPropertyName 単一値のナビゲーション プロパティの名前。
Partner ReferencedEntityNavigationPropertyName コレクション値のナビゲーション プロパティの名前。

検索プロパティ

単一値のナビゲーション プロパティには、検索プロパティを参照する Property 属性のある ReferentialConstraint があります。 参照プロパティは、 _<name>_valueという名前付け規則を使用します。 参照プロパティの詳細を確認します。

ReferentialConstraintには、関連するエンティティ型の主キー名を識別するReferencedProperty属性があります。

ほとんどの場合、ルックアップ プロパティで見つかった <name> は、単一値ナビゲーション プロパティが複数テーブル参照を表す場合を除き、ナビゲーション プロパティの名前と一致します。

複数テーブルの参照

単一値ナビゲーション プロパティが複数のテーブルまたはポリモーフィックなルックアップの一部である場合、単一の参照プロパティは複数の単一値ナビゲーション プロパティの ReferentialConstraint です。

エンティティ型には、次のような組み合わせがあります。1 つの _customerid_value 参照プロパティは、複数のテーブル参照を表す複数の単一値ナビゲーション プロパティをサポートします。 複数テーブル参照でサポートされるテーブルの種類ごとに、1 つの値を持つナビゲーション プロパティがあります。

<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>

このような場合、いずれかの単一値ナビゲーション プロパティの値を設定すると、参加している他のすべての単一値ナビゲーション プロパティが null に設定されます。 対応するルックアップ プロパティの GUID 値が変更されますが、現在参照しているテーブルを把握するには、特定の注釈を取得する必要があります。 詳細情報: プロパティ データの参照

コレクション値ナビゲーション プロパティ

ナビゲーション プロパティ Type コレクション値を参照する場合、多対一または多対多のリレーションシップを表します。 次の例は、アカウント エンティティAccount_Tasks のナビゲーション プロパティです。

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

このナビゲーション プロパティは、 account レコードを多数の task レコードに接続します。 各taskには、関連オブジェクトとしてregardingobjectid_account_taskを参照する account という名前の単一値ナビゲーション プロパティがあります。

OData を使用してコレクション値ナビゲーション プロパティを操作する方法は、リレーションシップが一対多か多対多かに関係なく同じです。 どちらもコレクションと見なされ、同じ方法で操作します。

多対一リレーションシップ

多対一リレーションシップは、一対多リレーションシップのミラー イメージです。 パートナーの単一値ナビゲーション プロパティがあります。 前の単一値ナビゲーション プロパティの例では、createdby エンティティ型のaccount単一値ナビゲーション プロパティを確認しました。

systemuser エンティティ型には、lk_accountbase_createdbyという名前のコレクション値ナビゲーション プロパティ パートナーが存在します。

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

多対多リレーションシップ

コレクション値ナビゲーション プロパティの NamePartner が同じ場合、多対多リレーションシップを表します。

多対多リレーションシップには、サービス ドキュメントで見つけることができる実装の詳細がいくつかあります。 ほとんどのユース ケースでは、無視できます。

たとえば、すべての多対多リレーションシップには、それをサポートする 交差テーブル があります。 これらの交差テーブルには、通常、4 つの読み取り専用プロパティを持つエンティティ型があります。 次の例では、 teammembership エンティティ型は、 systemuser エンティティ型と 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>

すべてのプロパティが読み取り専用であるため、交差テーブルを表すエンティティ型を直接操作することはできません。 各エンティティ型のそれぞれのコレクション値ナビゲーション プロパティに対して操作を実行します。 詳細情報: Web API を使用してテーブル行の関連付けと関連付けを解除する

この多対多リレーションシップの場合、 systemuser エンティティ型には次のコレクション値ナビゲーション プロパティがあります。

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

team エンティティ型には、次のコレクション値ナビゲーション プロパティがあります。

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

これらの値はリレーションシップ定義に格納されます。 次の表に示すように、SDK ManyToManyRelationshipMetadata または Web API ManyToManyRelationshipMetadata エンティティ型を使用してアクセスできます。

特性 ManyToManyRelationshipMetadata プロパティ Description
Name Entity1NavigationPropertyName エンティティ型のうちの1つに関連付けられたコレクション値ナビゲーションプロパティの名前
Partner Entity2NavigationPropertyName 他のエンティティ型のコレクション値ナビゲーション プロパティの名前

次のステップ

アクション定義について説明します。

こちらも参照ください

Web API の種類と操作
Web API サービス ドキュメント
Web API EntityTypes
Web API のプロパティ
Web API アクション
Web API 関数
Web API の複合型と列挙型
Dataverse Web API を使用する
OData バージョン 4.0。 パート 3: 共通スキーマ定義言語 (CSDL) と Errata 03 7.1 要素 edm:NavigationProperty