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

非同期公開エラーの通知の受信 (ベータ)

大規模プラットフォームイベントを公開し、isSuccess()true を返すと、その公開操作が Salesforce のキューに登録されます。その後、システムで公開操作が実行できなくなるようなエラーが発生した場合に、/event/AsyncOperationEvent チャネルに登録することでそのエラーの通知を受信できます。

/event/AsyncOperationEvent チャネルはベータ機能としてのプレビュー版であり、Salesforce とのマスターサブスクリプション契約における「サービス」には含まれません。この機能はお客様各自の裁量で使用し、購入するときは、現在正式にリリースされている製品および機能に基づいて判断してください。Salesforce はこの機能の特定期間内の正式リリースまたはリリースの有無を保証しません。また、いかなる時点でもこの機能を終了できるものとします。この機能は評価のみを目的とし、本番環境での使用はできません。この機能は、そのままの状態で提供され、サポートされておらず、ここから生じる、またはこれに関連する被害または損害に対して、Salesforce はいかなる責任も負いません。すべての制約、Salesforce の権利の保留、本サービスに関する義務、および関連する Salesforce 以外のアプリケーションならびにコンテンツの条件は、この機能の使用に等しく適用されます。/event/AsyncOperationEvent チャネルに関するフィードバックや提案は、Trailblazer Community に投稿してください。

メモ

エラーイベント通知の例

次の例は、大規模イベント公開の失敗について受信する 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