EventBus.RetryableException によるイベントトリガの再試行
一次的な条件の例: マスタレコードの 1 つの項目が特定の値に等しい場合にトリガで関連レコードをマスタレコードに追加するとします。後続の試行で項目値が変化し、トリガで操作を実行できる可能性があります。
イベントトリガを再試行するには、EventBus.RetryableException を発生させます。短い遅延の後、イベントが再送信されます。遅延は後続の再試行で大きくなります。トリガでイベントのバッチを受信した場合、トリガの再試行により、バッチ内のすべてのイベントが再送信されます。再送信されるイベントには、元のイベントと同じ項目値が含まれますが、イベントのバッチサイズは異なる可能性があります。たとえば、再生 ID 10 ~ 20 のイベントを最初のトリガで受信したとします。再送信されるバッチには、再生 ID 10 ~ 40 のイベントが含まれ、大きくなる可能性があります。トリガが再試行されると、再試行前のトリガで実行された DML 操作はロールバックされ、変更は保存されません。
トリガを再試行する場合、トリガを最大 10 回 (最初の実行と 9 回の再試行) 実行できます。トリガを 9 回再試行した後、トリガはエラー状態に移行し、新しいイベントの処理を停止します。イベントの処理を再開するには、トリガを修正して保存します。トリガがエラー状態に移行してから実行状態に戻るまでに送信されたイベントはトリガに再送信されません。トリガの再試行の制限を 9 回未満に設定することをお勧めします。トリガが再試行された回数を確認するには、EventBus.TriggerContext.currentContext().retries プロパティを使用します。
例
次の例は、EventBus.RetryableException を発生させる方法と再試行回数を制限する方法をわかりやすくするための骨格のみのトリガを示しています。このトリガは if ステートメントを使用して、特定の条件が true かどうかを確認します。または、try-catch ブロックを使用して、catch ブロックで EventBus.RetryableException を発生させることもできます。