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

Apex トリガによるプラットフォームイベント通知の登録

Apex トリガを使用してイベントを登録します。イベント通知がどのような方法 (Apex または API) で公開されたかにかかわらず、トリガでイベント通知を受信できます。トリガは自動登録メカニズムを提供します。Apex でチャネルを明示的に作成し、そのチャネルをリスンする必要はありません。

イベント通知を登録するには、イベントオブジェクト種別で after insert トリガを記述します。after insert トリガイベントは、プラットフォームイベントの公開後の時点に対応します。イベントメッセージの公開後に、after insert トリガが起動されます。

この例は [Low Ink (低インクレベル)] イベントのトリガを示しています。これは、イベントを 1 つずつ反復処理して Printer_Model__c 項目値を確認します。トリガは受信した各通知を調べて、通知からプリンタモデルを取得します。プリンタモデルが特定の値に一致する場合、他のビジネスロジックを実行します。たとえば、このプリンタモデルの新しいカートリッジを注文するためのケースをトリガで作成します。

1// Trigger for catching Low_Ink events.
2trigger LowInkTrigger on Low_Ink__e (after insert) {    
3    // List to hold all cases to be created.
4    List<Case> cases = new List<Case>();
5    
6    // Get user Id for case owner
7    User usr = [SELECT Id FROM User WHERE Name='Admin User' LIMIT 1];
8       
9    // Iterate through each notification.
10    for (Low_Ink__e event : Trigger.New) {
11        System.debug('Printer model: ' + event.Printer_Model__c);
12        if (event.Printer_Model__c == 'MN-123') {
13            // Create Case to order new printer cartridge.
14            Case cs = new Case();
15            cs.Priority = 'Medium';
16            cs.Subject = 'Order new ink cartridge for SN ' + event.Serial_Number__c;
17            cs.OwnerId = usr.Id;
18            cases.add(cs);
19        }
20   	}
21    
22    // Insert all cases in the list.
23    if (cases.size() > 0) {
24        insert cases;
25    }
26}

Apex トリガは、プラットフォームイベント通知を、受信した順序で順次処理します。イベントの順序はイベントの再生 ID に基づきます。Apex トリガはイベントのバッチを一度に受信できます。イベントの順序は各バッチ内で保持されます。バッチ内のイベントは 1 つまたは複数の公開者から取得できます。

プラットフォームイベントのトリガは、標準またはカスタムオブジェクトのトリガとは異なり、イベントを公開した Apex トランザクションと同じ Apex トランザクションで実行されません。トリガは、自動化プロセスエンティティの下、独自のプロセス内で非同期で実行されます。このため、イベントが公開されてからトリガでイベントが処理されるまで、遅延が発生する場合があります。また、トリガの実行に対応するデバッグログが自動化プロセスにより作成されます。CreatedByIdLastModifiedById などのシステム項目は、自動化プロセスエンティティを参照します。

ケースや商談など、トリガ内の ownerId 項目を使用して Salesforce レコードを作成する場合、所��者 ID を明示的に設定します。ケースやリードの場合、代わりに割り当てルールを使用して所有者を設定することもできます。「Apex および API を使用したプラットフォームイベントの公開および登録に関する考慮事項」を参照してください。

メモ

イベントトリガの多くの制限は、カスタムおよび標準オブジェクトのトリガの制限と同じです。たとえば、一部の例外を除いて、一般にトリガから Apex コールアウトを実行できません。詳細は、『Apex 開発者ガイド』「トリガ」の「実装に関する考慮事項」を参照してください。

プラットフォームイベントトリガおよび Apex ガバナ制限

プラットフォームイベントトリガには Apex ガバナ制限が適用されます。

同期ガバナ制限
同期と非同期の Apex でガバナ制限が異なる場合、同期制限がプラットフォームイベントトリガに適用されます。非同期制限は、Apex 一括処理や将来のメソッドなど、長時間プロセスを対象とします。同期制限は、高速で実行される短時間プロセスを対象とします。プラットフォームイベントトリガは非同期で実行されますが、どちらかといえば高速で一括で実行される短時間プロセスです。
制限のリセット
プラットフォームイベントトリガは、それを起動したトランザクションとは別のトランザクションで実行されるため、ガバナ制限はリセットされ、トリガには独自の制限セットが適用されます。