Skip to main content

カスタムオブジェクトでリレーションクエリを作成する

学習の目的

この単元を完了すると、次のことができるようになります。

  • スキーマビルダーのダイアグラムを解釈して、オブジェクトリレーションを識別する。
  • カスタムオブジェクトのクエリで使用するカスタムリレーション名を確認する。
  • カスタムオブジェクトの子-親クエリを作成する。
  • カスタムオブジェクトの親-子クエリを作成する。
メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

一緒にトレイルを進みましょう

エキスパートの説明を見ながらこのステップを実行したい場合は、次の動画をご覧ください。これは Trailhead Live の「Trail Together」(一緒にトレイル) シリーズの一部です。

(巻き戻して最初から見直したい場合、このクリップは 51:38 分から開始されます。)

Trailhead Playground を起動してパッケージをインストールする

このモジュールのこれ以降の例やハンズオン演習では、DreamHouse という不動産業のサンプルアプリケーションを使用します。では、Trailhead Playground にこのアプリケーションをインストールして、サンプルデータをインポートしましょう。

Trailhead Playground がまだ開いていない場合は起動します。組織に [パッケージのインストール] というタブが表示されている場合は、ステップ 1 に進みます。表示されていない場合は、アプリケーションランチャー (アプリケーションランチャー) で、[Playground Starter] をクリックして手順に従います。Playground Starter アプリケーションが表示されない場合は、DreamHouse パッケージへのこちらのリンクをクリックして、Trailhead ヘルプの「Trailhead の Challenge を完了するためのパッケージやアプリケーションのインストール」を参照してください。

  1. [パッケージのインストール] タブをクリックします。
  2. 項目に 04t3h000004mBpiAAE を貼り付けます。
  3. [インストール] をクリックします。
  4. [管理者のみのインストール] を選択し、[インストール] をクリックします。
  5. サードパーティアクセスの承認を求めるプロンプトが表示されたら、[はい、これらのサードパーティ Web サイトにアクセスを許可します] を選択して、[続行] をクリックします。

パッケージのインストールが終了すると、確認ページが表示され、Playground に関連付けられているアドレスにメールが届きます。

DreamHouse データをインポートする

  1. アプリケーションランチャー をクリックして、[検索] ボックスに Dream と入力し、[DreamHouse] アプリケーションを選択します。
  2. [設定] タブをクリックします。([設定] タブが表示されない場合は、[さらに表示] リストを展開します。)
  3. [データをインポート] をクリックします。
  4. [Properties (物件)] タブをクリックして、サンプルデータの内容を確認します。

DreamHouse のスキーマを確認する

これまでは、標準オブジェクトへのクエリのみを実行しました。この単元では、カスタムオブジェクトにクエリを実行する方法を説明します。ここでは DreamHouse アプリケーションのオブジェクトを使用するため、まず DreamHouse のスキーマ (データモデル) を確認してデータの構造を理解しておきます。

