エンティティ関係メタデータをカスタマイズする

エンティティ関係によって、エンティティ レコードを他のエンティティや同じエンティティのレコードと関連付けることのできる方法が定義されます。 新しいエンティティ関係を作成すると、データベース内に新しいテーブル関係が作成されます。 レコードをレポートに対して関連付けたり、ユーザー インターフェイス内で関連付けたりするために頻繁に使用される個別的な関連付けを定義するには、エンティティ関係を使用します。 エンティティ関係を作成した後は、Associate メソッドと Disassociate メソッドを使用して、その関係に基づいてレコードを関連付けたり、関連付けを解除したりすることができます。 詳細: エンティティ レコードに対する操作

あまりフォーマルでない柔軟性の高い個々のレコード間の関連付けについては、つながりエンティティ を参照してください。

このトピックでは、エンティティの関連付けをプログラムで行う方法について説明します。 アプリケーションのエンティティの関連付けの方法の詳細については、「エンティティ関係の作成および編集」を参照してください。

エンティティ関係の種類

Dynamics 365 Customer Engagement (on-premises) には、2 種類のエンティティ関係が用意されています。 どちらも RelationshipMetadataBase クラスから継承されます。

  • 一対多関連付け

  • 多対多の関連付け

    新しいエンティティ関係をプログラムで作成する前に、それらのエンティティがその関連付けにふさわしいかどうかを確認してください。 次の EntityMetadata プロパティを使用するエンティティの関連付けには適用された制約があります: CanBeInManyToManyCanBePrimaryEntityInRelationship、および CanBeRelatedEntityInRelationship。 これらの制約は、カスタマイズ ツールでエンティティ関係を手動で作成する際に考慮されます。 エンティティがどの関連付けを使用するか、関係のこの種類に対して他のどのエンティティが有効であるかを判断するのに使用できるメッセージがあります。 詳細: エンティティの関連付けの有効性

    どちらの種類のエンティティ関係にも、関連するレコード間のナビゲーション リンクを表示するオプションがあります。 詳細情報: 関連メニューの構成

一対多関連付け

一対多エンティティ関係では、多くの参照元 (関連) エンティティ レコードを単一の参照先 (主) エンティティ レコードと関連付けることができます。 参照先エンティティ レコードは "親" と呼ばれ、参照元エンティティのレコードは "子" と呼ばれることがあります。

ソリューション ページ上のエンティティ ノード内では、この種類のエンティティ関係は一対多 (1:N) の関連付けまたは多対一 (N:1) の関連付けとして表示されます。 これらの用語が使用されるのは、それらのエンティティのいずれかを通じてエンティティ関係に移動するからです。 ラベルは現在のエンティティがその関係の中で持っているロールを反映します。

Note

1:N 関連付けの作成に Web API を使用する方法の詳細については、Web API: 一対多の関連付けを作成する を参照してください。

組織サービスでは、この種類のエンティティ関連付けを扱うときは、OneToManyRelationshipMetadata クラスのインスタンスを使用します。 各エンティティ関係は一意のスキーマ名を持ちます。エンティティ関係を取得するときは、その名前を使用します。 詳細については、「SchemaName」を参照してください。 この種類の各エンティティ関係は、参照先エンティティ (主エンティティ) と参照先属性、および参照元エンティティ (関連エンティティ) と参照元属性も持ちます。 参照元属性はエンティティ フォーム内に検索フィールドとして表示できます。 詳細については、

Web API SDK アセンブリ
OneToManyRelationshipMetadata EntityType.ReferencedEntity ReferencedEntity
OneToManyRelationshipMetadata EntityType.ReferencedAttribute ReferencedAttribute
OneToManyRelationshipMetadata EntityType.ReferencingEntity ReferencingEntity
OneToManyRelationshipMetadata EntityType.ReferencedAttribute ReferencingAttribute

参照元属性で AttributeRequiredLevel 列挙 (AttributeRequiredLevel EnumType または AttributeRequiredLevel 列挙) を ApplicationRequired 設定することにより、参照元エンティティに必ず参照を持たせるようにすることがあります。 データ整合性を維持するため、これを行うときは、主レコードが削除された場合に何を行うかを指定する必要があります。 OneToManyRelationshipMetadata.CascadeConfiguration プロパティを使用することにより、主レコードの削除を防止するか、または孤立した (親のない) レコードが生じないように自動的に関連レコードも削除するようにしてください。

組織の関連するレコードに対して特定の操作が実行されるときの動作を自動化するためにカスケード構成を使用できます。 詳細: エンティティ関係の動作

データを新しいレコードにマップする

一対多のエンティティ関係が存在する場合、参照先エンティティ内の特定のフィールドのデータを、その関係のコンテキストで作成された任意の新しい関連レコードに転送できることを指定できます。 これにより、新しい関連レコードを作成するときのデータ入力を合理化できます。 詳細については、エンティティ マッピングおよび属性マッピングを参照してください。

自己参照型の一対多エンティティ関係

