見出し画像

Salesforce認定上級Platformデベロッパー100題 過去問+模擬問題集 全問解答解説付き(即わかる)

Salesforce認定上級Platformデベロッパーの過去問+模擬問題100題を全問解答+全問解説しています。

この問題集では、正解、不正解の選択肢全てに解説を付けています。
初学者でもわかりやすく学習可能です。

Salesforce認定上級Platformデベロッパーとは


Salesforce認定上級Platformデベロッパーは、Salesforce Platform上で複雑なビジネスロジックとインターフェースを開発し、カスタマイズするための高度な知識と技術を持つプロフェッショナルに与えられる認定資格です。
取得することで、受験者がApex、Visualforce、Lightning コンポーネントフレームワークを含むSalesforceの開発ツールを用いて、高度なアプリケーションを設計、開発、デプロイできる能力を有していることが認められます。

試験範囲は?

以下出題の範囲が公開されています

  1. Apexプログラミング言語: 高度なApexコーディングと開発の概念、例外処理、非同期Apex(バッチApex、スケジュールApex、Futureメソッド、Queueable Apex)、テストクラスとテストメソッドの作成、Apexトリガーと高度なトリガーパターン。

  2. データモデルと管理: Salesforceのデータモデルに対する理解、SOQL、SOSLクエリの高度な使用法、大量のデータを処理するためのベストプラクティス、外部システムとのデータ統合。

  3. Salesforceプラットフォームの開発: Visualforceページの高度なカスタマイズ、Lightning コンポーネントフレームワーク(Aura コンポーネントとLightning Web Components)を使用したモダンなユーザーインターフェースの開発。

  4. パフォーマンス: システムパフォーマンスと応答性を最適化するための技術、ガバナンス制限とリソース使用の管理。

  5. 統合: Salesforceプラットフォームと外部システムとの統合パターンとベストプラクティス、RESTとSOAP Webサービス、カスタムAPIの開発。

  6. セキュリティ: Salesforceプラットフォームにおけるセキュリティモデルの理解、共有設定、項目レベルのセキュリティ、プログラムによるレコードアクセス制御。

  7. デプロイメント: メタデータAPI、変更セット、Unmanagedパッケージを使用したデプロイメントプロセス、連続的インテグレーションとデプロイメントのベストプラクティス。


ここから問題と解答/解説になります。

過去問と模擬問題がセットになっており、模擬試験としても活用できます。

初めの10題のみ無料、合計100題、全問解答+全問解説付きになります。


1.ある企業がSalesforceを使用して、顧客情報の管理とプロジェクトの追跡を行っています。この企業は、プロジェクトのステータス更新を自動化するために、Apexトリガーを使用したいと考えています。プロジェクトのレコードが更新されたときに、特定の条件下で関連するタスクのステータスも自動的に更新されるように設定する必要があります。この要件を満たすために、Apexトリガーの設計に関する以下の選択肢のうち、最も適切な方法はどれでしょうか?

A. before update トリガーを使用して、関連するタスクのステータスを直接更新します。

B. after update トリガーを使用し、関連するタスクのステータスを更新するための@futureメソッドを呼び出します。

C. before insert トリガーを使用して、新しく追加されるプロジェクトレコードのみを対象に、関連するタスクのステータスを更新します。

D. after insert トリガーを使用し、データベースにレコードが永続化された後に、関連するタスクのステータスをバルクAPIを使用して更新します。



正解: B

