Apex トリガでの変更イベントメッセージの処理

Apex 変更イベントトリガで、Lightning プラットフォームの変更イベントメッセージを処理できるようになりました。変更イベントトリガは、データベーストランザクションが完了した後に非同期で実行されます。リソースを大量に消費するビジネスロジックは変更イベントトリガで非同期に実行され、トランザクションベースのロジックは引き続き Apex オブジェクトトリガで実行されます。変更イベントトリガでは、変更の処理を分離することで、トランザクションの処理時間を短縮できます。

対象: この変更は、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition の Lightning Experience および Salesforce Classic に適用されます。

方法: トリガで処理される各変更イベントには、レコード項目と、ヘッダー項目の変更に関するメタデータ情報が含まれます。

変更イベントトリガは「after-insert」トリガで、after insert キーワードで定義されます。このトリガは、変更イベントメッセージが公開された後に起動します。after insert トリガを開発者コンソールで Apex オブジェクトトリガと同じように作成します。トリガの作成時に、組織で使用できる変更イベントが設定された sObject ドロップダウンから変更イベントオブジェクトを選択します。サポートされている標準オブジェクトの場合、変更イベント名は StandardObjectNameChangeEvent となります。カスタムオブジェクトの場合、変更イベント名は CustomObjectName__ChangeEvent となります。

次のトリガは、AccountChangeEvent のシンプルな変更イベントトリガです。

trigger MyAccountChangeTrigger on AccountChangeEvent (after insert) {
   for (AccountChangeEvent event : Trigger.New) {
      // Process event messages
   }
}

変更イベントトリガのテスト

Apex 変更イベントトリガをパッケージ化または本番環境にリリースする前に、Apex テストを実施し、十分なコードカバー率を達成する必要があります。

変更イベントトリガをテストするには、テストメソッド用の変更イベント通知の生成を有効にします。

Test.enableChangeDataCapture();

Test.enableChangeDataCapture() メソッドにより、[設定] で選択されたエンティティに関係なく、Apex テストで変更イベントトリガを起動できます。このメソッドは、組織の変更データキャプチャエンティティの選択に影響を与えません。

DML 操作の実行後、対応するトリガにイベントメッセージを配信します。

Test.getEventBus().deliver();

または、テストで Test.startTest()Test.stopTest() メソッドブロックを使用する場合、Test.stopTest() の実行後に、変更イベントメッセージによって関連付けられたトリガが起動します。

このテストメソッドは、テストで実行すべきステートメントの順序を示しており、変更データキャプチャエンティティの有効化から開始します。

@isTest static void testChangeEventTrigger() {
    // Enable all Change Data Capture entities for notifications.
    Test.enableChangeDataCapture();
    
    // Insert one or more test records
    // ...
    
    // Deliver test change events
    Test.getEventBus().deliver();
    
    // Verify the change event trigger’s execution
    // ...
}