Apex によるイベントメッセージの公開
イベントメッセージを公開するには、EventBus.publish メソッドをコールします。たとえば、[Low Ink (低インクレベル)] というカスタムプラットフォームイベントを定義している場合は、そのイベント種別を Low_Ink__e として参照します。次に、このイベントのインスタンスを作成して Apex メソッドに渡します。
例
この例は、種別 Low_Ink__e の 2 つのイベントを作成して公開した後、公開が成功したかエラーが発生したかを確認します。この例は、[Low Ink (低インクレベル)] プラットフォームイベントが組織で定義されていることを前提とします。
1List<Low_Ink__e> inkEvents = new List<Low_Ink__e>();
2inkEvents.add(new Low_Ink__e(Printer_Model__c='XZO-5', Serial_Number__c='12345',
3 Ink_Percentage__c=0.2));
4inkEvents.add(new Low_Ink__e(Printer_Model__c='MN-123', Serial_Number__c='10013',
5 Ink_Percentage__c=0.15));
6
7
8// Call method to publish events
9List<Database.SaveResult> results = EventBus.publish(inkEvents);
10
11// Inspect publishing result for each event
12for (Database.SaveResult sr : results) {
13 if (sr.isSuccess()) {
14 System.debug('Successfully published event.');
15 } else {
16 for(Database.Error err : sr.getErrors()) {
17 System.debug('Error returned: ' +
18 err.getStatusCode() +
19 ' - ' +
20 err.getMessage());
21 }
22 }
23}各イベントの Database.SaveResult には、操作の成功とエラーの発生に関する情報が含まれます。isSuccess() メソッドが true を返す場合、イベントは公開されています。それ以外を返す場合、イベント公開操作でエラーが発生しており、エラーは Database.Error オブジェクトに返されています。エラーにより他のイベントを公開できない場合でも EventBus.publish() は一部の渡されたイベントを公開できます。EventBus.publish() メソッドは、公開操作の失敗による例外を発生させません。この動作は、部分的な完了オプションを使用してコールした場合の Apex Database.insert メソッドに似ています。
このイベントの挿入は、トランザクションとは無関係に発生します。このため、公開済みイベントはロールバックできません。イベントの公開は DML 挿入操作に相当するため、DML 制限と他の Apex ガバナ制限が適用されます。