Apex での例外
例外は、コード実行の正常な流れを中断させるエラーやその他のイベントが発生したことを通知します。throw ステートメントは例外の生成に使用され、try、catch、および finally ステートメントは例外から適切に復旧するために使用されます。
コードでエラーを処理するには、System.assert コールのようなアサーションの使用や、エラーコードや Boolean 値を返すなど、さまざまな方法がありますが、なぜ例外を使うのでしょうか。例外を使用する利点は、エラー処理が簡素化されることです。例外は、コールされたメソッドからコール側まで、エラーを処理する catch ステートメントが見つかるまで必要なだけ上位へと伝達します。これにより、各メソッドでエラーを処理するコードを記述する必要がなくなります。また、finally ステートメントを使用することで、変数のリセットやデータの削除など、例外からの復旧を一元的に行うことができます。
例外が発生すると何が行われるか
例外が発生すると、コードの実行が停止します。例外の前に処理された DML 操作はロールバックされてデータベースにはコミットされません。例外はデバッグログに記録されます。未対応の例外 (コードがキャッチしない例外の場合) Salesforce から例外情報を記載したメールが送信されます。エンドユーザーの Salesforce ユーザーインターフェースにはエラーメッセージが表示されます。
未対応の例外メール
未対応の Apex 例外が発生した場合、Apex スタック追跡、例外メッセージ、および顧客の組織とユーザー ID を含むメールが送信されます。他のデータはレポートに記載されません。未対応の例外メールは、失敗したクラスまたはトリガーの LastModifiedBy 項目で指定された開発者にデフォルトで送信されます。さらに、Salesforce 組織のユーザーと任意のメールアドレスにメールを送信することもできます。これらのメール受信者は、プロセスまたはフローエラーメールを受信することもできます。これらのメール通知を設定するには、[設定] から [クイック検索] ボックスに「Apex 例外メール」と入力し、[Apex 例外メール] を選択します。入力したメールアドレスは、顧客の組織のすべての管理パッケージに適用されます。Tooling API オブジェクトの ApexEmailNotification を使用して、Apex 例外メールを設定することもできます。
![[New Merchandise (新しい商品)] ページに表示された処理されない例外](https://developer.salesforce.com/docs/resources/img/ja-jp/260.0?doc_id=images%2Fapex_exceptions_unhandled_ui.png&folder=apexcode)