Salesforceでは、オブジェクトとオブジェクトの関係性を定義でき、その種類には「参照関係」と「主従関係」があります。
主従関係を使うと、積み上げ集計を利用できたり、親のオブジェクトを消すと子のオブジェクトも消えるような、いわゆる「カスケード削除」のようなことも出来るので大変便利な反面、その適用にはいくつか制限があります。
いざ主従関係を設定しようと思ったら、その制限に引っかかって設定できず、設計変更を余儀なくされた。。ということがないよう、その制限をいくつかメモしておきます。
※自分がそういうことがあったので、備忘的な感じです。。。。
1つのオブジェクトで定義できる主従関係は2つまで
あるオブジェクトで定義できる主従関係の数は2つまでです。
それ以上は定義できません。
そのため、2つの主従関係を作成した時点で、
上記のような表示になり、主従関係を追加で定義できなくなります。
また、あるオブジェクトの親になっているオブジェクトは、「ひとつだけ」親の主従関係を定義できます。
まだひとつしか主従関係の項目を作っていないのに作成できない場合は、そのオブジェクトが他のオブジェクトの親になっていないかを確認してください。
主従関係を作れないオブジェクトもある
リードとユーザオブジェクトは他のオブジェクトの親になれません。つまり、この2つのオブジェクトを親にした主従関係は作成できません。
リードで積み上げ集計できないことになりますね。。
リードはSalesforceでは顧客になる前の一時的なレコードで、「取引の開始」でコンバートされてしまうので、あまり情報を蓄積しないことになっているんでしょうか。。。?
「参照関係」を途中で「主従関係」に変換できるが、条件がある
はじめ「参照関係」で項目を作成して、途中で「主従関係」に変更したくなることがあるかもしれません。
その場合、変更するには条件があります。
・そのオブジェクトにレコードがないこと
あんまり無いと思いますが、そのオブジェクトのレコードが1件もない場合にはすんなり追加できます。
・そのオブジェクトの変更しようとしている参照項目に全部値が入っていること
主従関係の項目はNullであってはいけません。そのため、既存レコードの該当項目が空のレコードがあると、
「新規の主従関係の作成、または既存の参照関係の主従関係への変更はできません。既存のレコードがリレーションに違反する可能性があります。」
というエラーになって変更できません。
そのときにはまず、当該参照項目にすべて値を入れてから、それを主従関係にします。
新規に主従関係を作りたいときは、はじめに参照関係で作成してから、値を埋めた後、主従関係に「データ型の変更」で変換しましょう。