【解答・解説付き】Salesforce認定Sharing and Visibilityアーキテクト試験対策:第105問

【解答・解説付き】Salesforce認定Sharing and Visibilityアーキテクト試験対策:第105問

設問 

Universal Containers は、カスタム Apex コードに厳密なソフトウェアアーキテクチャを実装しました。要件の 1 つは、すべての SOQL クエリが再利用可能なクラス内に含まれていることです。Apex トランザクションのコンテキストに応じて、クエリは「共有あり」または「共有なし」のいずれかで実行できる必要があります。アーキテクトがこれらの要件を満たすことができる 2 つの方法はどれですか?(2つ選択)

選択肢

A. 再利用可能な SOQLQueries クラスを作成します。SOQLQueriesクラスで「With」または「Without Sharing」を指定しないでください。
B. 再利用可能な SOQLQueries クラスを作成します。SOQLQueriesクラスで「With」または「Without Sharing」を指定せず、runAs()メソッドを使用してコンテキストを動的に設定します。
C. 再利用可能な SOQLQueriesクラスを作成します。ユーザーコンテキストを必要とするメソッドには「共有あり」を指定し、システムコンテキストを必要とするメソッドには「共有なし」を指定します。
D. SystemSOQLQueries クラスと UserSOQLQueries クラスを作成します。UserSOQLQueries クラスに「With Sharing」キーワードを設定し、SystemSOQLQueries クラスに「Without Sharing」キーワードを設定します。

解答

解説

A. 再利用可能なSOQLQueriesクラスを作成します。クラスで「with」または「without sharing」を指定しない。
不正解です。クラスで共有指定を省略すると、呼び出し元クラスの共有コンテキストに依存する形になります。このため、意図しない共有設定でSOQLが実行されるリスクが高まり、セキュリティ事故やデータ漏洩につながる恐れがあります。特に、管理者権限で実行されるバッチクラスなどから呼び出すと、ユーザーの権限を無視してすべてのデータを取得してしまうリスクが顕在化します。エンタープライズ開発では、常に共有コンテキストを明示的に設計することが重要です。

B. 再利用可能なSOQLQueriesクラスで「with」または「without sharing」を指定せず、runAs()メソッドを使用してコンテキストを動的に設定します。
不正解です。runAs()は、テストクラス(@isTestが付いたクラス)でのみ使用可能な特殊メソッドであり、本番環境では使えません。runAs()を本番コードで使う設計をしてしまうと、デプロイ時にコンパイルエラーとなり、実行できません。この設問では本番コード設計のベストプラクティスを問うているため、B案は選択できません。動的なコンテキスト切替は「runAs()」ではなく、設計段階で共有コンテキストを適切に区別することによって実現すべきです。

第106問

こちらをクリック

Salesforceカテゴリの最新記事