データを扱うような仕事をしていると、たまに耳にする?「多対多」について、今日は改めて、考えてみようと思います。
標準機能での多対多の例としては、
・商談商品
・担当者の役割
あたりにはなるのではないでしょうか?
多対多とは?
多対多リレーションでは、1 つのオブジェクトの各レコードを他のオブジェクトの複数のレコードにリンクでき、またその逆のリンクも可能です。
(引用元:多対多リレーションの作成より)一般的な多対多のイメージは、下図のような感じではないでしょうか?
「レコードA」は、「レコード1」「レコード2」「レコード3」が紐づいている
「レコードB」は、「レコード1」「レコード3」が紐づいている
「レコードC」は、「レコード1」のみが紐づいている
「レコード1」から見ると、「レコードA」「レコードB」「レコードC」が紐づいている
「レコード2」から見ると、「レコードA」のみが紐づいている
「レコード3」から見ると、「レコードA」「レコードB」が紐づいている一見、良さそうに見えます。
Salesforce上で、上記を実装してみようとすると、1点気になる部分が出てきます。
それは「最大何レコードが一つのレコードに紐づくことになるのか?」という点です。
最大何レコードが紐づく可能性があるのか事前にわかっていれば、その分だけの参照項目の欄を用意しておくこともできると思います。
ただ、この状態は、あくまで「1対多」もしくは「多対1」に過ぎず、「多対多」でありません。
例として、商談の担当者を最大3人まで登録できるような設定をするとします。
ビューや、レポートを駆使して、担当者が自分の物のみを抽出することは可能ですが、条件等ひと手間を加えることが必要です。
連結オブジェクトの場合です。
今回は、ヘルプの例に従って実装してみます。
【イメージ図】
1.「カスタムオブジェクト:バグ」を作成します。このオブジェクトには、バグに関する情報を格納します。
カスタムオブジェクトの作成方法は大丈夫だと思いますので、割愛します。
作成方法が不明な方は、「パートナー関連リストをカスタムオブジェクトで作ってみました」の記事の「1.カスタムオブジェクトの作成」の部分を参照してみてください。
※上記ページのオブジェクト名等は、あくまで「パートナー関連リストをカスタムオブジェクトで作ってみました」の内容ですので、ご自身で作成したいものに置き換えて設定してください。
2.「カスタムオブジェクト:バグ/ケース関係」を作成します。このオブジェクトが「連結オブジェクト」になります。
ヘルプに記載があるように、こちらは「データ型:自動採番」で作成します。
レコード名を特に意識させる必要がない場合に、自動採番を使用するイメージです。
また、連結オブジェクトには、タブは必要ないので、「オブジェクト作成オプション」の中の「カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する」はチェック不要です。
3.2で作成した「カスタムオブジェクト:バグ/ケース関係」に2つ主従関係の項目を作成します。
ここでのポイントは、ヘルプに記載がある「関連リストの表示ラベルに他方の主オブジェクトの名前を使うように変更してください。」という点です。
項目作成時のポイントは、 [関連リストの表示ラベル] は、表示されているデフォルト値をそのまま使用せず、「関連先」で指定したオブジェクト内で見せたいオブジェクト名称にすることをお勧めします。
今回の例でいうと、「関連先オブジェクト」が「ケース」の場合に、項目の表示ラベルを「ケース」としてしまうと、ケースの詳細レコードの関連リスト内に「ケース」の関連リストができることになってしまいます。
主従関係項目1:「関連先オブジェクト:ケース」「項目の表示ラベル:ケース」「項目名:(任意)Case」「関連リストの表示ラベル :バグ」
主従関係項目2:
「関連先オブジェクト:バグ」
「項目の表示ラベル:バグ」
「項目名:(任意)Bug」
「関連リストの表示ラベル:ケース」
【よくない例】・項目の設定画面

・レコード詳細画面

【よい例】
・項目の設定画面
・レコード詳細画面

連結オブジェクト側で、「ケース」「バグ」のそれぞれのオブジェクトに紐づけるための設定をするので、
「ケース」「バグ」のオブジェクト側での参照等の項目の作成は不要です。設定は、以上になります。
設定したものをスキーマビルダーで確認してみると以下のような図になりました。
【イメージ図】と似た形になっているのではないでしょうか。

「オブジェクト:
バグ 」にケース紐づけた見え方は下図のようになります。

ケース側から見たものは下図です。

それぞれの紐づける画面は以下です。

今回の記事は、
【図解付き】連結オブジェクトとは【セールスフォース】を参考にさせていただきました。
バグの場合は、個人的には、「
トピック」でもいいのかな?と正直思いました。
{{i18n("articles.view.premium")}}