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

例: 公開が失敗した場合と成功した場合にフォローアップ 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());