Transaction Finalizers (パイロット)
非同期ジョブが成功または失敗したときに実行されるアクションを Transaction Finalizers よりも前に直接指定する方法はありません。SOQL クエリを使用して AsyncApexJob の状況をポーリングし、ジョブが失敗している場合にジョブを再度キューに追加することしかできません。Transaction Finalizers を使用すると、後処理アクションシーケンスをキュー可能ジョブに関連付け、ジョブの実行結果に基づいて関連するアクションを実行できます。
アクションをキュー可能ジョブに関連付けるには、最初に System.Finalizer インターフェースを実装するクラスを定義します。次に、キュー可能ジョブの execute メソッド内で Finalizer を関連付けます。System.Finalizer インターフェースを実装するインスタンス化されたクラスの引数として System.attachFinalizer メソッドを使用して、このメソッドを呼び出し Finalizer を関連付けます。1 つの Finalizer インスタンスのみを任意のキュー可能ジョブに関連付けることができます。execute メソッドの Finalizer の実装では、1 つの非同期 Apex ジョブ (キュー可能ジョブ、実行予定ジョブ、一括処理ジョブ) をキューに追加できます。Finalizer の実装ではコールアウトを使用できます。
execute (FinalizerContext ctx) メソッドは、指定した Finalizer インスタンスが関連付けられているキューに入れられたジョブごとにコールされます。execute メソッド内で、キュー可能ジョブの終了時に実行されるアクションを定義できます。System.FinalizerContext ��ラスは、Apex ランタイムエンジンによって作成され、引数として execute メソッドに挿入されます。System.FinalizerParentJobResult 列挙は、Finalizer が関連付けられている親非同期 Apex キュー可能ジョブの結果を表します。この列挙は、SUCCESS、UNHANDLED_EXCEPTION の値を取ります。
例
例
ログが更新されるたびにデータベースに書き込むのではなく、ジョブの完了時に完全なログをデータベースに一括で書き込みます。
例
現在のジョブが成功したか失敗したかに応じて、異なる種別のジョブがキューに入れられます。
例
キャッチ可能なエラーが発生するまでにキュー可能ジョブがどこまで進むのかを特定します。この例では、エラーの詳細も取得します。