Salesforce 認定 Platform デベロッパー 1-10

A. 0
B. 1
C. 2
D. 3

回答
C.2

do-while文は条件判定の前に必ず1回は処理が実行される構文です。
最初にxは0で初期化されますが、ループ内でx = 1が実行され、その後x++によりxは2になります。
その後、while (x < 1) の条件が評価されますが、xはすでに2のため条件はfalseとなりループは終了します。
したがってSystem.debugで出力される値は2です。
この問題はwhile文との違い、特に初回実行の有無を理解しているかを問う基本問題です。

デューフループ

A. @RestResource
B. @AuraEnabled
C. @RemoteAction
D. @HttpInvocable

回答
B. @AuraEnabled

Lightningコンポーネント(AuraおよびLWC)からApexを呼び出すには、Apexメソッドやプロパティに@AuraEnabledを付与する必要があります
これによりクライアントサイドからサーバサイド処理へアクセス可能になります。
@RestResourceはREST API公開用、@RemoteActionはVisualforce向けの旧方式、@HttpInvocableは外部サービス連携用であり用途が異なります。
したがって、LightningコンポーネントとApexの連携に使用する正しいアノテーションは@AuraEnabledです

AuraEnabled 注釈

A. ヒープの合計サイズ
B. Salesforceサーバの最大CPU時間
C. Apexトランザクションごとの最大実行時間
D. SOQLクエリによって取得されるレコードの合計数
E. SOQLクエリ発行総数

回答
A. ヒープの合計サイズ
B. Salesforceサーバの最大CPU時間
D. SOQLクエリ発行総数

非同期Apex(Future、Queueable、Batchなど)では、同期処理よりもガバナ制限が緩和される項目が存在します具体的にはヒープサイズやCPU時間、SOQLクエリ数の上限が拡張されます。一方で、SOQLで取得できるレコード数やトランザクションの最大実行時間などは基本的に変わりません。したがって、非同期処理ではリソース消費の大きい処理を安全に実行できるよう一部制限が引き上げられる点が重要です

執行の総督と制限

A. 101
B. 100
C. 102
D. 252

回答
B. 100

このコードではループ内でinsertが2回実行されますが、1トランザクション内のDML文の上限(150回)を超えると例外が発生します
try-catchで囲まれているのは最初のinsertのみであり、後続のinsertは例外処理されません。
そのためガバナ制限に達した時点で未処理例外となり、トランザクション全体がロールバックされてすべてのレコード追加が取り消されます
結果として、元の100件のまま変化しません。

執行の総督と制限

A. 1→2→5→3→4
B. 2→3→4→1→5
C. 2→1→5→4→3
D. 2→1→5→3→4

回答
C. 2→1→5→4→3

Salesforceのトリガー実行順序では、まずbeforeトリガーが実行され、その後にシステム検証および入力規則の再チェックが行われます
続いて重複ルールが適用され、問題なければレコードはデータベースに保存(まだ未コミット)されます。その後にafterトリガーが実行されます。
したがって、beforeトリガーの後に検証→重複チェック→保存→afterトリガーの順序になる点が重要です

トリガーと実行順序

A. For(init_stmt, exit_condition; increment_stmt) { }
B. Do { } While(Condition)
C. For(variable : list_or_set) { }
D. While(Condition) { … }

回答
C. For(variable : list_or_set) { }

レコード数が不明なコレクション(ListやSet)を処理する場合は、拡張for文(for-each構文)を使用するのが最適です
この構文では.size()などで件数を取得する必要がなく、コレクション内の全要素を安全かつ簡潔に処理できます。
他のfor文やwhile文は件数管理や条件制御が必要となり冗長になります。
したがって、コレクション処理ではfor(variable :list_or_set)構文を使うのがベストプラクティスです

ループのために

A. 内部クラスまたは外部クラスのいずれかを共有と同様に宣言できますが、両方は宣言できません。
B. 内部クラスは外部クラスから共有設定を継承しません。
C. 内部クラスと外部クラスの両方を共有と同様に宣言できます。
D. 内部クラスは外部クラスから共有設定を継承します。

回答
B. 内部クラスは外部クラスから共有設定を継承しません。
C. 内部クラスと外部クラスの両方を共有と同様に宣言できます。

Apexではwith sharingやwithout sharingにより共有ルールの適用を制御しますが、内部クラスは外部クラスの共有設定を自動的には継承しません
そのため、それぞれのクラスで明示的に指定する必要があります。
また、内部クラスと外部クラスは独立して宣言できるため、両方のクラスに対して個別にsharing設定を定義することが可能です
この仕様はセキュリティ制御の明確化のために重要です。

共有付き、共有なし、そして継承共有キーワードを使います

A. Apexトリガー
B. HTTPコールアウト
C. カスタムコントローラ
D. 匿名ブロック

回答
D. 匿名ブロック

with sharingやwithout sharingを指定しない場合の挙動は実行コンテキストに依存します。匿名ブロックは実行ユーザーの権限で動作するため、組織の共有設定やユーザーのアクセス権に従ってデータアクセスが制御されます
一方、トリガーは常にシステムコンテキストで実行され、共有ルールを無視します。
カスタムコントローラは宣言に依存します。
したがって、明示指定なしでユーザーの共有設定に従うのは匿名ブロックです

共有付き、共有なし、そして継承共有キーワードを使います

A. Production
B. Dev Hub
C. 環境ハブ
D. Sandbox

回答
B. Dev Hub

Salesforce DXでスクラッチ組織を作成・管理するには、Dev Hubを有効化する必要があります
Dev Hubはスクラッチ組織の作成元となる機能であり、組織の中央管理ポイントとして機能します。
ProductionやSandboxは直接スクラッチ組織管理には使用されず、環境ハブも別用途の機能です。
したがって、Salesforce DXの利用において必須となるのはDev Hubである点が重要です

Dev Hub Orgを選択して有効化する

A. CSVファイルを使用する
B. HttpCalloutMocksを使用する
C. WebServiceTestsを使用する
D. 静的リソースを使用する

回答
CSVファイルを使用する
静的リソースを使用する

Apexテストでは外部データに依存せず、テストデータを用意することが重要です。
CSVファイルを用いることでテストデータを効率的に管理・読み込みできます
また、静的リソースとしてCSVを格納しテスト内で利用する方法も推奨されています。
HttpCalloutMocksやWebServiceTestsは外部通信のモック用であり、データ投入用途ではありません。
したがって、テストデータの読み込みにはCSVと静的リソースの組み合わせがベストプラクティスです

ユニット内の組織データからのテストデータの分離 テスト