Salesforceで参照項目を作成するとき、「子リレーション名」の設定が求められるます。
しかし、「どんな名前にすればいいのかわからない」「そもそも子リレーション名って何?」と悩む方も多いのではないでしょうか。
この記事では、子リレーション名が何かを解説するとともに、適切な命名方法や実際の使用例をご紹介します。
この記事を読み終える頃には、リレーション名が何か理解でき、迷わず設定できるようになります。
子リレーション名の概要
子リレーション名とは、一言でいうと「親オブジェクトから見た子オブジェクトの名前」です。
例えば、標準オブジェクトである 取引先責任者(Contact) の取引先への参照項目、取引先名(AccountId)には「Contacts」という子リレーション名が設定されています。
取引先(Account)オブジェクトから取引先責任者(Contact)を見ると、複数の取引先責任者が存在するため、「Contacts」という複数形の名前が用いられています。
Caseなどの他の標準オブジェクトでも、同様に親オブジェクトから見た子オブジェクトを表す命名がされています。
子リレーション名の推奨される命名規則
次に、子リレーション名の推奨される命名規則について説明します。
カスタムで参照項目を作成する際、子リレーション名の設定が必須です。
実際に自分で子リレーション名を設定する際はどう命名すればいいでしょうか?
子リレーション名がよくわからず、親オブジェクトの名前をそのまま設定してしまうこともあるかもしれませんが、これは悪い例です。
子オブジェクト1と2が同じ親オブジェクトを参照している場合を考えます。
それぞれの子リレーション名を「Parent」に設定すると、親オブジェクト側から見た際にどちらの子オブジェクトを指しているのかがわからなくなってしまいます。
(1つの親オブジェクトに対して、同じ子リレーション名は設定できないようになっています)
子リレーション名は「親オブジェクトから見た子オブジェクトの名前」ということを踏まえて、推奨される命名規則は、子オブジェクト名の複数形です。
これはSalesforceの開発者ガイドにも記載されています。
また、1つのオブジェクトに、同じオブジェクトを参照する複数の参照項目がある場合は、一意に識別できるような名前をつける必要があります。
適切な命名により、データ構造が明確になり、後々の管理や運用が楽になります。
子リレーション名の使用場所
最後に、子リレーション名がどこで使われるかを説明します。
子リレーション名が使われることはあまり多くないですが、主にSOQL(Salesforce Object Query Language)で利用されます。
SOQLとは、オブジェクトから特定の条件に合うレコードを抽出するためのクエリ言語です。
例えば、株式会社サンブリッジという取引先のレコードを取得したい場合、以下のようにクエリを記述します:
SELECT Name FROM Account WHERE Name = '株式会社サンブリッジ
株式会社サンブリッジに関連する取引先責任者の名前を取得したい場合は、以下のようにクエリを記述します:
SELECT Name, (SELECT Name FROM Contacts) FROM Account WHERE Name = '株式会社サンブリッジ'
ここで取引先責任者を取得するために使われるのが「Contacts」という子リレーション名です。
カスタム参照項目の場合は「子リレーション名+__r」を使うことで、子オブジェクトの項目を取得可能です:
SELECT Name, (SELECT Name FROM Childs__r) FROM Parent
もし子リレーション名を「Parent」のように設定してしまうと、SOQLが以下のようになり、どのデータを指しているのか非常にわかりづらくなります:
SELECT Name, (SELECT Name FROM Parent__r) FROM Parent
適切な子リレーション名を設定することは、SOQLの可読性や管理のしやすさにもつながります。
最後に
いかがだったでしょうか?
この記事では、Salesforce初心者がつまずきやすい「子リレーション名」の概要から命名規則、使用例までを解説しました。
今後参照項目を作成する際に迷わずに子リレーション名を設定できるようになれば幸いです。
Salesforce導入・活用支援のご案内
サンブリッジが提供するSalesforce導入・活用支援サービスは、お客様の現状の業務用件や目指すゴールをヒアリングし、システム設計から実装までを行います。
導入後のトレーニングまでを含むきめ細やかなサービスを一貫して実施することにより、Salesforceの活用向上と導入の効果を最大化します。