Apex での例外の基本
下記から抜粋
Apex での例外
Exception クラスおよび組み込み例外
例外が発生すると何が行われるか
・コードの実行が停止します。
・例外の前に処理された DML 操作はロールバックされてデータベースにはコミットされません。
・例外はデバッグログに記録されます。
・未対応の例外1:コードがキャッチしない例外の場合、Salesforce から例外情報を記載したメールが送信されます。
<例外メール>
-メール内容:Apex スタック追跡、例外メッセージ、および顧客の組織とユーザ ID を含むメールが送信されます。
-宛先:失敗したクラスまたはトリガの LastModifiedBy 項目で指定された開発者にデフォルトで送信されます。
個別指定もできる:[設定]⇒[クイック検索] ⇒[Apex 例外メール]
・未対応の例外2:エンドユーザの Salesforce ユーザインターフェースにはエラーメッセージが表示されます。
Exception のステートメント
throw のステートメント
例外を発生させるには、throw ステートメントに例外オブジェクトを指定して、特定のエラーに関する情報を提供します。
例:throw new exceptionObject();
Try-Catch-Finally のステートメント
try、catch、finally の各ステートメントを使用して、発生した例外から適切に復旧できます。
キャッチできない例外
・ガバナ制限に達した場合に実行時に発生する制限の例外 (System.LimitException)
・ライセンスの例外
・assertメソッド:アサーションの失敗は、例外としてログに記録されていても、try/catch ブロックを使用して捕捉できません。
カスタム例外の作成
・カスタム例外:Exception クラスを拡張して、「MyException」のようにクラス名の最後に Exception を指定します。
・システム定義の基本クラス Exception を拡張するため、すべての共通例外メソッドを継承します。
・ユーザ定義の例外型は継承ツリーを構成し、catch ブロックでこの継承ツリー内の任意のオブジェクトをキャッチできます。
例
public virtual class BaseException extends Exception {}
public class OtherException extends BaseException {}
try { } catch (BaseException e) { }
例外と内部例外の再発生
catch ブロックで例外をキャッチしたら、キャッチした例外変数を再発生させることもできます。
例
try {
// Throw first exception
throw new My1Exception('First exception');
} catch (My1Exception e) {
// Throw second exception with the first
// exception variable as the inner exception
throw new My2Exception('Thrown with inner exception', e);
}
共通例外メソッド
名前 |
引数 |
戻り値 |
説明 |
getCause |
|
Exception |
例外オブジェクトとして例外の原因を返します。 |
getLineNumber |
|
Integer |
例外が発生した箇所の行番号を返します。 |
getMessage |
|
string |
ユーザに表示されるエラーメッセージを返します。 |
getStackTraceString |
|
string |
発生した例外のスタック追跡を文字列として返します。 |
getTypeName |
|
string |
DmlException、ListException、MathException などの例外型を返します。 |
initCause |
Exception cause |
Void |
この例外の原因が設定されていない場合は設定します。 |
setMessage |
String s |
Void |
ユーザに表示されるエラーメッセージを設定します。 |
DMLException および EmailException メソッド
Exception クラスおよび組み込み例外
例外 |
説明 |
AssertException |
コードの実行が停止する System.assert エラー。必要に応じて、assert() メソッドの最後の (msg) 引数で指定したカスタムメッセージを含めます。 |
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 ページで使用される URL に関する問題が発生しました。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。 |
LimitException |
ガバナ制限を超えました。この例外は、キャッチできません。
|
JSONException |
JSON の逐次化処理および並列化処理に関する問題を示す例外。詳細は、System.JSON、System.JSONParser、および System.JSONGenerator のメソッドを参照してください。 |
ListException |
範囲外のインデックスへのアクセスなど、リストに関する問題を示す例外。
|
MathException |
0 による除算など、算術演算に関する問題を示す例外。 |
NoAccessException |
現在のユーザがアクセス権を付与されていない sObject へのアクセスなど、承認されないアクセスに関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。 |
NoDataFoundException |
削除された sObject へのアクセスなど、存在しないデータに関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。 |
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 クラスに関する問題を示す例外。 |