LoginSignup
5
1

More than 1 year has passed since last update.

Salesforce学習記録-Apex での例外

Posted at

Apex での例外の基本

下記から抜粋
 Apex での例外
 Exception クラスおよび組み込み例外

例外が発生すると何が行われるか

  ・コードの実行が停止します。
  ・例外の前に処理された DML 操作はロールバックされてデータベースにはコミットされません。
  ・例外はデバッグログに記録されます。
  ・未対応の例外1:コードがキャッチしない例外の場合、Salesforce から例外情報を記載したメールが送信されます。
   <例外メール>
    -メール内容:Apex スタック追跡、例外メッセージ、および顧客の組織とユーザ ID を含むメールが送信されます。
    -宛先:失敗したクラスまたはトリガの LastModifiedBy 項目で指定された開発者にデフォルトで送信されます。
        個別指定もできる:[設定]⇒[クイック検索] ⇒[Apex 例外メール]
  ・未対応の例外2:エンドユーザの Salesforce ユーザインターフェースにはエラーメッセージが表示されます。
   image.png

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 メソッド

image.png

Exception クラスおよび組み込み例外

例外 説明
AssertException コードの実行が停止する System.assert エラー。必要に応じて、assert() メソッドの最後の (msg) 引数で指定したカスタムメッセージを含めます。
AsyncException 非同期コールのエンキューの失敗など、非同期処理に関する問題を示す例外。
BigObjectException Big Object オブジェクトレコードに関する問題 (Big Object レコードへのアクセスまたは挿入試行中の接続タイムアウトなど)。
CalloutException 外部システムへのコールアウトの失敗など、Web サービス処理に関する問題を示す例外。
DmlException insert ステートメントでレコードの必要な項目が欠落している場合など、DML ステートメントに関する問題を示す例外。image.png
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 範囲外のインデックスへのアクセスなど、リストに関する問題を示す例外。image.png
MathException 0 による除算など、算術演算に関する問題を示す例外。
NoAccessException 現在のユーザがアクセス権を付与されていない sObject へのアクセスなど、承認されないアクセスに関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。
NoDataFoundException 削除された sObject へのアクセスなど、存在しないデータに関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。
NoSuchElementException リストの範囲外の項目にアクセスしようとすると、この例外が発生します。この例外は、イテレータの next メソッドで使用されます。たとえば、iterator.hasNext() == false で iterator.next() をコールすると、この例外が発生します。この例外は、Apex Flex キューメソッドでも使用され、Flex キューの無効な位置にあるジョブにアクセスしようとすると発生します。
NullPointerException 次のコードで示す例のような、null 値の逆参照に関する問題を示す例外。image.png
QueryException sObject の単一変数に対する、レコードを返さないまたは複数のレコードを返すクエリの割り当てなど、SOQL クエリに関する問題を示す例外。image.png
RequiredFeatureMissing Chatter が有効でない組織にリリースされているコードに Chatter 機能が要求されている。
SearchException SOAP API search() コールで実行される SOSL クエリの問題を示す例外。たとえば、searchString パラメータに含まれる文字数が 2 文字未満。詳細は、『SOAP API 開発者ガイド』を参照してください。
SecurityException Crypto ユーティリティクラスの静的メソッドに関する問題を示す例外。詳細は、「Crypto クラス」を参照してください。
SerializationException データの逐次化に関する問題を示す例外。この例外は Visualforce ページで使用します。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。
SObjectException insert の間のみ変更可能な update ステートメント内の項目の変更など、sObject レコードに関する問題を示す例外。image.png
StringException ヒープサイズを超える string など、string に関連する問題を示す例外。
TypeException valueOf メソッドを使用した string 型「a」の integer 型への変換など、型の変換に関する問題を示す例外。
UnexpectedException Salesforce 内の復旧できない内部エラーが発生しました。この例外が発生すると実行が停止します。必要に応じて、Salesforce カスタマーサポートに詳細をお問い合わせください。
VisualforceException Visualforce ページに関する問題を示す例外。Visualforce についての詳細は、『Visualforce 開発者ガイド』を参照してください。
XmlException XML の読み取り、書き込みの失敗など、XmlStream クラスに関する問題を示す例外。
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1