解説:

  • A: before update トリガーを使用して、関連するタスクのステータスを直接更新します。 このアプローチでは、レコードが更新される前に関連するタスクのステータスを更新しようとしますが、この時点ではトランザクションが完了していないため、関連するデータの整合性に問題が生じる可能性があります。また、他のbefore updateロジックに影響を与える可能性があります。

  • B: after update トリガーを使用し、関連するタスクのステータスを更新するための@futureメソッドを呼び出します。 これが最も適切なアプローチです。after updateトリガーはレコードがデータベースに永続化された後に実行されるため、トリガーによって引き起こされる変更は整合性を保持します。また、@futureメソッドを使用することで、長時間実行される処理を非同期に実行し、ガバナ制限の問題を避けることができます。

  • C: before insert トリガーを使用して、新しく追加されるプロジェクトレコードのみを対象に、関連するタスクのステータスを更新します。 このシナリオでは、更新ではなく新規作成のコンテキストにのみ焦点を当てています。したがって、既存のプロジェクトレコードの更新に関する要件を満たしません。

  • D: after insert トリガーを使用し、データベースにレコードが永続化された後に、関連するタスクのステータスをバルクAPIを使用して更新します。 この選択肢は新規レコードの挿入に関するものであり、既存のレコードの更新シナリオには適用されません。また、バルクAPIは大量のデータ操作に適していますが、このケースのような自動化プロセスでの使用は一般的ではありません。


2.ある企業がSalesforceのカスタムオブジェクトを使用して顧客の注文管理を行っています。注文オブジェクトには、注文日、納期、および状態(注文受付、処理中、出荷済み)などの項目があります。企業は、注文が出荷済み状態になったときに、顧客に自動的に通知メールを送信したいと考えています。このプロセスを実装するために、Salesforceのどの機能を使用するのが最適でしょうか?

A. プロセスビルダーを使用して、注文の状態が出荷済みに更新された際にメールアラートを送信する。

B. ワークフロールールを使用して、注文の状態が出荷済みになったときにメールアラートを送信する。

C. Apexトリガーを使用して、注文の状態が出荷済みになったときにカスタムメール送信ロジックを実行する。

D. ライトニングコンポーネントを使用して、ユーザーが手動で出荷済み状態に更新したときにメールを送信する。



正解: A

解説:

  • A: プロセスビルダーを使用して、注文の状態が出荷済みに更新された際にメールアラートを送信する。 これは、コードを書かずに自動化プロセスを設計できるため、最適な選択です。プロセスビルダーは、特定のレコードの変更に基づいてアクションをトリガーする複雑なロジックをサポートしています。

  • B: ワークフロールールを使用して、注文の状態が出荷済みになったときにメールアラートを送信する。 ワークフロールールも要件を満たすことができますが、Salesforceはプロセスビルダーを推奨しており、より高度な自動化が可能です。ただし、シンプルなシナリオではワークフローも有効な選択肢となり得ます。

  • C: Apexトリガーを使用して、注文の状態が出荷済みになったときにカスタムメール送信ロジックを実行する。 この方法も要件を満たすことは可能ですが、メール送信のような標準的なプロセスにカスタムコードを使用するのは、よりシンプルかつ保守が容易な宣言的なアプローチが利用可能な場合、推奨されません。

  • D: ライトニングコンポーネントを使用して、ユーザーが手動で出荷済み状態に更新したときにメールを送信する。 この選択肢は、プロセスの自動化ではなく、ユーザーの手動操作に依存しています。自動化の要件を満たさないため、このシナリオには適していません。


3.Salesforceでカスタムレポートタイプを作成する際、あるコンサルティング企業が顧客のプロジェクト管理プロセスを改善しようとしています。企業は、プロジェクトオブジェクト(親)とタスクオブジェクト(子)の関係を持っており、プロジェクトごとに複数のタスクを追跡しています。彼らは、プロジェクトとそれに関連するすべてのタスクを表示し、タスクのステータスに基づいてフィルタリングできるレポートを作成したいと考えています。この要件を最も効果的に満たすカスタムレポートタイプの設定はどれでしょうか?

A. プロジェクトを主オブジェクトとし、タスクを関連オブジェクトとするカスタムレポートタイプを作成し、タスクのステータス項目をレポートのフィルタ条件として使用します。

B. タスクを主オブジェクトとし、プロジェクトを関連オブジェクトとするカスタムレポートタイプを作成し、タスクのステータス項目をレポートのフィルタ条件として使用します。

C. プロジェクトとタスクを同等のオブジェクトとして扱い、これらを結合する新しいカスタムオブジェクトを作成し、この新しいオブジェクトをカスタムレポートタイプの基礎とします。

