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

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

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

Apex を使用してイベントを公開する場合は、Apex 公開コールバックを使用して、EventBus.publish コールの最終的な結果を追跡します。詳細は、「Apex 公開コールバックを使用した非同期プラットフォームイベント公開の結果の取得」を参照してください。

メモ

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

Pub/Sub API クライアントの場合、イベントの ID 項目にはイベント UUID 値が含まれています。EventUuid という項目名は存在しません。id 項目は、すべての Pub/Sub API クライアントに存在しますが、バージョン管理されておらず、上書きされる可能性があります。詳細は、『Pub/Sub API』ドキュメントの「PublishStream RPC Method (PublishStream RPC メソッド)」を参照してください。

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

Pub/Sub API による公開は同期的に実行され、返される応答には最終的な公開の状況が含まれます。

公開されたイベントメッセージのイベント 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}

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

Pub/Sub API クライアントで受信されたイベントメッセージでは、イベントインスタンスの id 項目にイベント UUID 値が含まれています。たとえば、次のようにイベントインスタンスの id 項目にアクセスすることで、コード内の UUID 値を取得できます。

1event.id

返される値は、次の例のような UUID です。

14c45a27a-5d86-47ed-881a-878b9a9c0dcc

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 が一致しない場合は、そのイベントが配信されていない可能性があります。一致しないイベントメッセージは再公開を試みることができます。