Why a Trigger on the Child Object? Since the relationship is not master-detail, a trigger on the child object can perform aggregate calculations and update the parent Opportunity. Why Not Other Options? A: Tree sorting is unnecessary and unrelated to roll-up summaries. B and D: Neither Streaming API nor Metadata API is suitable for real-time roll-up calculations. References:Custom Roll-Up Summaries:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta /apexcode/apex_triggers_best_practices.htm
最新のコメント (最新のコメントはトップにあります。)
GenerativeAI - 2025-11-18
正解は **C** です。
### 領域の確認
* **領域:** **2. プロセスの自動化とロジック (Process Automation and Logic)** * **トピック:** Apexトリガー、SOQL集計クエリ、オブジェクト関係(参照関係 vs マスター詳細関係)
最新のコメント (最新のコメントはトップにあります。)
正解は **C** です。
### 領域の確認
* **領域:** **2. プロセスの自動化とロジック (Process Automation and Logic)**
* **トピック:** Apexトリガー、SOQL集計クエリ、オブジェクト関係(参照関係 vs マスター詳細関係)
-----
### 正解の解説
**C. 子オブジェクトにトリガーを記述し、集計関数を使用して、商談の下にある関連するすべての子オブジェクトの金額を合計します。**
このシナリオの重要なポイントは、「**マスター詳細関係 (Master-Detail) ではない**」という点です。
* **マスター詳細関係の場合:** 標準機能の「積み上げ集計項目 (Roll-up Summary Field)」を使用できます(コーディング不要)。
* **参照関係 (Lookup) の場合:** 標準の積み上げ集計項目は**使用できません**。
したがって、参照関係にある子レコードの値を親レコードに集計するには、プログラム(Apex)でロジックを組む必要があります。
**具体的な実装ロジック:**
1. **トリガーの場所:** 金額が変更されるのは「子レコード」なので、トリガーは**子オブジェクト**に記述します(Insert, Update, Delete, Undelete イベント)。
2. **集計:** トリガー内で SOQL の集計関数(`SUM()`)を使い、その親(商談)に紐づく子レコードの合計値を計算します。
3. **更新:** 計算結果を親である商談(Opportunity)のカスタム項目に Update します。
-----
### 不正解の解説
**A. Opportunity オブジェクトにトリガーを記述し、ツリー ソートを使用して...**
これは**不正解**です。
トリガーは「変更が起きたとき」に動くものです。子レコードの金額が増えたり減ったりしても、親の Opportunity レコード自体は変更されていないため、Opportunity のトリガーは起動しません。子側の変更を検知できないため不適切です。
**B. ストリーミング API を使用して、リアルタイムのロールアップ サマリーを作成します。**
これは**不正解**です。
Streaming API(PushTopicなど)は、データの変更を外部システムやUIに「通知」するための技術です。Salesforceデータベース内の値を計算して更新するためのものではありません。
**D. メタデータ API を使用して、リアルタイムのロールアップ サマリーを作成します。**
これは**不正解**です。
Metadata API は、カスタム項目やApexクラスなどの「組織の設定情報(メタデータ)」をデプロイ(移行)した...