D. プロジェクトオブジェクトのみを使用し、カスタムレポートタイプを作成します。その後、計算式項目を使用して、関連するタスクのステータス情報をプロジェクトレポートに組み込みます。



正解: A

解説:
A: プロジェクトを主オブジェクトとし、タスクを関連オブジェクトとするカスタムレポートタイプを作成し、タスクのステータス項目をレポートのフィルタ条件として使用します。 これは、プロジェクトとそれに関連するタスクを一覧表示し、特定の条件(例えば、タスクのステータス)に基づいてフィルタリングする必要がある場合に最適なアプローチです。レポートのユーザーは、関連するデータを容易に視覚化し、分析できます。

  • B: タスクを主オブジェクトとし、プロジェクトを関連オブジェクトとするカスタムレポートタイプを作成し、タスクのステータス項目をレポートのフィルタ条件として使用します。 このアプローチは、タスクに焦点を当てた分析が主目的の場合に有効ですが、プロジェクトとその関連タスクの全体的なビューを提供するという初期の要件を完全には満たしません。

  • C: プロジェクトとタスクを同等のオブジェクトとして扱い、これらを結合する新しいカスタムオブジェクトを作成し、この新しいオブジェクトをカスタムレポートタイプの基礎とします。 この選択肢は不必要に複雑であり、既存のオブジェクト間の関係を利用するより簡単な方法で要件を満たすことができます。また、追加のオブジェクト管理と設計のオーバーヘッドが発生します。

  • D: プロジェクトオブジェクトのみを使用し、カスタムレポートタイプを作成します。その後、計算式項目を使用して、関連するタスクのステータス情報をプロジェクトレポートに組み込みます。 この方法では、タスクの詳細レベルでの分析が難しくなり、タスクごとに異なるステータスを持つプロジェクトを正確に表現することができません。したがって、このアプローチは要件を効果的に満たすことができません。


4.カスタム Lightning コンポーネントの一部には、組織内の商談の総数 (数百万) が表示されます。Lightning コンポーネントは、Apex コントローラを使用して必要なデータを取得します。開発者が Lightning コンポーネントの商談の総数を取得する最適な方法は何ですか?

A.商談レコードの数をカウントする Apex Batch ジョブ
B.商談レコードの数をカウントする SOQL for ループ
C.商談オブジェクトに対する SUM() SOQL 集計クエリ
D.商談オブジェクトに対する COUNT() SOQL 集計クエリ



正解:D

解説:
A. 商談レコードの数をカウントするApex Batchジョブは、大量のレコードに対してバッチ処理を行う際に使用します。この方法は、非同期で実行され、システムのリソースを節約することができますが、リアルタイムのデータ取得には適していません。バッチジョブは一定のスケジュールに従って実行されるため、最新のデータを即座に反映する必要がある場合には不適切です。

B. 商談レコードの数をカウントするSOQL forループは、大量のレコードを処理する際にガバナ制限に達する可能性があります。また、この方法は処理に時間がかかり、パフォーマンスに影響を与える可能性があるため、大量のデータを即座に取得する必要がある場合には最適ではありません。

C. 商談オブジェクトに対するSUM() SOQL集計クエリは、特定の数値項目の合計値を計算する際に使用します。商談の総数を取得する場合には、この方法は直接的ではなく、目的に合っていません。

D. 商談オブジェクトに対するCOUNT() SOQL集計クエリは、レコードの総数を効率的に取得するための最適な方法です。このクエリは、大量のレコードが存在しても高速に実行され、リアルタイムでのデータ取得に適しています。ガバナ制限の影響を最小限に抑えながら、必要な情報を迅速に提供することができます。


5.Visualforce ページの GET 要求の実行順序で、このステップの後に何が起こりますか?
コントローラーと拡張機能のコンストラクターを評価する

A.HTML レスポンスをブラウザに送信する
B.<apex: form> が存在する場合はビューステートを作成する
C.カスタム コンポーネントのコンストラクタと式を評価する
D.式、アクション属性、およびメソッド呼び出しを評価する



