Apex トリガによるプラットフォームイベント通知の登録
イベント通知を登録するには、イベントオブジェクト種別で after insert トリガを記述します。after insert トリガイベントは、プラットフォームイベントの公開後の時点に対応します。イベントメッセージの公開後に、after insert トリガが起動されます。
例
この例は [Low Ink (低インクレベル)] イベントのトリガを示しています。これは、イベントを 1 つずつ反復処理して Printer_Model__c 項目値を確認します。トリガは受信した各通知を調べて、通知からプリンタモデルを取得します。プリンタモデルが特定の値に一致する場合、他のビジネスロジックを実行します。たとえば、このプリンタモデルの新しいカートリッジを注文するためのケースをトリガで作成します。
Apex トリガは、プラットフォームイベント通知を、受信した順序で順次処理します。イベントの順序はイベントの再実行 ID に基づきます。Apex トリガはイベントのバッチを一度に受信できます。プラットフォームイベントトリガの最大バッチサイズは 2,000 件のイベントメッセージです。イベントの順序は各バッチ内で保持されます。バッチ内のイベントは 1 つまたは複数の公開者から取得できます。
プラットフォームイベントのトリガは、標準またはカスタムオブジェクトのトリガとは異なり、イベントを公開した Apex トランザクションと同じ Apex トランザクションで実行されません。トリガは、独自のプロセス内で非同期で実行されます。このため、イベントが公開されてからトリガでイベントが処理されるまで、遅延が発生する場合があります。
トリガは、自動化プロセスエンティティまたはトリガ設定で選択したユーザの下で実行されます。ユーザが設定されていない場合、トリガの実行に対応するデバッグログが自動化プロセスにより作成されます。CreatedById や LastModifiedById などのシステム項目は、自動化プロセスエンティティを参照します。デバッグログとレコードのユーザが選択済みのユーザに設定されるように、トリガのデフォルトの実行ユーザを上書きできます。詳細は、「プラットフォームイベントトリガのユーザおよびバッチサイズの設定」を参照してください。
イベントトリガの多くの制限は、カスタムおよび標準オブジェクトのトリガの制限と同じです。たとえば、一部の例外を除いて、一般にトリガから Apex コールアウトを実行できません。詳細は、『Apex 開発者ガイド』の「トリガ」の「実装に関する考慮事項」を参照してください。
プラットフォームイベントトリガおよび検出されなかった例外
トリガの実行中に検出されなかった例外が発生すると、トリガの実行が停止し、現在のバッチ内にある残りのイベントメッセージは処理されません。検出されなかった例外は、catch ブロックまたは制限の例外でトリガによって処理されない例外です。トリガの Apex 実行時間制限を超えない限り、検出されなかった例外の発生より前に実行された DML 操作はコミットされ、ロールバックされません。DML トランザクションをコミットすると、setResumeCheckpoint() メソッドを使用して、停止した場所からトリガの実行を続行できます。このメソッドでは、トリガが再開し、前のバッチから未処理のイベントメッセージが選択されます。詳細は、「検出されなかった例外発生後のプラットフォームイベントトリガの再開」を参照してください。
DML トランザクションは、次の場合にのみロールバックされます。
- トリガで EventBus.RetryableException が発生した場合。
- トリガの Apex 実行時間制限が制限時間の 10 分を超えた場合。各 Apex トランザクションの最大実行時間については、『Apex 開発者ガイド』の「実行ガバナと制限」を参照してください。
プラットフォームイベントトリガおよび Apex ガバナ制限
プラットフォームイベントトリガには Apex ガバナ制限が適用されます。
- 同期ガバナ制限
- 同期と非同期の Apex でガバナ制限が異なる場合、同期制限がプラットフォームイベントトリガに適用されます。非同期制限は、Apex 一括処理や将来のメソッドなど、長時間プロセスを対象とします。同期制限は、高速で実行される短時間プロセスを対象とします。プラットフォームイベントトリガは非同期で実行されますが、どちらかといえば高速で一括で実行される短時間プロセスです。
- 制限のリセット
- プラットフォームイベントトリガは、それを起動したトランザクションとは別のトランザクションで実行されるため、ガバナ制限はリセットされ、トリガには独自の制限セットが適用されます。