非同期公開エラーの通知の受信 (ベータ)
エラーイベント通知の例
次の例は、大規模イベント公開の失敗について受信する AsyncOperationEvent メッセージを示しています。失敗に関する情報は OperationDetails オブジェクトに含まれています。非同期公開エラーのエラー状況コードは PLATFORM_EVENT_PUBLISH_FAILED です。システムエラーによって公開できなかったイベントメッセージは SourceEvent オブジェクトに含まれています。エラー通知メッセージには operationId 項目も含まれています。これは、公開コールが返すのと同じ操作 ID です。この ID を使用して、エラーを対応する公開コールに照合します。
1{
2 "schema":"MKsvE2J5292JLE7HNWz6Dg",
3 "payload":{
4 "OperationDetails":[
5 {
6 "Status":"FAILURE",
7 "Fields":[
8 "HighVolumePlatformEvent"
9 ],
10 "Category":"PlatformEventPublishError",
11 "Message":"The platform event message could not be published. Try again later.",
12 "StatusCode":"PLATFORM_EVENT_PUBLISH_FAILED"
13 }
14 ],
15 "CreatedById":"005xx000001X7gTAAS",
16 "OperationId":"f6477da8-f664-446a-aee8-df651f9c3a50",
17 "CreatedDate":"2019-02-26T00:48:46Z",
18 "SourceEvent":{
19 "com.sforce.eventbus.News_Event__e":{
20 "Location__c":"Mountain City"
21 }
22 }
23 },
24 "event":{
25 "replayId":1
26 }
27}操作 ID を使用したエラー通知と公開コールの照合
公開コールがイベントメッセージを Salesforce のキューに登録し、成功応答を返すときには、操作 ID が含まれています。操作 ID は公開操作を一意に識別するもので、エラー通知と公開コールを照合するために使用されます。次の例は、プラットフォームイベントメッセージを公開する REST API sObject POST 要求の応答を示しています。応答の message 項目の errors 配列要素に操作 ID が含まれ、状況コードは OPERATION_ENQUEUED となっています。
1{
2 "id" : "e00xx0000000001AAA",
3 "success" : true,
4 "errors" : [ {
5 "statusCode" : "OPERATION_ENQUEUED",
6 "message" : "f6477da8-f664-446a-aee8-df651f9c3a50",
7 "fields" : [ ]
8 } ]
9}Apex で操作 ID を取得するには、EventBus.getOperationId(SaveResult) をコールし、EventBus.publish() が返した SaveResult を渡します。この例では、News イベントを公開して返された SaveResult を保存します。公開に成功した場合、操作 ID は EventBus.getOperationId(sr) コールで取得され、System. debug() ステートメントを使用してデバッグログに書き込まれます。説明のため、この例では最初のエラーオブジェクトで状況コードおよびメッセージを取得し、デバッグログに書き込みます。メッセージ値は EventBus.getOperationId(sr) が返す同じ操作 ID です。
1// Publish a high-volume event message
2News_Event__e myEvent = new News_Event__e(
3 Location__c='Mountain City'
4);
5// Call method to publish event
6Database.SaveResult sr = EventBus.publish(myEvent);
7
8// Inspect publishing result
9if (sr.isSuccess()) {
10 System.debug('Successfully enqueued event for publishing.');
11
12 // Get asynchronous operation ID.
13 System.debug(EventBus.getOperationId(sr));
14
15 // The getOperationID call above is equivalent to the err.getMessage() call
16 for(Database.Error err : sr.getErrors()) {
17 System.debug('Error returned: ' +
18 err.getStatusCode() +
19 ' - ' +
20 err.getMessage());
21 }
22} else {
23 for(Database.Error err : sr.getErrors()) {
24 System.debug('Error returned: ' +
25 err.getStatusCode() +
26 ' - ' +
27 err.getMessage());
28
29 }
30}
31
32// Debug messages output:
33//|DEBUG|Successfully enqueued event for publishing.
34//|DEBUG|f6477da8-f664-446a-aee8-df651f9c3a50
35//|DEBUG|OPERATION_ENQUEUED - f6477da8-f664-446a-aee8-df651f9c3a50