エンティティ関係の動作
一対多のエンティティ関係が存在するときは、カスケード動作を構成して、データの整合性を維持し、ビジネス プロセスを自動化できます。 このトピックでは、いくつかの重要な概念を説明し、カスケード動作を構成する方法を示します。
エンティティ関係の動作の構成方法を説明する前に、ビジネスにどのように適用されるのかを考えておくと役に立ちます。 次の 2 つの概念が重要です。
データ整合性の維持
各エンティティには、有効なレコードを定義するルールがあります。 たとえば、Dynamics 365 Customer Engagement (on-premises) の営業案件レコードには、見込み顧客への参照が含まれる必要があります。 ユーザーは、新しい営業案件レコードを作成するには、既存の顧客を追加するか、または新しい顧客レコードを作成する必要があります。
しかし、顧客を表す取引先企業または取引先担当者が削除された場合はどうすればよいでしょうか。 このような場合は、次のどちらかが可能です。
営業案件が関連付けられている顧客レコードは削除できないようにします。
対応する顧客レコードが削除されたときは、削除操作をカスケードして、関連する営業案件レコードを自動的に削除します。
Dynamics 365 Customer Engagement (on-premises) では、
Opportunity.opportunity_customer_accounts
やContact.opportunity_customer_contacts
のような営業案件と顧客を関連付ける一対多関係の場合、削除操作がカスケードされます。Dynamics 365 Customer Engagement (on-premises) で使用するデータをモデル化するときは、データの整合性を維持する方法について同じような決定を下します。
ビジネス プロセスの自動化
ビジネス プロセスでは、関連するレコードのあるレコードに対して操作を実行することが必要になる場合があります。 たとえば、新しい営業担当者に取引先企業を割り当てるような場合です。 その取引先企業レコードに営業案件レコードがある場合、次のような対応が考えられます。
何もしません。 営業案件は、それを処理する個人によって引き続き所有される必要があります。
すべての営業案件を新しい営業担当者に割り当てる。 この取引先企業レコードの新しい所有者として、その営業担当者がその取引先企業に関係するすべての営業案件を担当します。
アクティブな営業案件のみを新しい営業担当者に割り当てる。 報告のため、非アクティブな営業案件のレコードの所有者は変更しないでおきます。
以前の取引先企業所有者が所有していた営業案件のみを新しい営業担当者に割り当てる。 このようにすると、以前の所有者を新しい営業担当者に置き換えることができます。
これらのオプションは一般的なものであり、Dynamics 365 Customer Engagement (on-premises) のエンティティ関係動作を使用して構成できます。 別の動作が必要な場合は、必要な動作を含むソリューションの購入、または追加動作を提供するプラグインの開発を検討します。
カスケード動作
これらの構成オプションは、動作が関連するエンティティの階層を下方に伝達されるので、カスケード (滝) 動作と呼ばれます。 たとえば、取引先企業の削除によって関連する営業案件が削除される場合、営業案件に関連付けられている活動はどうなるでしょうか。 Dynamics 365 Customer Engagement (on-premises) では、活動の種類エンティティに対する各エンティティ関係で定義されている動作については活動も削除されます。
ただし、このように処理されないエンティティもあります。 たとえば、受注と請求書には重要なビジネス データが含まれるので、誤って削除されないようにする必要があります。 これらには、関連する顧客レコードまたは営業案件レコードの削除を制限するエンティティ関係動作が構成されます。 関連する受注または請求書レコードがある顧客または営業案件を削除する場合は、先に受注または請求書を削除する必要があります。
カスタム エンティティを作成して、または既存の Dynamics 365 Customer Engagement (on-premises) システム エンティティを使用して、ビジネス データをモデル化するときは、必要な動作および関連するエンティティの階層全体に対する影響を検討します。
エンティティの上位下位の関連付け
1:N の関連付けを持つことができるエンティティの各ペアの間には、1:N の関連付けが複数存在する場合があります。 その場合でも、エンティティの上位下位の関連付けを考慮できるのは、そのような関連付けの中の 1 つだけです。 カスタマイズ可能なすべてのエンティティの上位下位の関連付けの一覧については、カスタマイズ可能なエンティティの上位下位の関連付け を参照してください。
エンティティの上位下位の関連付けは、次の表の上位下位の列のカスケード オプション (CascadeType で定義されているもの) のいずれかが真であるような、1:N のエンティティの関連付けです。
操作 | 上位下位 | 上位下位ではない |
---|---|---|
削除 | 伝播 | リンクの解除 制限する |
共有 | 伝播 ユーザーによる所有 Active |
NoCascade |
共有の解除 | 伝播 ユーザーによる所有 Active |
NoCascade |
割り当て | 伝播 ユーザーによる所有 Active |
NoCascade |
リペアレント | 伝播 ユーザーによる所有 Active |
NoCascade |
1:N エンティティ関係における各参照元エンティティには、関連付けが上位下位であるとみなすことができる参照属性が 1 つあります。
たとえば、新しい顧客エンティティを作成し、取引先企業エンティティとの 1:N のエンティティ関係を追加して、顧客エンティティが参照元のエンティティである場合、上位下位である列のオプションを使用するように、そのエンティティ関係に対する操作を構成できます。 後で、顧客エンティティとの別の 1:N エンティティ関係を、顧客エンティティを参照元エンティティとして追加する場合は、上位下位ではない列のオプションを使用するような操作だけを構成できます。
通常、これは各エンティティ ペアには上位下位の関連付けが 1 つだけ存在することを意味します。 参照での参照属性に複数の種類のエンティティに対する参照が含まれる可能性がある場合があります。
たとえば、Opportunity
エンティティに customerid
という名前の参照属性があり、取引先担当者レコードまたは取引先企業レコードの参照が格納されるような場合です。 このような場合は、2 つの異なる上位下位の 1:N エンティティ関係が存在します。
タスク、FAX、通話などのすべての活動エンティティには、regardingobjectid
参照属性を使用して関連付けることができるエンティティに対する、似た一連のエンティティの上位下位の関連付けがあります。
エンティティ関係の動作の構成
Web API の使用
Web API の作業をするときは、OneToManyRelationshipMetadata EntityType を使用して一対多の関連付けを定義することができます。 この定義には、作成する交差するエンティティの名前と AssociatedMenuConfiguration ComplexType、Label ComplexType および LocalizedLabel ComplexType を使用した関連付けの表示方法も含まれます。 詳細については次を参照してください: 一対多の関連付けを作成する
組織サービスの使用
CreateOneToManyRequest または UpdateRelationshipRequest を使用するときは、OneToManyRelationshipMetadata クラスのインスタンスを要求の本体に含めます。 そのクラスの CascadeConfiguration プロパティでは、CascadeConfiguration クラスを使用します。
CascadeConfiguration
(CascadeConfiguration クラスまたは CascadeConfiguration ComplexType) には、一対多エンティティ関係の参照先エンティティで実行できる操作を表すプロパティが含まれます。 各プロパティには、CascadeType EnumType の値のいずれかを割り当てることができます。
価値 | アプリケーション ラベル | 説明設定 |
---|---|---|
アクティブです | アクティブにカスケード | 参照先エンティティ レコードと関連付けられているすべてのアクティブな参照元エンティティ レコードで操作を実行します。 |
伝播 | すべてのレコードに伝播 | 参照先エンティティ レコードと関連付けられているすべての参照元エンティティ レコードで操作を実行します。 |
NoCascade | 伝播しない | 何もしません。 |
リンクの解除 | 関連付けの解除 | 参照先エンティティ レコードと関連付けられているすべての参照元エンティティ レコードの参照属性の値を削除します。 |
制限する | 制限する | 参照元エンティティが存在するときは、参照先エンティティ レコードが削除されないようにします。 |
ユーザーによる所有 | 同一所有者のレコードのみに伝播 | 参照先エンティティ レコードと同じユーザーによって所有されているすべての参照元エンティティ レコードで操作を実行します。 |
CascadeConfiguration
(CascadeConfiguration クラスまたは CascadeConfiguration ComplexType) には、一対多エンティティ関係の参照先エンティティで実行できる操作を表す次のプロパティが含まれます。
操作 | 内容 | 有効なオプション |
---|---|---|
割り当て | 参照先エンティティ レコードの所有者が変更されます。 | Active 伝播 NoCascade ユーザーによる所有 |
削除 | 参照先エンティティ レコードが削除されます。 注: この操作のオプションは制限されます。 | 伝播 リンクの解除 制限する |
結合 | レコードが別のレコードと結合されます。 注: 結合できる参照先エンティティに対しては、Cascade のみが有効なオプションです。 それ以外の場合は NoCascade を使用します。 | 伝播 NoCascade |
リペアレント | 以下の リペアレント操作について を参照してください。 | Active 伝播 NoCascade ユーザーによる所有 |
共有 | 参照先エンティティ レコードが別のユーザーと共有されるとき。 | Active 伝播 NoCascade ユーザーによる所有 |
共有の解除 | 参照先エンティティ レコードで共有が削除されるとき。 | Active 伝播 NoCascade ユーザーによる所有 |
リペアレント操作について
リペアレント操作は共有操作ととてもよく似ていますが、明示的な読み取りアクセス権ではなく、継承された読み取りアクセス権を処理する点が異なります。
Note
継承されたアクセス権の詳細については、レコード ベースのセキュリティを使用してレコードへのアクセスをコントロールする、特に 共有および継承 セクションを参照してください。
リペアレント操作とは、上位下位の関連付けで参照属性の値を変更する場合です。 リペアレント操作が発生すると、関連するエンティティの継承された読み取りアクセス権の対象範囲が変化する場合があります。 リペアレント操作に関連するカスケード操作は、関連する特定のエンティティ レコードとあらゆるエンティティ レコードに対する読み取りアクセス権に対する変更を参照します。 エンティティ関係を上位下位に構成する方法の詳細については、エンティティの上位下位の関連付け を参照してください。
たとえば、営業案件と取引先企業の間には CustomerId
参照属性に基づく上位下位の関連付けがあります。 ユーザーが取引先企業の所有者であり、その取引先企業と関連付けられた営業案件がある場合、ユーザーはその営業案件およびそれに関連付けられているすべてのレコードに対する読み取りアクセス権を継承します。 営業案件の CustomerId
参照属性の値が、別の取引先企業を参照するように変更されると、リペアレント操作がカスケードの場合、新しい取引先企業の所有者が営業案件に対する読み取りアクセス権を継承します。 リペアレント操作を NoCascade に設定すると、このような読み取りアクセス権の自動継承を無効にすることができます。 Active または UserOwned オプションを使用すると、アクセス権の変更によって影響を受けるレコードに対するフィルターを指定できます。 上位下位の関連付けを使用する営業案件に関係するレコードの場合、リペアレント操作はこれらのエンティティ関係を下方に伝達されて、リペアレント操作に対して設定されているフィルターに基づいて読み取りアクセス権が継承されます。
関連項目
一対多関連付け
Web API を使用してエンティティ関係を作成および更新する
Dynamics 365 Customer Engagement (on-premises) のメタデータ モデルの拡張
エンティティ メタデータのカスタマイズ
エンティティ属性メタデータのカスタマイズ
エンティティの関連付けのメタデータ
エンティティおよび属性マッピング
ラベルで複数言語をサポート
レコード ベースのセキュリティを使用してレコードへのアクセスをコントロールする
サンプル: エンティティ関係の作成および取得