Salesforce 認定 Platform デベロッパー 上級 無料問題 3 / 10 ・ 分野2: ロジックとプロセスの自動化
プラットフォームイベントを3件まとめて EventBus.publish() で公開した。1件は必須の項目が空で公開できなかった。ドキュメントの説明に合うものはどれか。
- 失敗したイベントは再試行の列に入り、成功するまで公開が繰り返される
- 1件でも失敗すると例外が投げられ、3件とも公開が取り消される
- 残りの2件は公開でき、失敗は戻り値の SaveResult の中のエラーで分かる
- 3件とも SaveResult の isSuccess() が true になり、失敗は後のメールで分かる
正解と解説を見る
正解: C
正解の理由
EventBus.publish() は、イベントごとの結果を Database.SaveResult のリストで返す。公開できなかったイベントのエラーは Database.Error で返る。EventBus.publish() は、ほかのイベントがエラーで公開できなくても、渡されたイベントの一部を公開できる。公開できなかったことによる例外は投げない。
違う選択肢
「1件でも失敗すると例外が投げられ、3件とも公開が取り消される」… EventBus.publish() は、ほかのイベントがエラーで公開できなくても、渡されたイベントの一部を公開できる。公開できなかったことによる例外は投げず、結果は SaveResult で返す。
「失敗したイベントは再試行の列に入り、成功するまで公開が繰り返される」… 公開できなかったイベントは SaveResult のエラーで分かるだけで、自動で再試行されるとは書かれていない。
「3件とも SaveResult の isSuccess() が true になり、失敗は後のメールで分かる」… 公開できなかったイベントは、SaveResult の Database.Error で返る。isSuccess() が true になるのは公開の受け付けに成功したイベント。
書き方の要点
戻り値を見ないと、公開の失敗に気づけない。SaveResult を回して isSuccess() と getErrors() を確かめる。isSuccess() が true でも、それは公開の要求を受け付けたという途中の結果で、最終の結果は公開のコールバックで受け取る。