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

Apex によるイベントメッセージの公開

Apex を使用して、イベントメッセージを Salesforce アプリケーションから公開します。

イベントメッセージを公開するには、EventBus.publish メソッドをコールします。たとえば、[Low Ink (低インクレベル)] というカスタムプラットフォームイベントを定義している場合は、そのイベント種別を Low_Ink__e として参照します。次に、このイベントのインスタンスを作成して Apex メソッドに渡します。

この例は、種別 Low_Ink__e の 2 つのイベントを作成して公開した後、公開が成功したかエラーが発生したかを確認します。

このスニペットを実行する前に、Low_Ink__e という名前のプラットフォームイベントと、Text 型の Printer_Model__c 項目、Text 型の Serial_Number__c 項目 (必須としてマーク)、Number(16, 2) 型の Ink_Percentage__c 項目を定義します。

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 を返した場合、公開要求は Salesforce のキューに入れられ、イベントメッセージが非同期で公開されます。詳細は、「大規模プラットフォームイベントの保持」を参照してください。isSuccess()false を返す場合、イベント公開操作でエラーが発生しており、エラーは Database.Error オブジェクトに返されています。EventBus.publish() は、渡されたイベントを、エラーで公開できないものを除いて部分的に公開できます。EventBus.publish() メソッドは、失敗した公開操作による例外を発生させません。これは、Apex の Database.insert メソッドが部分的な完了オプションを指定してコールされたときの動作に似ています。

Database.SaveResult には、Id システム項目も含まれます。Id 項目値は、サブスクライバーに配信されるイベントメッセージには含まれません。これは、イベントメッセージの識別に使用されず、必ずしも一意ではありません。

プラットフォームイベントメッセージは、プラットフォームイベント定義で設定した公開動作に応じて、ただちに、またはトランザクションがコミットされた後に公開されます。詳細は、「プラットフォームイベント項目」を参照してください。Apex ガバナ制限が適用されます。[コミット後に公開] 動作で設定されたイベントの場合、各メソッドの実行は、Apex DML ステートメント制限に対して 1 つの DML ステートメントとして計数されます。利用制限は、Apex Limits.getDMLStatements() メソッドを使用して確認できます。[すぐに公開] 動作で設定されたイベントの場合、各メソッドの実行は、150 EventBus.publish() コールの個別のイベント公開制限に対して反映されます。利用制限は、Apex Limits.getPublishImmediateDML() メソッドを使用して確認できます。