プラットフォームイベントの定義と管理
プラットフォームイベントを使用し、リアルタイムイベントデータのやり取りによって、Salesforce のビジネスプロセスと外部ソースを接続します。プラットフォームイベントは安全で拡張性があります。項目を定義してプラットフォームイベントデータをカスタマイズします。
必要なエディション
| 使用可能なインターフェース: Salesforce Classic および Lightning Experience の両方 |
| 使用可能なエディション: Performance Edition、Unlimited Edition、Enterprise Edition、および Developer Edition |
| 必要なユーザー権限 | |
|---|---|
| プラットフォームイベント定義を作成および編集する | 「アプリケーションのカスタマイズ」 |
プラットフォームイベントを使用して、パブリッシャーは Apex、プロセス、フロー、Pub/Sub API、またはその他の API 経由でカスタムイベントデータを送信できます。サブスクライバーは Apex、Pub/Sub API クライアント、プロセス、フローを使用して Salesforce や外部システムからカスタムイベントメッセージを受信できます。行動のメッセージデータに基づいて、サブスクライバーは、メールの送信、ケースの登録など、カスタムビジネスロジックを処理できます。たとえば、インクが残り少なくなったときにプリンターを監視するソフトウェアシステムが API コールを行ってイベントを公開できます。カスタムプリンターイベントには、プリンターモデル、シリアル番号、インクレベルのカスタム項目を追加できます。新しいカートリッジを注文する Apex トリガーによって、Salesforce でこのイベントが処理されます。
プラットフォームイベントは、変化をやり取りしてその変化に応答するためのプロセスを簡素化します。複雑なロジックを記述することはありません。パブリッシャーとサブスクライバーはイベントを通じて互いにやり取りします。複数のサブスクライバーが同じイベントをリスンして、別々の対応策を実行できます。
プラットフォームイベントの定義
Salesforce Classic または Lightning Experience でプラットフォームイベントを定義する手順は、次のとおりです。
- [設定] から、[クイック検索] ボックスに「プラットフォームイベント」と入力し、[プラットフォームイベント] を選択します。
- [プラットフォームイベント] ページで [新規プラットフォームイベント] をクリックします。
- 標準項目を入力し、必要に応じて説明を追加します。
- [公開動作] では、トランザクション内でイベントメッセージをいつ公開するかを選択します。
- コミット後に公開。トランザクションが正常にコミットされた後にのみイベントメッセージを公開します。公開トランザクションがコミットするデータにサブスクライバーが依存している場合、このオプションを選択します。たとえば、あるプロセスがイベントメッセージを公開し、ToDo レコードを作成するとします。そのイベントに登録している 2 つ目のプロセスは起動したときに ToDo レコードがあることを想定しています。この動作を選択する別の理由として、トランザクションが失敗したときにイベントメッセージを公開したくない場合があります。
- すぐに公開。公開コールが実行された直後にイベントメッセージを公開します。トランザクションが成功したかどうかに関係なくイベントメッセージを公開する場合、このオプションを選択します。また、パブリッシャーとサブスクライバーが独立していて、パブリッシャーがコミットするデータにサブスクライバーが依存していない場合にもこのオプションを選択します。たとえば、記録目的で使用されるイベントにはすぐに公開する動作が適しています。このオプションを使用すると、パブリッシャーのトランザクションによってデータがコミットされる前に、サブスクライバーがイベントメッセージを受信する場合があります。
- [保存] をクリックします。
- 項目を追加するには、[カスタム項目 & リレーション] 関連リストで [新規] をクリックします。
- 項目のプロパティを設定するには、カスタム項目ウィザードに従います。
- 公開動作を変更した場合、その変更が反映されるまで最大 5 分かかります。
- Lightning Experience では、プラットフォームイベントはオブジェクトマネージャーの、標準およびカスタムオブジェクトのリストに表示されません。また、プラットフォームイベントをスキーマビルダーで使用することはできません。
プラットフォームイベントは特別な Salesforce エンティティであり、多くの点で sObject に似ています。イベントメッセージは、プラットフォームイベントのインスタンスで、レコードがカスタムオブジェクトのインスタンスであるのと似ています。ただし、カスタムオブジェクトとは異なり、イベントレコードの更新または削除はできません。また、イベントレコードを Salesforce ユーザーインターフェースに表示できないほか、プラットフォームイベントにページレイアウトはありません。プラットフォームイベント定義を削除すると、プラットフォームイベント定義は完全に削除されます。
標準項目
プラットフォームイベントには標準項目が含まれます。この項目は [新規プラットフォームイベント] ページに表示されます。
| 項目 | 説明 |
|---|---|
| 表示ラベル | ユーザーインターフェースページでプラットフォームイベントを参照するために使用する名前。 |
| 表示ラベル(複数形) | プラットフォームイベントの名前 (複数形)。 |
| 母音で始まる場合はチェック | 組織のデフォルト言語に該当している場合、表示ラベルが「a」ではなく「an」から始まるかどうかを示します。 |
| オブジェクト名 | API を使用する場合にプラットフォームイベントを参照するために使用する一意の名前。管理パッケージでは、この名前により、複数のパッケージインストールでの名前の競合が回避されます。英数字文字とアンダースコアのみを使用します。名前は文字で始まる必要があり、空白を含むことはできません。最後にアンダースコアを使用しない、2 つ続けてアンダースコアを使用しないという制約があります。 |
| 説明 | オブジェクトの説明 (省略可能)。意味のある説明を付けると、イベントをリストに表示したときに各イベントの違いがわかりやすくなります。 |
| リリース状況 | プラットフォームイベントを他のユーザーに表示するかどうかを示します。 |
カスタム項目
標準項目に加えて、カスタム項目をカスタムイベントに追加できます。プラットフォームイベントのカスタム項目では、次のデータ型のみがサポートされます。
- チェックボックス
- 日付
- 日付/時間
- 数値
- テキスト
- ロングテキストエリア
プラットフォームイベントに追加できる項目の最大数は、カスタムオブジェクトの場合と同じです。「Salesforce の機能とエディションの割り当て」を参照してください。
ReplayId システム項目
各イベントメッセージに、ReplayId 項目に含まれる不透明 ID が割り当てられます。ReplayId 項目値は、イベントがサブスクライバーに配信されるときにシステムによって入力され、イベントストリーム内のイベントの位置を参照します。連続するイベントの再実行 ID 値が連番になるという保証はありません。サブスクライバーは、再実行 ID 値を保存し、その ID を再登録で使用して保持期間内のイベントを取得することができます。たとえば、サブスクライバーは接続障害が発生した後に、欠落イベントを取得できます。サブスクライバーが、保存された再実行 ID に基づいて新しい再実行 ID を計算し、ストリーム内の他のイベントを参照することはできません。
EventUuid システム項目
プラットフォームイベントメッセージを識別するユニバーサル一意識別子 (UUID)。Pub/Sub API クライアントでは、イベント ID 項目にイベント UUID 値が含まれ、バージョン管理されません。他のサブスクライバークライアントでは、API バージョン 52.0 以降で EventUuid 項目を使用できます。API バージョンは、Apex トリガーを保存するときに使用したバージョン、または CometD サブスクライバーエンドポイントに指定されたバージョンに一致します。
カスタムプラットフォームイベントの API 名前サフィックス
プラットフォームイベントを作成すると、システムは __e サフィックスを追加してイベントの API 参照名を作成します。たとえば、オブジェクト名 Low Ink を使用してイベントを作成した場合、API 参照名は Low_Ink__e になります。プログラムを使用して、たとえば、Apex 内でイベントを参照する場合、この API 参照名が使用されます。AssetTokenEvent などの標準プラットフォームイベントの API 名には、サフィックスは含まれません。
[登録] 関連リストには、プラットフォームイベントを登録しているすべてのトリガー、プロセス、およびプラットフォームイベントトリガーフローが表示されます。Pub/Sub API サブスクライバー、独自の CometD クライアントや empApi Lightning コンポーネントなどの CometD サブスクライバーは、このページに表示されません。
リストには、システムが最後に処理したイベントの再生 ID ([最終処理 ID] 項目) と最後に公開されたイベントの再生 ID ([最終公開 ID] 項目) が表示されます。最後に処理された再実行 ID を把握しておくと、公開されたイベントと処理されたイベントとの間に差がある場合に役立ちます。たとえば、トリガーに複雑なロジックが含まれており、それにより、受信イベントの大量のバッチの処理で遅延が発生した場合です。
また、[登録] リストには、各サブスクライバーの状態 (次のいずれか) が表示されます。
Running— サブスクライバーはイベントをアクティブにリスンしています。サブスクライバーを変更すると、登録では引き続きイベントが処理されます。Error— サブスクライバーは切断されており、公開されたイベントの受信を停止しています。トリガーがこの状態に達するのは、トリガーがEventBus.RetryableExceptionによる最大再試行回数を超えた場合です。トリガーのアサーションの失敗および未対応の例外が原因でエラー状態になることはありません。この状態に達しないようにするには、再試行回数を 9 回未満に制限することをお勧めします。トリガーを修正して保存した場合、または管理パッケージトリガーでパッケージを再リリースした場合は、トリガーは最新のイベントから自動的に再開されます。また、トリガー登録は、登録詳細ページでも再開できます。登録詳細ページにはプラットフォームイベントページからアクセスします。Suspended— サブスクライバーは切断されており、Salesforce システム管理者が一時停止したか、内部エラーのためイベントを受信できません。トリガーの登録は、登録詳細ページで再開できます。登録詳細ページにはプラットフォームイベントページからアクセスします。プロセスを再開するには、プロセスを無効化してから再有効化します。サブスクライバーを変更すると、登録は最新のイベントから自動的に再開されます。
また、イベントサブスクライバーに関する情報は EventBusSubscriber オブジェクトで公開されます。このオブジェクトは、サブスクライバーの詳細を取得するために照会できます。
Apex トリガー登録の一時停止または再開
一時停止したトリガー登録は停止した場所から再開できます。この場合、イベントバスに保存されている最も古い使用可能なイベントメッセージから開始されます。エラーの原因となったイベントメッセージや、不要となったメッセージをバイパスする場合は、登録を最新のイベントメッセージから再開することができます。
トリガー登録を管理する手順は次のとおりです。
- [記事] 関連リストで、Apex トリガーの横の [管理] をクリックします。
- 登録詳細ページで、適切なアクションを選択します。
- 実行中の登録を一時停止するには、[一時停止] をクリックします。
- 一時停止中の登録を、イベントバスで使用可能な最も古いイベントメッセージから再開するには、[再開] をクリックします。
- 一時停止中の登録を新しいイベントメッセージから再開するには、[最新から再開] をクリックします。
[登録] 関連リストからのフローおよびプロセスの登録は管理できません。
- サブスクライバーを変更すると、登録は自動的に再開されます。詳細は、「イベントサブスクライバー」セクションを参照してください。
- エラー状態のトリガーで [再開] をクリックすると、トリガーは、
EventBus.RetryableExceptionにより再試行されたイベントをスキップします。登録は、エラー状態以降に送信された、保持期間内の未処理のイベントから開始されます。
プラットフォームイベントの考慮事項
- 項目レベルセキュリティ — デフォルトでは、すべてのプラットフォームイベント項目が参照のみになっているため、特定の項目へのアクセス権を制限することはできません。項目レベルセキュリティ権限は適用されず、イベントメッセージにすべての項目が含まれます。
- 項目属性の適用 — プラットフォームイベントレコードを検証し、そのカスタム項目の属性が適用されていることを確認します。項目属性には、必須属性とデフォルト属性、数値項目の精度、テキスト項目の最大長が含まれます。
- イベント定義の完全削除 — イベント定義を削除すると、イベント定義は完全に削除され、復元できなくなります。イベント定義を削除する前に、関連付けられたトリガーを削除してください。この定義を使用する公開済みイベントも削除されます。
- イベントオブジェクトの名前変更 — イベントの名前を変更する前に、関連付けられたトリガーを削除してください。クライアントがこのイベントを登録した後、イベント名が変更された場合、登録したクライアントは、更新されたトピックを再登録する必要があります。新しいイベントを再登録するには、名前変更したイベントオブジェクトのトリガーを追加します。
- タブの関連付けなし — Salesforce ユーザーインターフェースでイベントレコードを参照できないため、プラットフォームイベントに、関連付けられたタブはありません。
- SOQL サポートなし — SOQL を使用してイベントメッセージを照会できません。
- Lightning アプリケーションビルダーにレコードページのサポートなし — Lightning アプリケーションビルダーでレコードページを作成する場合、定義したプラットフォームイベントがページのオブジェクトのリストに表示されます。ただし、イベントレコードをユーザーインターフェースで使用できないため、プラットフォームイベントの Lightning レコードページを作成できません。
- パッケージのアンインストールのプラットフォームイベント — オプション [このパッケージのデータのコピーを、アンインストールしてから 48 時間保存します] を有効にしてパッケージをアンインストールした場合、プラットフォームイベントはエクスポートされません。
- パッケージのインストールおよびアップグレード内のイベント量 — 標準量のプラットフォームイベントを含む管理パッケージまたは未管理パッケージをインストールすると、イベントの種別が大量としてサブスクライバー組織に保存されます。管理パッケージをアップグレードしても、サブスクライバー組織のイベント量は変わりません。
- Professional Edition および Group Edition ではサポートされない — プラットフォームイベントは Professional Edition 組織と Group Edition 組織でサポートされません。これらの組織では、プラットフォームイベントオブジェクトが含まれるパッケージのインストールは失敗します。

