-
Notifications
You must be signed in to change notification settings - Fork 0
MS_CRMRelationshipManagement
-
外部キー制約(参照制約 または参照整合性制約)的な。
-
伝播規則の説明
特定操作の1対多の関連付けの関連レコードへの影響を制御
補足(現在の呼称): 「関連付け」は現在の Dataverse では
**リレーションシップ(Relationship)**と呼ばれる。
「伝播規則」は **Cascading behavior(カスケード動作)**にあたる。
営業案件エンティティ
-
活動エンティティ
-
取引先企業エンティティ
- ユーザ エンティティ(レコードの作成者)
- 部署
- 組織
- ユーザ エンティティ(レコードの作成者)
-
取引先担当者
- ユーザ エンティティ(レコードの作成者)
- 部署
- 組織
- ユーザ エンティティ(レコードの作成者)
-
親子関係
- 1つの主エンティティ(親)
- 複数の関連エンティティ(子)
- 子の外部キーが親のプライマリー キーを指している。
-
トランザクション データ・マスタ データ
- 1つの主エンティティ(マスタ データ)
- 複数の関連エンティティ(トランザクション データ)
- トランザクション データの外部キーが、
マスタ データのプライマリー キーを指している。
※ ここでの関連エンティティは、1対多の多側を表現するエンティティの意味。
”多対多を表現するエンティティのことではないので注意する。”
多対多を表現するエンティティには交差エンティティという用語を使用する。
移行メモ(正誤): 元ページでは
- 親子関係の説明が「親の外部キーが子のプライマリー キーを指している」
となっていたが、外部キーを持つのは子側なので
「子の外部キーが親のプライマリー キーを指している」に改めた
(直後のマスタ/トランザクションの説明とも整合する)。- 「1対多の多側を表現するエンティティには交差エンティティという用語を使用する」
となっていたが、交差エンティティ(Intersect Entity)は多対多の中間テーブルを
指す用語であり、直前の「多対多を表現するエンティティのことではないので注意する」と
矛盾していた。「多対多を表現するエンティティ」に改めた。
-
フィールドの作成時、関連エンティティ(子)側で検索のデータ型を指定する。
-
若しくは、エンティティの [関連付けの種類] を選択し、メニュー バーにある [新規] をクリックする(推奨)。
-
内部的には、主キー(GUID)に対する外部キー(GUID)を設定している。
-
レコード
レコードを開くとナビゲーション バーからエンティティを辿ることができる。 -
ソリューション エクスプローラー
反転エントリを表示、どちらからも関連付けの作成・変更が可能。- 親 ---> 子
主エンティティから ---> 1対多 - 子 ---> 親
関連エンティティから ---> 多対1
- 親 ---> 子
-
関連レコードを使用して多対多を表現する。
-
2つのエンティティをリンクする
関連レコードを格納する中間テーブルは以下のように呼ばれる。- 交差エンティティ
- リンク エンティティ
- リンク テーブル
ここでは、交差エンティティを使用する。
エンティティA <-> 交差エンティティ <-> エンティティB
システム エンティティ、カスタム エンティティを使用する方法がある。
-
概要
プラットフォームの機能で交差エンティティを作成する。 -
特徴
平たく言って、プラットフォームから見てエンティティではないので、- 交差エンティティに直接クエリを実行できない。
- 交差エンティティの関連レコードを追加するには関連ビューを使用する。
- 交差エンティティのカスタマイズは不可能(e.g.: 列の追加は不可能)。
- 交差エンティティをワークフロー ルールに含めることはできない。
- 交差エンティティへの特権はない(関連エンティティへの追加・追加先特権で制御)。
- 関連エンティティ、交差エンティティ共に、常に監査が有効になっている。
-
概要
システム設計の一部として、交差エンティティを作成する。- この交差エンティティ=1対多の関連付けをする
2つの検索フィールドを持つカスタム エンティティ。 - 交差エンティティにカスタム フィールドを追加する必要がある場合には、こちらの方法を使用する。
- この交差エンティティ=1対多の関連付けをする
-
特徴
平たく言って、通常のカスタム エンティティなので、- 交差エンティティに直接クエリを実行できる。
- 交差エンティティをワークフロー ルールに含めることができる。
補足(迷ったら手動): ネイティブの多対多は「関連付けた」という事実しか
保持できない。開始日・数量・区分といった関連そのものの属性を後から
持たせたくなった場合、ネイティブからは移行できず作り直しになる。
実務では、属性が付く可能性が少しでもあるなら手動(カスタム エンティティ)を
選ぶのが定石である。
その他の組込み機能について。
-
キューアイテム
キューにリンクされているレコードの詳細を格納する。 -
フォロー
ユーザが関心を持っているレコードを示す。 -
つながり
- つながりエンティティ
https://msdn.microsoft.com/ja-jp/library/gg328381.aspx - つながりロールを使用してエンティティ間の関係を記述する
https://msdn.microsoft.com/ja-jp/library/gg328007.aspx
- つながりエンティティ
- 関連ビューに交差エンティティは表示されない(エンティティA <-> エンティティB と表示される)
- 関連ビュー(多対多の関連)が表示されない(エンティティA <-> エンティティB と表示されない)
- 通常のエンティティのビューで表示。
- 必要に応じてカスタムの関連ビューを作成する。
- エンティティ関連付けの作成および編集
https://technet.microsoft.com/ja-jp/library/dn531171.aspx
手順
- ソリューションのエンティティ一覧を展開
- エンティティ(関連エンティティ側)を展開
- エンティティの [関連付けの種類] で1対多を選択
- メニュー バーにある [新規] をクリック
- 以下の関連付けのプロパティを定義する。
※ フィールドの作成時、関連エンティティ(子)側で検索のデータ型を指定しても良い。
(その場合、以下プロパティには既定の設定が適用される)。
| / | プロパティ | 説明 |
|---|---|---|
| 1 | 主エンティティ | 1対多の1の方のエンティティ |
| 2 | 関連エンティティ | 1対多の多の方のエンティティ(変更不可能) |
| 3 | 名前 | 関連付けの名前(既定は接頭辞_主エンティティ_関連エンティティ) |
| 4 | 検索可能 | 高度な検索ツールで関連レコードをドリルダウンできる |
関連付けによって作成される、関連エンティティの検索フィールドのプロパティ
| / | プロパティ | 説明 |
|---|---|---|
| 1 | 表示名 | 検索フィールドの説明 |
| 2 | 名前 | 検索フィールドのスキーマ名(既定値は表示名+Id) |
| 3 | フィールド要件 | 主エンティティが必須の場合、検索フィールドに [必須項目] を指定する。 |
| 4 | 説明 | 検索フィールドの説明 |
主エンティティのレコードのナビゲーション バーに表示される項目
| / | プロパティ | 説明 |
|---|---|---|
| 1 | 表示オプション | - [複数形の名前を使用する]:1対多なので関連エンティティの複数形の名前が使用される。 - [カスタム ラベルを使用する] ---> [カスタム ラベル]:カスタム ラベルを入力する。 - [表示しない]:ナビゲーション バーに関連エンティティを表示しない。 |
| 2 | カスタム ラベル | 上記参照。よりコンテキストに特化した名称をナビゲーション リンクに付与できる。 |
| 3 | 表示領域 | ナビゲーション バーの表示セクションの選択(詳しくは「CRM フォームのカスタマイズ」を参照) |
| 4 | 表示順序 | 表示セクションに表示するための順序 |
手順
- ソリューションのエンティティ一覧を展開
- エンティティの [関連付けの種類] で多対多を選択
- メニュー バーにある [新規] をクリック
- 以下の関連付けのプロパティを定義する。
多対多の場合、[現在のエンティティ] と [その他のエンティティ] を設定する。
プロパティは
- 主エンティティ
- 関連エンティティ
を除いて「関連付けのプロパティ」と同じ。
検索可能は、交差エンティティではなく、多対多の関連の反対側のエンティティに対して。
1対多の関連付けにおいて、
主レコードに対する「操作」がどう関連レコードに伝播するか?的な話。
| / | アクション | 説明 |
|---|---|---|
| 1 | 割り当て | 主レコードが割り当てられる場合 |
| 2 | 共有 | 主レコードが共有される場合 |
| 3 | 共有の解除 | 主レコードの共有が解除される場合 |
| 4 | リペアレント | 関連レコードの初回関連付けか、関連付けの変更 |
| 5 | 統合 | 主レコードが別レコードに統合される場合 |
| 6 | 削除 | 主レコードが削除される場合 |
割り当て、共有、共有解除、リペアレントの操作には、以下のルールを使用可能。
| / | ルール | 関連付けの関連エンティティに対する結果 |
|---|---|---|
| 1 | すべての(種類の)レコードに伝播 | すべての関連レコードに伝播 |
| 2 | アクティブ レコードにのみ伝播 | 状態がアクティブな関連レコードに伝播 |
| 3 | 同一所有者レコードにのみ伝播 | 同一所有者の関連レコードに対して伝播 |
| 4 | 伝播しない | 関連レコードは影響を受けない |
同一所有者の所有者とは、「レコードベースのセキュリティ」に
あるようにレコードの所有者(割当した場合は、再割当て前)を指す。
削除の操作には、以下のルールを使用可能。
| / | ルール | 関連付けの関連エンティティに対する結果 |
|---|---|---|
| 1 | すべての(種類の関連)レコードに伝播 | すべての関連レコードを削除(ON DELETE CASCADE 的な) |
| 2 | 関連付けの解除 | 検索フィールドをクリアし関連レコードを残す(ON DELETE SET NULL 的な)。 |
| 3 | 制限する | 関連レコードがある場合は主レコードを削除できない(ON DELETE NO ACTION 的な)。 |
- 連鎖参照整合性制約の
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]的な。
1つのエンティティに1つだけ定義可能。
- 主レコードの操作が関連レコードにも伝播する。
- 主レコードを割り当てると、関連レコードも割当てられる。
その他の関連付けは、すべて参照の関連付け。
- 主レコードの操作が関連レコードに伝播しない。
- 主レコードを割り当てても、関連レコードは割り当てられない。
動作に関わる関連付けの種類に対応した
定義済みの伝播ルールのテンプレートが用意されている。
| / | 動作の種類 | 伝播規則 |
|---|---|---|
| 1 | 上位下位 | すべてのルール:すべてのレコードに伝播 |
| 2 | 参照 | 主なルール:伝播しない、削除:関連付けの解除 |
| 3 | 参照+削除制限 | 主なルール:伝播しない、削除:削除制限 |
| 4 | 構成可能な伝播 | すべてのルール:既定ではすべてのレコードに伝播(カスタマイズ可能) |
移行メモ(正誤): 表の「参照」の行が「削除:関連付けの削除」と
なっていたが、前掲の削除ルールの名称は「関連付けの解除」なので改めた。
-
関連レコードまで割り当て操作が伝播する場合、それがビジネス・プロセス的に適正か考慮する。
- 旧レコード(履歴)までに操作が伝播される。
- ビジネス プロセスの異なるドメイン(営業、サポート、マーケティング)のレコードに伝播する。
- 必要に応じて、動作の伝播ルールをカスタマイズする。
-
システム エンティティ、カスタム エンティティ
-
システム エンティティでは、上位下位のテンプレートが適用されている。
- 取引先企業
- 取引先担当者
- サポート案件
- 営業案件
- すべての活動
-
カスタム エンティティでは、伝播規則を個別に確認する。
-
-
割り当てと同様。
-
また、大量の共有はパフォーマンスに悪影響がある。
- スキーマの設計を考慮すると、共有は DBMS の一つのテーブルで管理される。
- セキュリティ ロールの構成によってもパフォーマンスの影響を受ける。
- 不必要な共有を行わない(行わせない)
- アクセス レベルがグローバルな特権
- 構成可能な伝播テンプレートを使用し、上位下位の1対多の関連付けから共有伝播規則を削除する。
- アクティブ レコードにのみ伝播、同一所有者レコードにのみ伝播の伝播ルールを使用する。
-
反対の操作が可能の様に共有の伝播を解除しても共有の解除の伝播は解除しない(推奨)。
補足(共有テーブルが膨らむ): 共有は
PrincipalObjectAccess(POA)という
単一のテーブルに、レコード×プリンシパルの組み合わせで行が積まれていく。
上位下位の関連付けで共有が伝播すると、
子レコードの件数だけ行が増えるため、この表が肥大化しやすい。
「大量の共有はパフォーマンスに悪影響がある」という記述はこの構造に由来する。
-
主レコードの所有者に関連レコードのアクセス権が与えられる(暗黙の共有)。
- 主レコードより関連レコードの方が機密性が高い場合はリペアレントの伝播は適用できない。
- エンティティに対する特権以上のアクセス権が与えられることはない。
-
以下のケースでは、影響を受けない。
- リペアレントの伝播は、割り当てでトリガされない。
- 明示的な共有と暗黙の共有は、同じユーザ&アクセス権でも別々に管理されるため、明示的な共有の影響を受けない。
-
推奨
-
すべてのレコードに伝播(便利)
-
すべてのレコードに伝播しない(安全)
-
特定のエンティティを保護する場合、
- リペアレントの伝播に注意する。
- 上位下位のテンプレートを使用した関連付けも確認する。
-
アクティブ レコードにのみ伝播、
同一所有者レコードにのみ伝播
の伝播ルールが使用されることは少ない。
-
こちらは、前掲の「削除の伝播ルール」(連鎖参照整合性制約的なもの)で、
”孤立したレコードの発生を回避するために使用”される。
特に、孤立したレコード発生を回避する場合、
- 「関連付けの解除」ルールは使用しない。
- 検索フィールドを必須入力にする。
移行メモ(重複): 元ページは本節の冒頭が
「こちらは、連鎖参照整合性制約的なもので…」で始まる文と
「こちらは、連鎖参照整合性制約的なもので、」で終わる書きかけの文の
2 文が重複していた。1 文に整理した。
- エンティティ フィールドのマッピング
http://www.microsoft.com/ja-jp/dynamics/crm-customer-center/mapping-entity-fields.aspx
主エンティティ レコードに関連付けられる新しい関連エンティティ レコードを作成するとき、
- 主エンティティ レコードのソース フィールドの値が、
- 関連エンティティ レコードのターゲット フィールドに
コピーされる。
例:取引先企業 ---> 取引先担当者(TEL、住所)
-
主エンティティ レコードのコンテキスト外で作成する場合、空白になる。
-
作成後に関連付けを行う場合、フィールド マッピングされないので、
重要なフィールドの入力を支援するワークフロー・プラグインを使用する。 -
作成時のフィールドに自動入力される。
-
この時点では保存されていないため変更できる。
-
自動保存されるエンティティはこの限りではない。
-
後に主エンティティ レコードのソース フィールドの値が変更されても、
関連エンティティ レコードのターゲット フィールドの値は変更されない。 -
関連エンティティ レコードのターゲット フィールドの値が、
主エンティティ レコードのソース フィールドにコピーされる
と言った逆の動作はしない。
補足(マッピングは「初期値」でしかない): フィールド マッピングは
レコード作成時に一度だけ値を写す機能で、同期を取る仕組みではない。
「後から親を変えても子は変わらない」「逆方向にはコピーされない」という
本節の記述はこの性質を言っている。
継続的に親の値を参照したい場合は、マッピングではなく
**関連ルックアップ経由の数式列(Formula column)**などを使う。
-
構成可能なマッピング
- 1つのソース フィールドを、複数のターゲット フィールドにマップできる。
- 1つのターゲット フィールドは1つのマッピングにしか使用できない。
-
制限事項
- ソース フィールド・ターゲット フィールドが同じ型。
- テキスト フィールドの場合:ソース フィールド <= ターゲット フィールド
- 数値フィールドの場合:ソース フィールド = ターゲット フィールド
-
手動設定
-
主エンティティ or 関連エンティティに移動。
-
[関連付け] フォームを開き、ナビゲーション ウィンドウの [マッピング] をクリック。
-
[新規] をクリックし、[フィールド マッピングの作成] をクリック。
- 左側:主エンティティ レコードのソース フィールドを設定
- 右側:関連エンティティ レコードのターゲット フィールドを設定
- [OK] をクリック(他のフィールドマッピングを構成する場合、ココを複数回繰り返す)
-
[保存して閉じる] をクリックして [関連付け] フォームを閉じる。
-
-
自動設定
- 主エンティティ or 関連エンティティに移動。
- [関連付け] フォームを開き、[その他の操作] ---> [マッピングの生成] をクリック。
設定後、直ちにアクティブになる(保存・公開などの手続きはない)。
-
オプション セット(数値とテキスト)
-
数値をコピーする。
-
数値がターゲット フィールドのオプション セットに無い場合、
値はコピーされずターゲット フィールドは未設定(既定値)のままになる。 -
オプション セットのマッピングが無効な場合、
ターゲット フィールドでは既定のオプション セット値が使用される。 -
ラベルの意味が異なっていてもコピーされる(選択内容の妥当性検証はされない)。
従って、数値に対応するテキスト・ラベルが同じ意味で使用されていることを確認する。
-
-
従って、マッピングするフィールドのオプション セットは、
双方とも同一のグローバル オプション セットを使用することを推奨する。
移行メモ(補完): 元ページは「数値がターゲット フィールドの
オプション セットに無い場合、破棄される?(新しい数値が割り当てられる?)」と
疑問形のままだった。実際にはコピーされずに未設定になる(存在しない値が
新規に採番されることはない)ので、その旨に書き改めた。
より簡単なレコード間のリンク。
- つながりロールを使用してエンティティ間の関係を記述する
https://msdn.microsoft.com/ja-jp/library/gg328007.aspx - つながりエンティティ
https://msdn.microsoft.com/ja-jp/library/gg328381.aspx
- 任意の2レコードを接続。
- 1つのレコードに複数の接続を設定できる。
補足(関連付けとの使い分け): 関連付け(リレーションシップ)が
スキーマとして事前に定義した固定の関係であるのに対し、接続は
任意のエンティティ同士を実行時に結べる汎用の関係である。
定型でない人間関係(同僚・紹介者など)や、
組み合わせを事前に列挙できない関係に向く。
反面、スキーマ上の外部キーではないため、
検索・レポート・伝播規則の対象にはならない点に注意する。
接続のリンクを説明する。
既定で以下の汎用的な、つながりロールが作成される。
- 同僚
- 意思決定者
- インフルエンサー
(購買意思決定に影響を与える人) - パートナー
- 関係者
-
ポイント
- ソリューションで展開できる。
- 接続できるエンティティを制限することで、
オプションを少なくして使いやすくできる。
-
構成手順
- [設定] ---> [ビジネス管理] ---> [つながりロール] を開く。
- [新規] をクリックし、つながりロールの名前とカテゴリを入力する。
- [一致するつながりロール] に、対になるロールを指定する
(例:「上司」に対して「部下」)。 - つながりロールが選択できるレコードの種類を選択して制限する。
- [保存して閉じる] をクリックする。
移行メモ(補完): 元ページでは、本節のポイント末尾と構成手順が
「・・・?」「・・・」のみで書かれていなかったため、
上記の手順を補った。著者による本文が加筆された場合は置き換えること。
-
1つのレコードを開く
-
コマンド バーの [接続] をクリックする。
-
"新しい接続" フォームの [接続先] タブで
-
[名前] 検索フィールドを使用し他のレコードを選択。
検索ダイアログ ボックスでは任意のエンティティを選択できる。 -
[このロールとして] 検索フィールドでつながりロールを選択。
-
[説明] を入力
-
必要に応じて [詳細] タブを入力
- [接続元] フィールド:元レコードが表示される。
- [このロールとして]:検索フィールドでつながりロールを選択。
- [開始日]・[終了日]:接続の期間
- 接続の所有者:接続の所有者
-
-
保存して閉じる。
接続をサポートするエンティティには ”自分のつながり” ビューが用意される。
- 自分が ”接続の所有者” であるレコードが表示され、関心のあるレコードを追跡するのに便利。
- 接続ではなくレコードが表示されるので、削除は接続ではなくレコードの削除になる。
接続を表示するビュー。
- 表示方法
- 対象レコードを開き、ナビゲーション バーから [接続] をクリック
- [アクティブな接続関連ビュー] に接続(レコードとつながりロール)が表示される。
- 接続をダブルクリックして開く。
Tags: Dynamics CRM
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。