Apex からのエラーの処理

Apex では、DmlExceptionQueryException など、さまざまな例外がスローされます。Apex 組み込み例外を使用するか、カスタム例外を作成できます。JavaScript コードで例外をより適切に処理するために、AuraHandledException を作成してスローすることもできます。AuraHandledException は、LWC および Aura コンポーネントでサポートされています。

Apex コントローラーコードでエラーが発生した場合、try-catch ブロックを使用して Apex のエラーを処理できます。このようにしないと、エラーは処理されず、クライアントに直接スローされます。

LWC エラー処理のベストプラクティス

Apex エラーを処理することで、クライアントに返されるエラーの詳細を制御できます。null を返す変数を使用して未対応の例外をスローする次の Apex メソッドを考えます。str パラメーターを渡さないため、str は null になり、str.toUpperCase() で例外がスローされます。

lwc-recipes リポジトリには、Apex からデータを取得したときのエラー処理を示す多くのサンプルがあります。apex* で始まるコンポーネント (apexImperativeMethod など) を探します。

エラーは Apex から直接返されて、body.stackTrace プロパティの ErrorExamples クラス名が表示されます。

AuraHandledException を使用したり、Exception を拡張するカスタム例外クラスを定義したりして、カスタム例外をスローおよびキャッチできます。

AuraHandledException は、Aura コンポーネントの JavaScript コントローラーにカスタムエラーメッセージを返します。ただし、これは Lightning Web コンポーネントでもサポートされています。

エラーメッセージには、カスタムメッセージと Apex から返されたメッセージが含まれます。これは e.getMessage() を介して使用できます。ただし、body.stackTrace プロパティはエラーに含まれません。

MyException などを使用して、独自の例外をスローし、独自のメッセージに渡すことができます。「カスタム例外の作成」を参照してください。

エラーメッセージには、例外がトリガーされた行番号と Apex クラス名が含まれます。

サーバーでエラーを処理し、クライアントに例外をまったく返さないのようにすることもできます。たとえば、サードパーティコールで例外が発生した場合に、Apex の例外を処理し、エラーをクライアントに転送しないようにできます。

次の例では、安全なナビゲーション演算子を使用して、str 変数が null でない場合は指定された文字列の大文字を返し、null の場合は null を返します。

前の例では、すべて文字列を使用してエラーを返しています。代わりにカスタムエラーオブジェクトを返すには、含める変数を定義するラッパークラスを作成します。

エラーには、ラッパークラスで定義した変数が含まれます。

ラッパークラスを使用してエラー構造を定義しておくと、Apex エラーを標準化する必要のあるチームと連携する場合に役立つ可能性があります。

Apex エラーを処理する場合、catch ブロックでさまざまな Apex 例外が考慮されていることを確認します。たとえば、DML および SOQL ステートメントを使用している場合は DmlException および QueryException エラーを処理します。

次の追加のガイドラインを考慮してください。

  • 複数の使用事例を処理することが想定される場合、コードを各種モジュールに分割します。すべてのコードを try ブロック内に配置しないでください。
  • 各ブロックのエラーを異なる方法で処理する必要がある場合、複数の try-catch ブロックを使用します。
  • catch ブロックで想定されるエラーのみを処理します。残りは、さらに伝達する必要があります。

関連トピック