SOEのひとりごと

Salesforce管理者兼エンジニアのSOEがつぶやいてます

【Salesforce備忘録】オブジェクトの参照関係は[親-子]も[子-親]のどちらから見ようとも取得の流れは一緒なんです。

てことでトップ画が小馬鹿にしている感が少しありますが、意外と知らない管理者業務の方もいらっしゃる気がするので、備忘録を兼ねてかきます。

オブジェクトの参照関係って?

親と子の2つからなるオブジェクト同士のつながりで、片方のオブジェクトをもう片方のオブジェクトの関連項目から参照できるようにしたものです。

一般的なテーブルの話でいくと、親となるメインテーブルに、子となるテーブルの主キーなどを外部キーとして設定しており、そこを起点にクエリによる抽出設定とかを意識せずに簡単にデータ取得できちゃうサポート機能という感じです。

これがどのぐらい便利かというと、もし次のようなオブジェクト(テーブル)があった場合で見てみると伝わるかと思います。

まずimg1のようなテーブルがあるとします。
この時取引先責任者テーブルのあるデータと紐づく取引先のメールアドレスが欲しい場合、何かしらで取引先テーブルと合体させたデータが必要となります。

画像
img1.テーブルの一覧

通常ですと、取引先責任者テーブル内の取引先テーブルのレコードIDが保存されているはずなので、これをSQLで、Join句を使って結合させたうえでメールアドレスを取得するようなクエリを作ります。

取得するクエリは例えば下記のようなものになると思います。

SELECT a.メールアドレス 
FROM 取引先責任者 as ac
INNER JOIN 取引先 as a 
 ON ac.取引先名(ID) = a.レコードID
copy
画像
img2.通常のクエリの場合

しかし、Salesforceの参照関係の場合、データの取得がフローの場合はクエリを書かずともよく、書いたとしても

取引先責任者.取引先名.メールアドレス
copy

ぐらいです。
SOQLの場合も非常にシンプルで、参照関係にある場合はJoinのような記述はなくても簡単に取得ができます。

SELECT 取引先.取引先名
FROM 取引先責任者
copy
画像
img3.Salesforceの参照関係

ただし、参照関係について把握しておく必要があります。
また、親から子の参照は容易ですが、子から親はサブクエリのような記述が必要となります。

エンジニアの経験であったり、データベースのテーブルデータをSQL等で取得するなどの操作をしたことのない方からすると少々わかりにくいかもしれませんので、該当する方は下記の記事がイメージしやすいため確認するのがよろしいかと存じます。
※私のブログとかではないです。
※あくまでイメージ優先です。

ちなみにサブクエリによる取得という方法も一応ありますが、管理者業務メインですと面倒に感じるかもしれませんね、、、
SOQLに関するサブクエリの書き方はこちらの記事がイメージしやすいかと思います。