※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。
今回は Pub/Sub API のサンプルを実行する方法を紹介したいと思います。
Pub/Sub API では何ができるの?
Pub/Sub API は gRPC と HTTP/2 に基づいた API で、リアルタイムでイベントを介してデータのやり取りを行うことができます。公開されたイベントはイベントバスに 72 時間保存されるので、一時的に切断されていたとしても過去のイベントを再取得することができます。
ユースケースとしては外部システムとのデータの同期やオブジェクト変更時の通知といったようなことが挙げられます。
Trailhead の「Pub/Sub API を使用する」に記載のイベントの種類は下記の通りです。
- 変更データキャプチャ — 変更データキャプチャを使用すると、サポート対象である変更された項目すべてのレコードの変更を受信します。追跡されるレコード操作は、レコードの作成、更新、削除、復元です。各イベントメッセージには、変更に関する情報を表示するヘッダー項目が含まれます。
- プラットフォームイベント — カスタムプラットフォームイベントを使用して、カスタム通知を公開および登録できます。プラットフォームイベントオブジェクトと項目を作成して、イベントデータのスキーマを定義できます。また、リアルタイムイベント監視イベントなど、Salesforce によって定義および公開される標準プラットフォームイベントに登録して、Salesforce 内のユーザー関連アクティビティやセキュリティ関連アクティビティなどを監視できます。
Pub/Sub API サンプルの使い方
Salesforce は Github は gRPC の定義ファイルである proto ファイル を公開していると同時にさまざまな言語でサンプルを公開していますので、そちらの使い方を紹介したいと思います。
今回は Go を利用する想定で記載しますが Go のインストール方法については割愛します。
1. 接続アプリケーションの作成
以前紹介した Qiita「Salesforce Bulk API 2.0 を使ってみる」の「1. 接続アプリケーションの作成とアクセストークンの取得」と同様です。
2. Github から ソースコードをクローン or ダウンロード
Github レポジトリ「pub-sub-api」をクローン or ダンロードしてください。すると下記のようなフォルダ構成のソースコード群が取得できます。
3. Go のサンプルコードの変数を上書きする
go/common/common.go
ファイルの下記の変数にそれぞれ値を設定します。
変数名 | 説明 |
---|---|
ClientId | 接続アプリケーションの「コンシューマ鍵」 |
ClientSecret | 接続アプリケーションの「コンシューマの秘密」 |
Username | 組織にログインする際のユーザ ID |
Password | 組織にログインする際のパスワード |
OAuthEndpoint | 「https://login.salesforce.com」。サンドボックスの場合は「https://test.salesforce.com」 |
TopicName | 登録するイベントのトピック名(後述)。 |
4. 実行する
今回はイベントに登録(サブスクライブ)します。下記のように go/examples
フォルダ内にあるサブスクライブするためのサンプルを実行します。
# go フォルダ内に移動
cd go
# 依存関係のダウンロード
go mod vendor
# サブスクライブの実行
go run examples/subscribe/main.go
実行すると下記のようにイベントの発生を待つようになります。
この時点で有効なトピック名を設定してない場合はエラーが発生します。
「変更データキャプチャ」をサブスクライブしてみる
今回は取引先が変更された想定でどのようにサブスクライブされるかを確認します。
変更データキャプチャで利用できるオブジェクト限られます。一覧はこちらです。
1. 変更データキャプチャの設定(ヘルプ)
設定 > 変更データキャプチャ に遷移し、[選択されたエンティティ] として取引先を選択し、保存します。
2. Go の変数の上書き
Go の go/common/common.go
ファイルの TopicName
に取引先オブジェクトの変更イベントを設定します。
標準オブジェクトの変更イベントは /data/<Standard_Object_Name>ChangeEvent
のようなフォーマットで入力されるので、取引先 (Accout) オブジェクトの場合は /data/AccountChangeEvent
となります。
その他のフォーマットについては「Subscription Channels」をご覧ください。
3. サブスクライブして取引先を変更してみる
再度コマンドを実行します。
go run examples/subscribe/main.go
すると、下記のように変更イベントが表示されるのがわかります。
「プラットフォームイベント」をサブスクライブしてみる
今回は注文概要オブジェクトの変更を知らせるプラットフォームイベントを作成してそれをフローで公開してみようと思います。
1. プラットフォームイベントの設定(ヘルプ)
設定 > プラットフォームイベント から「Order Summary Change」というイベントを作成しました。
イベントオブジェクトのフィールドとして注文番号 (Order No) と状況 (Status) を設定しました。
2. Go の変数の上書き
Go の go/common/common.go
ファイルの TopicName
に「Order Summary Change」イベントを設定します。
プラットフォームイベントは /event/
Event_Name
__e
のようなフォーマットで入力されるので、「Order Summary Change」イベントの場合は /event/Order_Summary_Change__e
となります。
- これはプラットフォームイベントの詳細ページの [API 参照名] からも確認できます。
- その他のフォーマットについては「Subscribe to Platform Event Notifications with Pub/Sub API」をご覧ください。
3. フローを作成して実行してみる
再度コマンドを実行します。
go run examples/subscribe/main.go
「Order_Summary_Change」オブジェクトレコードを作成するシンプルなフローを作成します。
「Order_Summary_Change」オブジェクトフィールドの Order No には「1234567」、Status には「Approved」を設定し実行します。