自己参照型の関連付けが生じるのは、参照元エンティティと参照先エンティティが同じ場合です。 たとえば、取引先企業 (アカウント) エンティティは、取引先企業の親会社というラベルの検索を可能にする自己参照型の一対多関連付けを持っています。 エンティティ関係の動作が上位下位として定義されている場合、レコードで自分自身を参照することはできません。なぜなら、自分自身を参照すると、伝播 (カスケード) 動作が適用されたときに循環参照が発生するからです。 詳細: エンティティ関係の動作

階層一対多エンティティの関連付け

Dynamics 365 Customer Engagement (on-premises)では、エンティティの指定された階層関連付けとして、1 つの自己参照の一対多エンティティの関連付けを指定できます。 OneToManyRelationship.IsHierarchical プロパティ (OneToManyRelationship.IsHierarchical または OneToManyRelationshipMetadata.IsHierarchical) は、エンティティで使用する一対多の関連付けとしてこの関連付けにフラグを設定します。

すべての一対多エンティティの関連付けは、階層の種類を表しますが、IsHierarchical を使用して明示的にフラグを設定された関連付けは、階層的に関連するレコードを取得する新しいアプリケーション クエリ演算子とアプリケーションで階層のビジュアル化をサポートするエンティティの関連付けのみです。 詳細: クエリ階層型データ

Web API ナビゲーション プロパティ名の変更

一対多の関連付けにカスタム Web API ナビゲーション プロパティを名を適用する場合は、OneToManyRelationshipMetadata.ReferencingEntityNavigationPropertyName および OneToManyRelationshipMetadata.ReferencedEntityNavigationPropertyName プロパティの値を設定することができます。

多対多関連付け

多対多エンティティ関係では、多数のエンティティ レコードを他の多数のエンティティ レコードと関連付けることができます。 一対多のエンティティ関係と違って、どちらのエンティティにも検索フィールドがなく、したがって対応する階層がありません。 多対多の関連付けを使用して関連付けられたレコードは同等であると考えられ、この関係は相互的なものです。 多対多の関連付けを自己参照にすることもできます。 多対多の関連付けには伝播 (カスケード) 動作がないので、個別のレコードで自分自身を参照することができます。

Note

N:N 関連付けの作成に Web API を使用する方法の詳細については、Web API を使用して多対多の関連付けを作成する を参照してください。

この種類のエンティティ関係を扱うときは、ManyToManyRelationshipMetadata (ManyToManyRelationshipMetadata EntityType または ManyToManyRelationshipMetadata クラス) のインスタンスを使用します。 各エンティティ関係には、それを取得するために使用する一意の RelationshipMetadataBase.SchemaName があります。

多対多のエンティティ関係を作成すると、EntityMetadata.IsIntersect プロパティが true の場合は新しい交差エンティティが作成されます。 このエンティティのレコードは個別の多対多関連付けを追跡します。 交差エンティティにはカスタム属性を追加できません。

Web API ナビゲーション プロパティ名の変更

多対他関連付けにカスタム Web API ナビゲーション プロパティを適用する場合は、ManyToManyRelationshipMetadata EntityType.Entity1NavigationPropertyName および ManyToManyRelationshipMetadata EntityType.Entity2NavigationPropertyName プロパティの値を設定することができます。

関連したメニューを構成する

どちらの種類のエンティティ関係でも、関連レコード間のナビゲーション リンクを構成できます。 それぞれの種類のエンティティ関係定義で Metadata.AssociatedMenuConfiguration のプロパティを使用して、エンティティ フォーム内でのナビゲーション リンクの表示方法を指定できます。

これらの値は、関連付けの既定の構成として使用されます。 フォーム エディターを使用すると、これらのオプションをフォームごとに上書きできます。 詳細: フォーム内でのナビゲーションの変更

Behavior
次のオプションがあります。

  • DoNotDisplay

  • UseCollectionName

  • UseLabel

    Group
    次のオプションがあります。

  • [詳細]

  • マーケティング

  • Sales

  • サービス

    新しいグループを追加することはできませんが、フォーム エディターを使用して、グループに対して表示されるテキストを変更することはできます。

    ラベル
    AssociatedMenuBehavior.UseLabel を選択した場合、カスタム ラベルを指定する必要があります。

    受注
    指定した整数値によって、グループ内でのナビゲーション項目の相対位置が制御されます。 値が小さいほど、グループ内の他の項目に対するその項目の相対的な表示位置が上がります。

関連項目

Web API を使用してエンティティ関係を作成および更新する
Dynamics 365 Customer Engagement (on-premises) のメタデータ モデルの拡張
エンティティの関連付けのメッセージ
エンティティの関連付けの有効性
エンティティ関係の動作
エンティティの関連付けの作成
サンプル: エンティティの関連付けの作成
サンプル: エンティティ関係情報のファイルへのダンプ
エンティティおよび属性マッピング
交差するエンティティを使用した多対多の関連付けのためのレコードの取得