スキーマビルダーを開く

  1. Trailhead Playground で 設定 をクリックして [設定] を選択します。
  2. [オブジェクトマネージャー] をクリックします。
  3. [スキーマビルダー] をクリックします。
  4. [オブジェクト] タブで、[選択解除] をクリックします。
  5. Broker__c ではなく Broker と表示されている場合は、[ビューオプション] をクリックして、[要素名を表示] を選択します。
  6. 前述のとおり、コードでは項目の API 参照名を使用します。[要素名を表示] に、項目の表示ラベルではなく、項目の API 参照名が表示されます。(カスタムオブジェクトの API 参照名には、カスタムオブジェクト名の末尾に __c (アンダースコア + アンダースコア + c) が付いています。)

  7. [選択元] リストで、[カスタムオブジェクト] を選択します。
  8. [Broker__c][Property__c] を選択します。この単元ではこの 2 つのカスタムオブジェクトを使用します。
  9. [自動レイアウト] をクリックします。
  10. 物件の項目を確認します。
  11. Property__c カスタムオブジェクトには、Picture__c と Broker__c という 2 つのカスタム項目があります。(カスタム項目の API 参照名には、カスタム項目名の末尾に __c (アンダースコア + アンダースコア + c) が付いています。)

    Broker__c と Property__c というカスタムオブジェクトを表示するスキーマビルダー。Property__c カスタムオブジェクトの Broker__c と Picture__c というカスタム項目が強調表示されています。

  12. Property__c を Broker__c に結び付けるリレーション行にマウスポインターを置きます。
  13. Property__c カスタムオブジェクトの Broker__c カスタム項目から Broker__c カスタムオブジェクトへの参照関係があります。

    スキーマビルダーの Broker__c と Property__c というカスタムオブジェクト。Property__c オブジェクトの Broker__c カスタム項目に、Property__c カスタムオブジェクトから Broker__c カスタムオブジェクトへの参照関係があります。

  14. [Property__c] 要素で歯車アイコンをクリックし、[オブジェクトを参照する] をクリックします。
    オブジェクトマネージャーが開き、Property__c オブジェクトが表示されます。
  15. [項目とリレーション] をクリックします。
  16. [Broker (ブローカー)] という項目の表示ラベルをクリックします。
  17. [Lookup Options (参照オプション)] セクションで、[子リレーション名] を見つけます。

Property__c が Broker__c の子で、物件とブローカーのリレーションの名前が Properties であることがわかりました。(前述のとおり、リレーション名は通常、子オブジェクト名の複数形です。)

カスタムオブジェクトにクエリを実行する

カスタムオブジェクトに対するクエリは標準オブジェクトに対するクエリとよく似ていますが、いくつかの点が異なります。

たとえば、次の要件があるとします。

「物件の住所、写真、担当ブローカーを示す全物件のリストを取得する。」

特に難しいことではありません。Property__c カスタムオブジェクトにクエリを実行し、Address__c、Picture__c、Broker__c というカスタム項目を取得します。実際に試してみましょう。

クエリを作成する

  1. クエリエディターで、次のとおり入力します。
    SELECT Address__c, Picture__c, Broker__c FROM Property__c
  2. [Execute (実行)] をクリックします。
    結果の最初の 6 行が次のようになります。
    Query Results - Total Rows: 12 (クエリ結果 - 行合計: 12)
    Address__c
    Picture__c
    Broker__c
    18 Henry st
    https://s3-us-west-2.amazonaws.com...
    a016g000007Yxfn...
    24 Pearl st
    https://s3-us-west-2.amazonaws.com...
    a016g000007Yxfn...
    72 Francis st
    https://s3-us-west-2.amazonaws.com...
    a016g000007Yxfn...
    32 Prince st
    https://s3-us-west-2.amazonaws.com...
    a016g000007Yxfn...
    110 Baxter st
    https://s3-us-west-2.amazonaws.com...
    a016g000007Yxfn...
    448 Hannover St
    https://s3-us-west-2.amazonaws.com...
    a016g000007Yxfn...

Broker__c 列の内容はさほど役立つものではありません。Property__c オブジェクトの Broker__c 項目が Broker オブジェクトへの参照であるためです。項目に参照関係がある場合は、関連するオブジェクトの ID が示されます。ブローカーの名前を取得するには、リレーションクエリが必要です。

子-親クエリを作成する

Broker__c は Property__c の親であるため、子-親クエリが必要です。ここでは、リレーション名とドット表記を使用して、Broker__c オブジェクトの Name 項目を取得します。

  1. クエリエディターで、次のとおり Broker__c を Broker__c.Name に変更します。
    SELECT Address__c, Picture__c, Broker__c.Name FROM Property__c
  2. [Execute (実行)] をクリックします。(エラーメッセージが表示されます。)
    エラーメッセージ
    Didn't understand relationship 'Broker__c' in field path.If you’re attempting to use a custom relationship, be sure to append the '__r' after the custom relationship name. (項目パスの「Broker__c」リレーションが認識されませんでした。カスタムリレーションシップを使用している場合は、カスタムリレーション名の後に「__r」を追加してください。)

