例: 公開が失敗した場合と成功した場合にフォローアップ ToDo を作成する公開コールバッククラス
この公開コールバッククラスは、前述の例を変更したものです。EventBus.EventPublishSuccessCallback インターフェースも実装しており、成功したケースと失敗したケースの両方を処理します。イベント公開が失敗または成功したときに ToDo を作成します。この挿入される ToDo には、失敗したイベントの数とイベントの UUID が含まれています。
この例を実行する前に、例に指定されているメールアドレスを、組織で ToDo 作成の権限を持つユーザのメールアドレスに変更します。この例では、Order Id の Text(18) 項目を使用して、プラットフォームイベント Order Event を定義する必要があります。FailureCallback クラスのデバッグログを表示するには、自動化プロセスユーザのユーザ追跡フラグが設定されていることを確認します。詳細は、「コールバックの実行ユーザとデバッグログ」を参照してください。
1public class FailureAndSuccessCallback implements EventBus.EventPublishFailureCallback, EventBus.EventPublishSuccessCallback {
2
3 public void onFailure(EventBus.FailureResult result) {
4 List<String> eventUuids = result.getEventUuids();
5 System.debug(eventUuids.size() + ' events failed to publish.');
6 System.debug('Callback eventUuids to match with event objects: ' + eventUuids);
7
8 // Create a follow-up task for failed events.
9 insertTask(eventUuids, false);
10 }
11
12 public void onSuccess(EventBus.SuccessResult result) {
13 List<String> eventUuids = result.getEventUuids();
14 System.debug(eventUuids.size() + ' events were published successfully.');
15 System.debug('Callback eventUuids to match with event objects: ' + eventUuids);
16
17 // Create a follow-up task for successful events.
18 insertTask(eventUuids, true);
19 }
20
21 private void insertTask(List<String> eventUuids, Boolean isSuccess) {
22 String eventIdString = '';
23 for (String evtId : eventUuids) {
24 eventIdString += evtId + ' ';
25 }
26 Task t = new Task();
27 if (isSuccess == true) {
28 t.Subject = 'Follow up on successful event publishing.';
29 t.Description = eventUuids.size() +
30 ' events published successfully. Event UUIDs: '
31 + eventIdString;
32 } else {
33 t.Subject = 'Follow up on event publishing failures.';
34 t.Description = eventUuids.size() +
35 ' events failed to publish. Event UUIDs: '
36 + eventIdString;
37 }
38
39 // Set the due date
40 t.ActivityDate = Date.today().addDays(3);
41 // Set owner ID explicitly.
42 // Otherwise, the task assignee is the Automated Process User.
43 // ---
44 // CHANGE EMAIL ADDRESS to the email of a valid user in your org.
45 // ---
46 User myUser = [SELECT Id from User WHERE Email='user@example.com'];
47 t.OwnerId = myUser.Id;
48 // Insert task
49 Database.SaveResult sr = Database.insert(t);
50 if (!sr.isSuccess()) {
51 for(Database.Error err : sr.getErrors()) {
52 System.debug('Error returned: ' +
53 err.getStatusCode() +
54 ' - ' +
55 err.getMessage());
56 }
57 }
58 }
59}コールバッククラスでイベントを公開するには、「例: コールバックインスタンスを使用したイベントの公開」に示されているコードスニペットを使用して、EventBus.publish メソッドのコールバックインスタンス名を FailureAndSuccessCallback に変更します。
1// Publish events with an instance of the callback.
2List<Database.SaveResult> results = EventBus.publish(eventList, new FailureAndSuccessCallback());