正解:C

解説:
A. HTMLレスポンスをブラウザに送信するステップは、Visualforceページのライフサイクルの最終段階で行われます。これは、すべてのコントローラーのロジックが実行され、ページが完全にレンダリングされた後に起こります。したがって、コントローラーと拡張機能のコンストラクターを評価した直後にこのステップが来るわけではありません。

B. apex:formが存在する場合はビューステートを作成するステップは、Visualforceページがクライアントに送信される直前に行われます。ビューステートは、ページの状態を保持するために使用されますが、これはコントローラーと拡張機能のコンストラクターが評価された後、ページの各コンポーネントが処理された後のプロセスです。

C. カスタムコンポーネントのコンストラクタと式を評価するステップは、コントローラーと拡張機能のコンストラクタが評価された後に行われます。このプロセスでは、ページに含まれるカスタムコンポーネントが初期化され、そのコンストラクタが実行され、関連する式が評価されます。これにより、ページのレンダリングに必要なデータが準備されます。

D. 式、アクション属性、およびメソッド呼び出しを評価するステップは、ページのライフサイクル内で複数の場所で発生する可能性がありますが、主にページのレンダリングプロセス中や、アクションメソッドがトリガーされた後に行われます。この評価は、Visualforceページの動的な部分(たとえば、条件に基づいて表示内容が変わる部分)を処理するために必要です。コントローラーと拡張機能のコンストラクター評価の直後に必ずしも行われるわけではなく、ページのライフサイクルの中で異なるタイミングで発生します。


6.@future 非同期 Apex メソッドに適しているユースケースはどれですか? 2つ答えを選択してください

A.開発者には、バッチで実行する必要がある大量のデータを含む長時間実行されるジョブがあります。
B.開発者は、DML 操作を分離し、混合保存 DML エラーを回避する必要があります。
C.開発者には実行時間の長いメソッドがあり、Apex トランザクションの遅延を防ぐ必要があります。
D.開発者には、通常のトランザクションで許可されるよりも大きなクエリ結果を必要とするジョブがあります。



正解:B,C

解説:
A. @futureメソッドは、非同期でコードを実行するために使用されますが、大量のデータをバッチで処理する必要がある長時間実行されるジョブには、バッチApexがより適しています。バッチApexは大量のレコードを処理するために特別に設計されており、一度に処理するレコードの数を制御し、ガバナ制限を超えないようにします。したがって、このシナリオでは@futureメソッドよりもバッチApexの使用が推奨されます。

B. @futureメソッドは、同期処理中にDML操作を分離するのに適しています。これにより、混合保存DMLエラーを回避し、コードの実行中に発生する可能性のあるロックや競合を避けることができます。非同期処理を使用することで、主要なトランザクションが完了した後にDML操作を実行することができ、これは特にトリガーや複雑な処理フローで有効です。

C. 実行時間が長いメソッドがあり、Apexトランザクションの遅延を防ぐ必要がある場合、@futureメソッドを使用することで、そのメソッドを非同期に実行し、同期処理のパフォーマンスへの影響を最小限に抑えることができます。これは、リアルタイムのユーザーインターフェースの応答性を維持しながら、重い処理をバックグラウンドで実行する必要がある場合に特に有用です。

D. 通常のトランザクションで許可されるよりも大きなクエリ結果を必要とするジョブには、@futureメソッドではなく、バッチApexやBig Objectなどの他のSalesforceの機能を検討するべきです。@futureメソッドはガバナ制限の面である程度の柔軟性を提供しますが、大量データの処理や複雑なクエリに関しては、より適した機能やアーキテクチャを使用することが推奨されます。


7.企業がSalesforceでカスタムオブジェクト「プロジェクト管理」を作成し、プロジェクトの各フェーズ(企画、開発、テスト、完了)を追跡しています。各プロジェクトレコードには、ステータス、開始日、終了日などの項目があります。企業は、プロジェクトが特定のステータスに達したときに自動的に関連するタスクを生成し、プロジェクトチームに通知する機能を実装したいと考えています。この要件を最も効率的に満たす方法はどれでしょうか?

