Exception クラスおよび組み込み例外
例外は、コード実行の正常な流れを中断させるエラーを示します。Apex 組み込み例外を使用するか、カスタム例外を作成できます。すべての例外には共通のメソッドがあります。
すべての例外は、エラーメッセージや例外型を返す組込みメソッドをサポートしています。標準の exception クラスに加え、例外にはさまざまな型があります。
System 名前空間の例外を次に示します。
| 例外 | 説明 |
|---|---|
| AssertException | コードの実行が停止する System.assert エラー。必要に応じて、assert() メソッドの最後の (msg) 引数で指定したカスタムメッセージを含めます。 |
| AuraException | 従来の Aura 関連の例外。代わりに、System.AuraHandledException を使用します。 |
| AuraHandledException | JavaScript コントローラにカスタムエラーメッセージを返します。「Apex サーバ側コントローラからエラーを返す」を参照してください。 |
| AsyncException | 非同期コールのエンキューの失敗など、非同期処理に関する問題を示す例外。 |
| BigObjectException | Big Object オブジェクトレコードに関する問題 (Big Object レコードへのアクセスまたは挿入試行中の接続タイムアウトなど)。 |
| CalloutException | 外部システムへのコールアウトの失敗など、Web サービス処理に関する問題を示す例外。 |
| DmlException | insert ステートメントでレコードの必要な項目が欠落している場合など、DML ステートメントに関する問題を示す例外。 |
| EmailException | 送信の失敗など、メールに関する問題を示す例外。詳細は、「送信メール」を参照してください。 |
| ExternalObjectException | 外部オブジェクトレコードに関する問題 (外部システムに保存されているデータへのアクセス試行中の接続タイムアウトなど)。 |
| FinalException | 参照のみのコレクションまたはレコード (after-update トリガの sObject やファイナル変数など) を変更しようとする試行。この例外が発生すると実行が停止します。 |
| FlowException | Apex からのフローインタビューの開始に関する問題。たとえば、有効なバージョンのフローが見つからない場合や、Apex から開始できない場合などがこれに該当します。 |
| HandledException | 処理される一般的な例外。 |
| IllegalArgumentException | メソッド呼び出しで、不正な引数が指定されています。たとえば、Null 以外の引数を要求するメソッドに Null 値が渡された場合に、この例外が発生します。 |
| InvalidParameterValueException | この例外は Visualforce ページと Salesforce Functions の両方で使用されます。
|
| LimitException | ガバナ制限を超えました。この例外は、キャッチできません。 |
| JSONException | JSON のシリアライゼーション処理およびデシリアライゼーション処理に関する問題を示す例外。詳細は、System.JSON、System.JSONParser、および System.JSONGenerator のメソッドを参照してください。 |
| ListException | 範囲外のインデックスへのアクセスなど、リストに関する問題を示す例外。 |
| MathException | 0 による除算など、算術演算に関する問題を示す例外。 |
| NoAccessException | 現在のユーザがアクセス権を付与されていない sObject へのアクセスなど、承認されないアクセスに関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。 |
| NoDataFoundException | この例外は Visualforce ページと Salesforce Functions の両方で使用されます。
|
| NoSuchElementException | リストの範囲外の項目にアクセスしようとすると、この例外が発生します。この例外は、イテレータの next メソッドで使用されます。たとえば、iterator.hasNext() == false で iterator.next() をコールすると、この例外が発生します。この例外は、Apex Flex キューメソッドでも使用され、Flex キューの無効な位置にあるジョブにアクセスしようとすると発生します。 |
| NullPointerException | 次のコードで示す例のような、null 値の逆参照に関する問題を示す例外。 |
| QueryException | sObject の単一変数に対する、レコードを返さない、または複数のレコードを返すクエリの割り当てなど、SOQL クエリに関する問題を示す例外。 |
| RequiredFeatureMissing | Chatter が有効でない組織にリリースされているコードに Chatter 機能が要求されている。 |
| SearchException | SOAP API search() コールで実行される SOSL クエリの問題を示す例外。たとえば、searchString パラメータに含まれる文字数が 2 文字未満。詳細は、『SOAP API 開発者ガイド』を参照してください。 |
| SecurityException | Crypto ユーティリティクラスの静的メソッドに関する問題を示す例外。詳細は、「Crypto クラス」を参照してください。 |
| SerializationException | データのシリアライゼーションに関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。 |
| SObjectException | insert の間のみ変更可能な update ステートメント内の項目の変更など、sObject レコードに関する問題を示す例外。 |
| StringException | ヒープサイズを超える string など、string に関連する問題を示す例外。 |
| TypeException | valueOf メソッドを使用した string 型「a」の integer 型への変換など、型の変換に関する問題を示す例外。 |
| UnexpectedException | Salesforce 内の復旧できない内部エラーが発生しました。この例外が発生すると実行が停止します。必要に応じて、Salesforce カスタマーサポートに詳細をお問い合わせください。 |
| VisualforceException | Visualforce ページに関する問題を示す例外。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。 |
| XmlException | XML の読み取り、書き込みの失敗など、XmlStream クラスに関する問題を示す例外。 |
DmlException 例外の使用例を次に示します。
1Account[] accts = new Account[]{new Account(billingcity = 'San Jose')};
2try {
3 insert accts;
4} catch (System.DmlException e) {
5 for (Integer i = 0; i < e.getNumDml(); i++) {
6 // Process exception here
7 System.debug(e.getDmlMessage(i));
8 }
9}他の名前空間の例外については、以下を参照してください。
共通例外メソッド
例外メソッドは、例外のインスタンスからコールされ、処理されます。次の表にすべてのインスタンス例外メソッドを示します。すべての例外型に共通で次のメソッドが含まれます。
DMLException および EmailException メソッド
共通例外メソッドに加え、DMLException および EmailException には次のメソッドもあります。
| 名前 | 引数 | 戻り値 | 説明 |
|---|---|---|---|
| getDmlFieldNames | Integer i | String [] | 失敗した i 番目の行に示されるエラーの原因となった項目の名前を返します。 |
| getDmlFields | Integer i | Schema.sObjectField [] | 失敗した i 番目の行に示されるエラーの原因となった項目の項目トークンを返します。項目トークンについての詳細は、「動的 Apex」を参照してください。 |
| getDmlId | Integer i | string | 失敗した i 番目の行に示されるエラーの原因となったレコードの ID を返します。 |
| getDmlIndex | Integer i | Integer | 失敗した i 番目の行の元の行位置を返します。 |
| getDmlMessage | Integer i | string | 失敗した i 番目の行のユーザメッセージを返します。 |
| getDmlStatusCode | Integer i | string | 非推奨。代わりに getDmlType を使用してください。失敗した i 番目の行の Apex 失敗コードを返します。 |
| getDmlType | Integer i | System.StatusCode | System.StatusCode 列挙の値を返します。次に例を示します。System.StatusCode についての詳細は、「列挙」を参照してください。 |
| getNumDml | Integer | DML 例外で失敗した行数を返します。 |
QueryException のメソッド
共通例外メソッドに加え、QueryException には次のメソッドもあります。
| 名前 | 引数 | 戻り値 | 説明 |
|---|---|---|---|
| getInaccessibleFields | Map<String,Set<String>> | 各キーが sObjectType で、その対応する値が完全修飾形式 (Namespace__FieldName__c) のアクセス不可の一連の項目名である対応付けを返します。 このメソッドを使用して、QueryException の原因を確認します。返される対応付けにデータが含まれるのは、QueryException をスローしたメソッドが (デフォルトのシステムモードではなく) ユーザモードで実行されている場合のみです。 次のコードサンプルでは、ユーザに Contact.Email および Account.Website 項目への項目レベルセキュリティのアクセス権がないことを想定しています。 |