何が起きたのでしょうか? 前述のとおり、Broker__c は Property (物件) オブジェクトのカスタム項目です。このクエリで必要なのは、Broker__c 関連オブジェクトです。

クエリでカスタムリレーション名を使用する

Broker__c 項目ではなく、Broker__c 関連オブジェクトを指定するには、__c を __r (アンダースコア + アンダースコア + r) に変更します。Broker__r はカスタムリレーション名で、Property__c から Broker__c オブジェクトに参照関係があることを示します。クエリのこの部分は、「Broker__c カスタム関連オブジェクトから Name 項目を取得する」に相当します。クエリを更新しましょう。

  1. クエリエディターで、次のとおり Broker__cBroker__r に変更します。
    SELECT Address__c, Picture__c, Broker__r.Name FROM Property__c
  2. [Execute (実行)] をクリックします。

    結果の最初の 6 行が次のようになります。
    Query Results - Total Rows: 12 (クエリ結果 - 行合計: 12)
    Address__c
    Picture__c
    Broker__r.Name
    18 Henry st
    https://s3-us-west-2.amazonaws.com...
    Caroline Kingsley
    24 Pearl st
    https://s3-us-west-2.amazonaws.com...
    Michael Jones
    72 Francis st
    https://s3-us-west-2.amazonaws.com...
    Jonathan Bradley
    32 Prince st
    https://s3-us-west-2.amazonaws.com...
    Jennifer Wu
    110 Baxter st
    https://s3-us-west-2.amazonaws.com...
    Olivia Green
    448 Hannover St
    https://s3-us-west-2.amazonaws.com...
    Miriam Aupont

わかりやすくなりました。ID ではなく、Broker (ブローカー) カスタムオブジェクトの [名前] 項目が表示されています。

親-子クエリを作成する

各物件とその担当ブローカーを返すことができました。この反対が必要なときはどうすればよいでしょうか?

次のような要件の場合です。

「すべてのブローカーの名前と、各ブローカーが担当するすべての物件の住所と価格を取得する。」

ブローカーのリストが必要なため、主クエリで Broker__c オブジェクトにクエリを実行します。

SELECT Name FROM Broker__c

ブローカーは親であるため、親-子クエリに子オブジェクトのサブクエリが必要です。ここでは、サブクエリに子リレーション名を使用します。

Property__c オブジェクトのサブクエリのリレーション名は何でしょうか? Property (物件) オブジェクトの [Broker (ブローカー)] 項目の詳細を確認します。

Property (物件) オブジェクトの [Broker (ブローカー)] 項目の詳細ページで、[Lookup Options (参照オプション)] の [子リレーション名] が [Properties] になっています。

子リレーション名は Properties です。このリレーションはカスタムリレーションであるため、クエリに使用するときは、__r を追加します (Properties__r)。したがって、このサブクエリ (括弧内) は次のようになります。

(SELECT Address__c, Price__c FROM Properties__r)

このサブクエリを主クエリに挿入すると、クエリ全体が次のようになります。

SELECT Name, (SELECT Address__c, Price__c FROM Properties__r) FROM Broker__c

クエリを実行する

  1. クエリエディターで、次のとおり入力します。
    SELECT Name, (SELECT Address__c, Price__c FROM Properties__r) FROM Broker__c
  2. [Execute (実行)] をクリックします。
    結果の最初の 8 行が次のようになります。

    クエリ結果: 行合計: 8。1 つ目の列にブローカー名がリストされます。2 つ目の列に、物件の住所と価格のカンマ区切りリストが示されます。

これこそ必要としていた情報です。ブローカー全員のリストと、各ブローカーの物件のカンマ区切りリストを手に入れることができました。クエリを構築するときは、開発者コンソールのクエリエディターで SOQL クエリを簡単にテストして調整する機能を使えることを覚えておいてください。

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む