A. ワークフロールールを使用してタスクを生成し、メールアラートで通知する。

B. プロセスビルダーを使用してタスクを生成し、関連するチームメンバーにメールアラートを送信する。

C. Apexトリガーを使用してタスクを生成し、Apexメール送信クラスを呼び出してチームに通知する。

D. タスク生成と通知を行うためにフローを使用する。




正解: B

解説:

A. ワークフロールールは基本的な自動化ニーズに適していますが、プロセスビルダーに比べて柔軟性に欠けるため、複雑な条件や複数のアクションを要するタスク生成と通知プロセスには最適ではありません。

B. プロセスビルダーは、より高度な自動化ニーズに対応するための強力なツールです。条件に基づいてレコードを作成し、メールアラートを送信するなど、複数のアクションを一連のステップで定義できます。このケースでは、プロジェクトが特定のステータスに達したときに自動的にタスクを生成し、チームメンバーに通知する複雑なプロセスを簡単に設定できるため、最も効率的な方法です。

C. ApexトリガーとApexメール送信クラスを使用する方法は、非常にカスタマイズされたロジックが必要な場合や、標準機能やプロセスビルダーでカバーできない特殊な要件がある場合に適しています。しかし、このアプローチは開発とテストにより多くの時間を要し、保守が難しいため、より簡単な代替手段が利用可能な場合はそちらを選択するべきです。

D. フローを使用する方法も有効な選択肢ですが、プロセスビルダーに比べて設定が複雑になる可能性があります。フローはインタラクティブなユーザー入力を必要とするプロセスや、より複雑なデータ操作が必要な場合に適していますが、このシナリオではプロセスビルダーが提供する宣言的なアプローチが最も適切で効率的です。


8.一度に数千の取引先レコードをロードする Visualforce ページ内のカスタム データ テーブルのレンダリング時間が遅いというユーザーの苦情があります。
このような問題を軽減するために、開発者は何ができるでしょうか?

A.標準の取引先 リスト コントローラーを使用し、ページネーションを実装します。
B.JavaScript Remoting を使用して取引先をクエリします。
C.Account レコードをクエリするときに、Apex コードで transient キーワードを使用します。
D.サードパーティのデータ テーブル ライブラリを静的リソースとしてアップロードします。


正解:C

解説:
A. 標準の取引先リストコントローラーを使用し、ページネーションを実装する方法は、ユーザーが一度に見ることができるレコードの量を制限することでレンダリング時間を改善する手段の一つです。ページネーションはユーザー体験を向上させることができますが、バックエンドでのデータ取得効率には直接的な影響を与えません。

B. JavaScript Remotingを使用して取引先をクエリする方法は、クライアントサイドからサーバーサイドのメソッドを非同期に呼び出し、ページの再ロードを伴わずにデータを取得・表示することができます。これはユーザーインターフェースの応答性を向上させる効果的な方法ですが、大量のデータを処理する際のサーバー側の負荷軽減には直接寄与しません。

C. Accountレコードをクエリする際に、Apexコードでtransientキーワードを使用する方法は、ビジュアルフォースページのビューステートサイズを減少させるために有効です。transientキーワードを使用すると、不要なデータがビューステートに保存されなくなり、ページのロード時間が改善されます。このアプローチは、特に大量のデータを扱うページのパフォーマンス向上に直接的に寄与します。

D. サードパーティのデータテーブルライブラリを静的リソースとしてアップロードする方法は、クライアントサイドでのデータの表示や操作をより効率的にするための手段です。これはページのユーザーインターフェースを向上させることができますが、サーバーからデータを取得する際の効率性やページのロード時間には直接的な影響を与えません。


9.Salesforceでカスタム顧客サポートプロセスを設計する際、企業はサポートケースの作成時に自動的に一連の検証を実施し、条件に応じて特定の項目の更新や追加タスクの生成を行いたいと考えています。このプロセスに関連する要件を満たすために最も効果的な方法はどれでしむか?

