この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

EventBus.RetryableException によるイベントトリガーの再試行

イベント通知を処理するための別の機会を利用できます。一時的なエラーが発生した場合や、条件の変化を待機している場合は、トリガーの再試行が役立ちます。エラーまたは条件がイベントレコードの外部で発生し、それらがその後なくなる可能性がある場合に、トリガーを再試行します。

可能な場合は、Equality の会社の値に一致するように、含めない用語を変更しました。顧客の実装に対する影響を回避するために、一部の用語は変更されていません。

メモ

一次的な条件の例: マスターレコードの 1 つの項目が特定の値に等しい場合にトリガーで関連レコードをマスターレコードに追加するとします。後続の試行で項目値が変化し、トリガーで操作を実行できる可能性があります。

イベントトリガーを再試行するには、EventBus.RetryableException を発生させます。短い遅延の後、イベントが再送信されます。遅延は後続の再試行で大きくなります。トリガーでイベントのバッチを受信した場合、トリガーの再試行により、バッチ内のすべてのイベントが再送信されます。イベントは、変化しない ReplayID 項目値に基づいて、最初の順番で再送信されます。トリガーにより、再送信されるイベントと以降のバッチが順次処理されます。再送信されるイベントには、元のイベントと同じ項目値が含まれますが、イベントのバッチサイズは異なる可能性があります。たとえば、再実行 ID 10 ~ 20 のイベントを最初のトリガーで受信したとします。再送信されるバッチには、再実行 ID 10 ~ 40 のイベントが含まれ、大きくなる可能性があります。トリガーが再試行されると、再試行前のトリガーで実行された DML 操作はロールバックされ、変更は保存されません。

再試行回数の制限

トリガーを再試行する場合、トリガーは最大 10 回実行できます (最初の実行と 9 回の再試行)。9 回再試行された後、トリガーはエラー状態に移行し、新しいイベントの処理を停止します。トリガーがエラー状態に移行してから実行状態に戻るまでに送信されたイベントはトリガーに再送信されません。イベントの処理を再開するには、トリガーを修正して保存します。

再試行回数を 9 回未満に制限することをお勧めします。トリガーが再試行された回数を確認するには、EventBus.TriggerContext.currentContext().retries プロパティを使用します。または、API バージョン 43.0 以降では、EventBusSubscriber.retries 項目を照会できます。

次の例は、EventBus.RetryableException を発生させる方法と再試行回数を制限する方法をわかりやすくするための骨格のみのトリガーを示しています。このトリガーは if ステートメントを使用して、特定の条件が true かどうかを確認します。または、try-catch ブロックを使用して、catch ブロックで EventBus.RetryableException を発生させることもできます。

1trigger ResendEventsTrigger on Low_Ink__e (after insert) {
2    if (condition == true) {        
3        // Process platform events.        
4    } else {
5        // Ensure we don't retry the trigger more than 4 times
6        if (EventBus.TriggerContext.currentContext().retries < 4) {
7            // Condition isn't met, so try again later.
8            throw new EventBus.RetryableException(
9                     'Condition is not met, so retrying the trigger again.');
10        } else {
11            // Trigger was retried enough times so give up and
12            // resort to alternative action.
13            // For example, send email to user.
14        }
15    }
16}