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

EventUuid 項目を使用したイベントメッセージの識別と照合

プラットフォームイベントメッセージには、イベントメッセージを識別する EventUuid 項目が含まれています。この項目を使用して、公開および受信したイベントメッセージを照合します。この照合では、受信したイベントの UUID と公開コールの SaveResult で返された UUID が比較されます。これにより、配信されていないイベントメッセージを見つけて再公開できます。

EventUuid 項目は、ユニバーサル一意識別子 (UUID) で、API バージョン 52.0 以降から使用できます。API バージョンは、Apex トリガを保存するときに使用したバージョン、または CometD 登録���エンドポイントに指定されたバージョンに一致します。EventUuid 項目は、イベントスキーマの一部ではありません。REST eventSchema リソースまたは describe コールの結果によって返されます。EventUuid 項目は、大規模プラットフォームイベントと標準量プラットフォームイベントで使用できます。

イベント公開は非同期です。すぐに返された SaveResult に含まれている成功の状況は、公開操作が Salesforce のキューに登録されたことを意味します。操作は、後でシステムリソースが使用可能になったときに実行されます。検証や制限のエラーなど、一部の失敗は SaveResult に返されますが、非同期エラーは返されません。まれに、キューに登録された公開操作がシステムエラーにより失敗し、イベントメッセージが配信されないことがあります。EventUuid 項目を使用して、キューに登録されたイベントメッセージのうちどれが公開に失敗したかを判断して再公開できます。

公開されたイベントメッセージのイベント UUID の取得

公開されたイベントメッセージと受信されたイベントメッセージの UUID を比較する前に、まずは公開されたイベントメッセージの UUID を保存します。また、対応するイベント項目値も保存し、イベントを必要に応じて再公開できるようにします。

Salesforce API を使用してイベントを公開した場合、返された SaveResult のエラーの message 項目に UUID が含まれます。次の例には、REST API POST 要求を使用して挿入されたイベントの保存結果が含まれます。

1{
2  "id" : "e01xx0000000001AAA",
3  "success" : true,
4  "errors" : [ {
5    "statusCode" : "OPERATION_ENQUEUED",
6    "message" : "e981b488-81f3-4fcc-bd6f-f7033c9d7ac3",
7    "fields" : [ ]
8  } ]
9}

Apex でイベントを公開した場合、EventBus.getOperationId(saveResult) メソッドをコールして UUID を取得できます。

この例では、Apex を使用してイベント公開コールから UUID を取得します。

前提条件: この例を実行する前に、Order Event (注文イベント) の表示ラベルが付いているプラットフォームイベントと、Text(10) 型の Order Number (注文番号) 項目および Checkbox 型の Has Shipped (発送済み) 項目を定義します。

1// Publish a high-volume event message
2Order_Event__e evt = new Order_Event__e(
3    Order_Number__c='17',
4    Has_Shipped__c = false);
5Database.SaveResult sr = EventBus.publish(evt);
6// Inspect immediate result
7if (sr.isSuccess() == true) {
8    System.debug('Successfully enqueued event for publishing.');
9    // Get the UUID that uniquely identifies this event publish
10    System.debug('UUID=' + EventBus.getOperationId(sr));
11} else {
12   for(Database.Error err : sr.getErrors()) {
13       System.debug('Error returned: ' +
14                    err.getStatusCode() +
15                    ' - ' +
16                    err.getMessage());
17   }
18}
19 
20// Debug message output:
21//|DEBUG|Successfully enqueued event for publishing.
22//|DEBUG|UUID=6ba5db7e-c27b-4a67-a3c5-cf425ffcaf53

CometD クライアントで受信されたイベントメッセージからのイベント UUID の取得

CometD クライアントで受信されたイベントメッセージでは、次の JSON イベントの例に示すように、イベントオブジェクトの EventUuid 項目にイベント UUID が含まれています。

1{
2  "schema": "UIovjRagY-xEDIJ1Ehzafg",
3  "payload": {
4    "CreatedDate": "2021-03-04T18:31:40.517Z",
5    "CreatedById": "005RM00000231cZYAQ",
6    "Order_Number__c": "17",
7    "Has_Shipped__c": false
8  },
9  "event": {
10     "EventUuid": "e981b488-81f3-4fcc-bd6f-f7033c9d7ac3",
11     "replayId": 617
12  }
13}

Apex トリガを使用した受信イベントメッセージからのイベント UUID の取得

Apex トリガでは、イベントオブジェクトの EventUuid 項目にアクセスすることによってイベント UUID を抽出します。

1trigger OrderEventTrigger on Order_Event__e (after insert) {
2    for(Order_Event__e evt: Trigger.New) {
3        // Get the event UUID
4        String EventUuid = evt.EventUuid;
5        System.debug('Received event UUID=' + EventUuid);
6
7        // Store the event UUID for matching with published event UUID
8        // . . .
9    }
10}
11
12// Debug message output:
13//|DEBUG|Received event UUID=6ba5db7e-c27b-4a67-a3c5-cf425ffcaf53

公開されたイベントメッセージと受信されたイベントメッセージの UUID の照合

公開されたイベントメッセージと受信されたイベントメッセージの両方のイベント UUID を取得したら、それらの UUID を照合します。UUID が一致しない場合は、そのイベントが配信されていない可能性があります。一致しないイベントメッセージは再公開を試みることができます。