A. ワークフロールールと項目更新アクションを使用する。

B. プロセスビルダーを使用して、条件に基づく項目更新とタスク生成を自動化する。

C. Apexトリガーを使用し、ケース作成時の検証と条件に基づくロジックをカスタムコードで実装する。

D. ビジュアルフローを使用して、ユーザー入力に基づく条件分岐とアクションの実行を定義する。




正解: B

解説:

A. ワークフロールールと項目更新アクションは、基本的な自動化ニーズに対応することができますが、より複雑な条件分岐や複数の関連アクション(例えば、条件に応じたタスク生成)を要するプロセスには柔軟性が不足しています。ワークフローは単純な自動化には適していますが、このシナリオでは限界があります。

B. プロセスビルダーは、条件に基づく複雑なビジネスプロセスを視覚的に設計し、自動化するための強力なツールです。項目の更新や新しいレコードの生成、メールの送信など、複数のアクションをシーケンスで実行できるため、このシナリオに最適なソリューションを提供します。

C. Apexトリガーは、標準機能や宣言的な自動化ツールでカバーできない複雑なロジックや条件を実装する必要がある場合に使用されます。Apexは強力で柔軟性がありますが、開発と保守には時間と専門知識が必要です。このシナリオでは、プロセスビルダーで要件を満たせるため、Apexの使用は推奨されません。

D. ビジュアルフローは、ユーザーがインタラクティブに操作するプロセスを設計する際に適しています。ユーザー入力に基づく動的なプロセスを実現することができますが、ケース作成時の自動化に関しては、プロセスビルダーの方が直接的に要件を満たすため、より適切な選択肢です。

このシナリオでは、条件に基づく自動化プロセスの設計と実行に最も効率的かつ効果的な方法はプロセスビルダーの使用であり、開発者や管理者がコードを書かずに複雑なビジネスロジックを実装できるため、正解とされます。


10.開発者は、次の要件を満たすコードを作成するよう求められています。
次の入力を受け取ります: Map<ld, Project_c), List<Account>
外部の Web サービスに対して長時間実行される可能性のあるコールアウトを実行します
プロセスが正常に実行されたことを確認する方法を提供します
どの非同期機能を使用する必要がありますか?

A.スケジュール可能なインターフェース
B.@future (callout=true)
C.キュー可能インターフェイス
D.Database.AllowCallouts インターフェイス



正解:C

A. スケジュール可能なインターフェースは、指定した時間にApexクラスを実行するために使用されます。これは定期的に実行する必要があるジョブに適していますが、外部Webサービスに対して非同期コールアウトを実行し、特定のプロセスが正常に実行されたことを確認するための直接的なメカニズムを提供しません。

B. @future (callout=true) アノテーションは、非同期コールアウトを実行する際に使用される手法です。このアプローチは非同期処理を可能にし、特に単一のメソッドの実行に焦点を当てる場合に有効ですが、より複雑なロジックや状態の追跡、または複数の非同期処理の管理には制限があります。

C. キュー可能インターフェイスは、非同期Apexジョブをキューに追加して実行するために使用されます。これにより、開発者はより柔軟なエラーハンドリング、状態の保持、そして他のキュー可能ジョブやチェインされた非同期処理を実装する能力を持つことができます。また、外部Webサービスに対する長時間実行される可能性のあるコールアウトを実行し、プロセスが正常に実行されたことを確認する機能を提供します。この要件に最も適しているため、正解とされます。

D. Database.AllowCallouts インターフェイスは、Apexテストメソッド内でHTTPコールアウトを模擬するために使用されるものであり、非同期処理や外部サービスとの実際のインタラクションを実行するためのものではありません。主にテストコンテキストで使用されるため、このシナリオの要件を直接満たすものではありません。

したがって、外部のWebサービスに対して長時間実行される可能性のあるコールアウトを実行し、プロセスが正常に実行されたことを確認する方法を提供するためには、キュー可能インターフェイス(C)の使用が推奨されます。

ここから先は

90,369字

¥ 2,000

この記事が気に入ったらサポートをしてみませんか?