Apex および API を使用したプラットフォームイベントの公開および登録に関する考慮事項
- after insert トリガーのみをサポート
- イベント通知を更新することはできないため、プラットフォームイベントでは after insert トリガーのみがサポートされます。イベント通知は挿入 (公開) されるのみです。
- トリガーの無限ループおよび制限
- イベントをトリガーから公開するときは注意してください。トリガーの無限ループに入り込み、制限を超える可能性があります。たとえば、同じイベントオブジェクトに関連付けられたトリガーからイベントを公開した場合、トリガーは無限ループの中で起動されます。
- テキスト項目を空の文字列に設定した Apex でのイベントの公開
- テキスト項目を空の文字列に設定して Apex でイベントを公開すると、配信されたイベントメッセージの項目値は空の文字列ではなく null になります。Apex、フロー、プロセスなど、他のメソッドを使用して公開すると、空の文字列の文字列テキスト項目は保持されます。
- プラットフォームイベントトリガー: 新規レコードの OwnerId 項目
- プラットフォームイベントトリガーで、ownerId 項目が含まれる Salesforce レコードを作成すると、項目にデフォルト値の Automated Process が設定されます。この項目を別の値に設定するには、トリガーを別のユーザーとして実行するように設定できます。これにより、OwnerId 項目は選択済みのユーザーを参照します。詳細は、「PlatformEventSubscriberConfig の使用によるプラットフォームイベントトリガーのユーザーおよびバッチサイズの設定」を参照してください。または、実行ユーザーを変更しない場合は、レコードの作成時に ownerId 項目を適切なユーザーに明示的に設定できます。この例では、別のレコードから取得した ID を使用して商談の ownerId 項目が明示的に入力されます。
1Opportunity newOpp = new Opportunity( 2 OwnerId = customerOrder.createdById, 3 AccountId = acc.Id, 4 StageName = 'Qualification', 5 Name = 'A ' + customerOrder.Product_Name__c + ' opportunity for ' + acc.name, 6 CloseDate = Date.today().addDays(7)); - ケースやリードの場合、代わりに割り当てルールを使用して所有者を設定することもできます。SOAP API についての詳細は AssignmentRuleHeader を参照し、Apex についての詳細は「DML オプションの設定」を参照してください。
- プラットフォームイベントトリガー: 商談の OwnerId 項目の変更
- 商談分割が有効であるときにプラットフォームイベントトリガーで商談の OwnerId 項目が更新される場合、トリガーはデフォルトの自動化プロセスシステムユーザーとして実行されます。合計が 0% の一連の商談分割が作成されます。0% の分割は無効で、商談所有者が変更されたときに 100% にする必要があります。0% の分割の場合、Amount 項目や Owner 項目など一部の商談項目を更新しようとしたときに検証エラーが発生します。この問題を回避するには、プラットフォームイベントトリガーが別のユーザーとして実行されるように設定します。詳細は、「PlatformEventSubscriberConfig の使用によるプラットフォームイベントトリガーのユーザーおよびバッチサイズの設定」を参照してください。
- プラットフォームイベントトリガーからのメールサポートなし
- デフォルトの自動化プロセス実行ユーザーでは、Messaging.SingleEmailMessage クラスを使用したプラットフォームイベントトリガーからのメールメッセージの送信はサポートされません。メールを送信できないのは、送信者が自動化プロセスエンティティであり、メールアドレスがないためです。メールを送信するには、トリガーの実行ユーザーを変更します。詳細は、「PlatformEventSubscriberConfig の使用によるプラットフォームイベントトリガーのユーザーおよびバッチサイズの設定」を参照してください。
- 過去のイベントの再生
- 過去に送信したプラットフォームイベントを再実行できます。プラットフォームイベントは Streaming API (CometD) または Pub/Sub API を使用して再実行できますが、Apex やその他のサブスクライバーでは再実行できません。詳細は、次のリソースを参照してください。
- Salesforce のメンテナンス活動
- まれに、新しいデータセンターへの組織の移行やインスタンスの更新など、Salesforce の一部のメンテナンス活動で、保持された大規模プラットフォームイベントのストリームがリセットされることがあります。ストリームのリセットにより、イベントは再生に使用できなくなります。また、メンテナンス活動前に公開されたイベントの再実行 ID は、活動後のイベントの再実行 ID とは関連しません。詳細は、「組織の移行への準備方法」および「インスタンスリフレッシュメンテナンス」を参照してください。
- 登録の際の絞り込み条件の設定
- プラットフォームイベントでは、ストリーミング API における登録の際の絞り込み条件の設定はサポートされません。
- DateTime 項目のミリ秒時間精度
- JSON 形式で CometD クライアントに配信されたイベントメッセージでは、DateTime 項目にミリ秒数が含まれます。ISO 8601 標準の日付形式は YYYY-MM-DDTHH:mm:ss.sssZ です。API バージョン 42.0 以前の DateTime 項目に時間のミリ秒部分は含まれず、その DateTime 形式は YYYY-MM-DDTHH:mm:ssZ です。
- Apex トリガーに配信されるイベントメッセージの場合、Salesforce オブジェクトの DateTime 項目のように DateTime 項目にミリ秒精度が含まれません。
- Salesforce 組織が無効になると Apex トリガー登録が無効になる
- 組織が無効になると、すべての Apex トリガー登録が停止して無効になります。トリガーは、受信イベントメッセージを処理しなくなり、欠落したイベントメッセージを処理できません。組織が再有効化されると、プラットフォームイベントメッセージが公開された時点で新しい Apex トリガー登録が開始されます。