Apex サーバ側コントローラからエラーを返す
サーバ側コントローラから System.AuraHandledException を作成してスローし、カスタムエラーメッセージを返します。
エラーの発生は避けられません。ユーザによる無効な入力、データベース内の重複レコードなど、一部のエラーは予期できます。一方、予期しないエラーが発生する場合もあります。少しでもプログラミングの経験があれば、予期せぬエラーの範囲はほぼ無限であることをご存じでしょう。
サーバ側コントローラのコードでエラーが発生した場合、2 つの対処方法が考えられます。そこでエラーをキャッチして、Apex でエラーを処理できます。それ以外の場合、エラーはコントローラの応答で戻されます。
Apex でエラーを処理するときにも、2 つの対処方法が考えられます。エラーを処理し、可能であれば復旧し、通常の応答をクライアントに返すことができます。または、AuraHandledException を作成してスローできます。
システム例外を返す代わりに AuraHandledException をスローする利点は、クライアントのコードで例外をより適切に処理できるという点です。システム例外はセキュリティ上の理由により重要な詳細情報が取り除かれるため、不安を煽る「内部サーバエラーが発生しました…」というメッセージになります。このメッセージは誰も好みません。AuraHandledException を使用すると、クライアント側のコードに返される応答にいくつかの詳細情報を追加できます。さらに良いことには、より適切なメッセージをユーザに表示できます。
不正入力に対する応答で AuraHandledException を作成してスローする例を次に示します。ただし、AuraHandledException を使用する真価は、システム例外への応答で使用するときに発揮されます。たとえば、DML 例外のキャッチへの応答では、クライアントコンポーネントのコードにその例外を伝搬する代わりに AuraHandledException をスローします。
1public with sharing class SimpleErrorController {
2
3 static final List<String> BAD_WORDS = new List<String> {
4 'bad',
5 'words',
6 'here'
7 };
8
9 @AuraEnabled
10 public static String helloOrThrowAnError(String name) {
11
12 // Make sure we're not seeing something naughty
13 for(String badWordStem : BAD_WORDS) {
14 if(name.containsIgnoreCase(badWordStem)) {
15 // How rude! Gracefully return an error...
16 throw new AuraHandledException('NSFW name detected.');
17 }
18 }
19
20 // No bad word found, so...
21 return ('Hello ' + name + '!');
22 }
23
24}