イベントチャネルへの登録
学習の目的
この単元を完了すると、次のことができるようになります。
- [変更データキャプチャ] ページで変更イベント通知に対してオブジェクトを有効にする。
- Pub/Sub API を使用して変更イベントチャネルに登録する。
- Salesforce で更新を行い、変更イベント通知を生成する。
変更データキャプチャの基礎を学習したところで、実際に Salesforce で変更を生成し、変更イベントを受信しましょう。このセクションでは、従業員レコードを作成して変更します。
従業員カスタムオブジェクトを作成する
この演習を開始する前に、従業員カスタムオブジェクトを定義する必要があります。最初のステップでは、カスタムオブジェクトを作成します。この単元のタスクは個人用の Trailhead Playground で実行できます。Trailhead Playground にアクセスするには、右上隅にあるプロファイル画像をクリックしてから [Hands-on Orgs (ハンズオン組織)] をクリックし、起動したい組織のユーザー名をクリックします。
- [設定] から、[オブジェクトマネージャー] タブをクリックして、[Create (作成)] > [カスタムオブジェクト] を選択します。
- 次の値を入力します。
- Label (表示ラベル):
Employee
(従業員) - Plural Label (表示ラベル複数形):
Employees
(従業員) - (可能な場合は [母音で始まる場合はチェック] を選択)。
- Object Name (オブジェクト名):
Employee
(従業員) - Record Name (レコード名):
Employee Name
(従業員名)
- Label (表示ラベル):
-
[カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する] を選択します。
-
[Save (保存)] をクリックします。
- [新規カスタムタブ] ページで、[タブスタイル] に [ビル] タブを選択します。
-
[Next (次へ)] | [Next (次へ)] | [Save (保存)] をクリックします。
-
[項目とリレーション] をクリックして、[New (新規)] をクリックします。
- 項目ウィザードに従って次の 3 つの項目を作成します。
- Data Type (データ型): Text (テキスト)、Field Label (項目の表示ラベル):
Last Name
(姓)、Field Name (項目名):Last_Name
、Length (長さ):50
、Required (必須): Yes (はい)
- Data Type (データ型): Text (テキスト)、Field Label (項目の表示ラベル):
First Name
(名)、Field Name (項目名):First_Name
、Length (長さ):50
- Data Type (データ型): Number (数値)、Field Label (項目の表示ラベル):
Tenure (在職期間)
、Length (長さ):18
、Decimal Places (小数点の位置):0
、Field Name (項目名):Tenure
(在職期間)
- Data Type (データ型): Text (テキスト)、Field Label (項目の表示ラベル):
変更通知に対して従業員オブジェクトを有効にする
変更通知を受信する前に、関心のあるオブジェクトを選択する必要があります。選択しないと、適切なチャネルに登録しても通知を受信しません。このセクションでは、従業員カスタムオブジェクトを選択して従業員レコードの変更をリスンします。
- [Setup (設定)] から、[Quick Find (クイック検索)] ボックスに
Change Data Capture
(変更データキャプチャ) と入力し、[Change Data Capture (変更データキャプチャ)] をクリックします。
- [使用可能なエンティティ] で、[Employee (Employee__c) ] を選択し、[>] 矢印をクリックします。
-
[Save (保存)] をクリックします。
Pub/Sub API を使用して登録する
次に、Pub/Sub API Java クライアントを使用して、Employee (従業員) レコードの変更イベントを生成して登録する方法を示します。このセクションでは、変更イベントを生成して受信する手順を説明し、変更イベントの例で確認できるようにします。このバッチを獲得する目的で必ずしも次の手順を実行する必要はありません。後々 Pub/Sub API を使用して変更イベントに登録するときに、この手順を参照できます。
前提条件
- 組織に信頼できる IP アドレス範囲を設定していない場合は、パスワードに追加するセキュリティトークンが必要です。詳細については、「セキュリティトークンのリセット」」と「組織の信頼済み IP 範囲の設定」を参照してください。
手順
- Pub/Sub API Java クライアントを設定するには、『Pub/Sub API Developer Guide (Pub/Sub API 開発者ガイド)』の「Java Quick Start for Pub/Sub API (Pub/Sub API の Java クイックスタート)」の「Step 2: Clone and Build the Client (ステップ 2: クライアントをコピーして作成する)」の手順に従います。
-
「Step 3: Configure Client Parameters (クライアントのパラメーターを設定する)」では、
arguments.yaml
のパラメーター設定を指定します。
-
PUBSUB_HOST
とPUBSUB_PORT
のデフォルト値は維持します。
-
LOGIN_URL
には、https://login.salesforce.com
または [My Domain (私のドメイン)] ログイン URL (https://mycompany.my.salesforce.com
など) を入力します。 - Playground Starter アプリケーションで Trailhead Playground 組織のユーザー名とパスワードを取得します。詳細は、「Trailhead Playground の管理」モジュールの「Trailhead Playground のユーザー名とパスワードの取得」単元を参照してください。
-
USERNAME
(ユーザー名) に Trailhead Playground ユーザー名を入力します。
-
PASSWORD
(パスワード) に Trailhead Playground パスワードを入力し、パスワードにセキュリティトークンを追加します。セキュリティトークンを取得するには、Salesforce ヘルプの「セキュリティトークンのリセット」を参照してください。
-
TOPIC
(トピック) に/data/Employee__ChangeEvent
と入力します。 -
PROCESS_CHANGE_EVENT_HEADER_FIELDS
をtrue
に設定します。この値により、ChangeEventHeader の一部の項目 (changedFields
など) が展開されます。詳細は、『Pub/Sub API 開発者ガイド』の「Event Deserialization Considerations (イベントのデシリアライゼーションに関する考慮事項)」を参照してください。
- 変更内容を保存します。
- ターミナルウィンドウで、最上位の
java
フォルダーに移動します。
- 変更イベントに登録するには、
./run.sh genericpubsub.Subscribe
と入力します。
Employee__c のチャネルに登録した後、従業員レコードへの変更または新規レコードの作成が行われると、通知が生成され、クライアントによってコンソールに出力されます。
従業員レコードを作成する
では、レコードを変更していくつか変更イベント通知を受信しましょう。最初に、従業員レコードを作成します。
- アプリケーションランチャー () で、[Employees (従業員)] を見つけて選択します。
-
[New (新規)] をクリックします。
- 次の項目に入力します。
- Employee Name (従業員名):
e-100
- Last Name (姓):
Smith
- First Name (名):
Patricia
-
[Save (保存)] をクリックします。
従業員レコードを保存すると、コンソールに変更通知が次のように表示されます。
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "CREATE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001b7b1-5ff1-499e-0b32-4b2aff2f6922", "sequenceNumber": 1, "commitTimestamp": 1722538034000, "commitNumber": 1722538034362728400, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": "005ak000004FkWTAA0", "Name": "e-100", "CreatedDate": 1722538034000, "CreatedById": "005ak000004FkWTAA0", "LastModifiedDate": 1722538034000, "LastModifiedById": "005ak000004FkWTAA0", "Last_Name__c": "Smith", "First_Name__c": "Patricia", "Tenure__c": null }
従業員レコードを更新する
次に、作成したレコードを更新しましょう。在職期間項目に値を追加し、名項目を変更します。
- 従業員レコードの詳細ページで、[編集] をクリックします。
- [First Name (名)] 項目を
Trish
に変更します。
- [Tenure (在職期間)] に
3
と入力します。
-
[Save (保存)] をクリックします。
従業員レコードを更新すると、次の変更イベントメッセージが生成されます。変更イベントで入力されている項目は、ヘッダー項目に加えて新規および変更されたレコード項目とシステム項目のみです。変更されていない項目はイベントメッセージ内に存在しますが null です。
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "UPDATE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001b7b6-4696-a4a3-c6a5-8b65014da623", "sequenceNumber": 1, "commitTimestamp": 1722538057000, "commitNumber": 1722538057223217200, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [ "0x0320" ] }, "OwnerId": null, "Name": null, "CreatedDate": null, "CreatedById": null, "LastModifiedDate": 1722538057000, "LastModifiedById": null, "Last_Name__c": null, "First_Name__c": "Trish", "Tenure__c": 3 }
changedFields
項目には変更された項目が含まれています。changedFields
項目はビットマップ項目で、判読できません。まずクライアントがデコードする必要があります。登録者クライアントはこの項目をデコードし、変更イベントメッセージの後に出力します。この例の changedFields
項目には、変更された 2 つの項目 First_Name__c
と Tenure__c
が含まれています。また、更新のタイムスタンプを保持するシステム項目 LastModifiedDate
も含まれています。
2024-08-01 11:47:37,738 [grpc-default-executor-1] java.lang.Class - ============================ 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ChangedFields 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ============================ 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - LastModifiedDate 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - First_Name__c 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - Tenure__c 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ============================
従業員レコードを削除する
次に、従業員レコードを削除したらどうなるか確認しましょう。
- Trish の詳細ページで、ドロップダウンメニューから [削除] を選択します。
- 確認ポップアップで [削除] をクリックします。
削除すると、次のイベントメッセージが生成されます。削除の変更イベントにはレコード項目やシステム項目の値は含まれません。すべてのレコード項目とシステム項目が含まれていますが、値は空です。
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "DELETE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001045a-a442-5723-cd1f-07e8e39c5c1d", "sequenceNumber": 1, "commitTimestamp": 1722538082000, "commitNumber": 1722538082479947800, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": null, "Name": null, "CreatedDate": null, "CreatedById": null, "LastModifiedDate": null, "LastModifiedById": null, "Last_Name__c": null, "First_Name__c": null, "Tenure__c": null }
従業員レコードを復元する
レコードを削除すると、そのレコードは論理削除され、一定期限内であれば復元できます。Apex でレコードを復元しましょう。
- クイックアクセスメニュー () をクリックし、[開発者コンソール] を選択します。
- 開発者コンソールで、[Debug (デバッグ)] をクリックし、[Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
- 新しいウィンドウで、次のコードを入力し、ID プレースホルダーを recordIds ヘッダー項目で返された ID 値に置き換えます。
recordIds
項目は、前のステップでレコードを削除した後に受信した変更イベントメッセージに含まれています。
Employee__c record = [SELECT Id,Name FROM Employee__c WHERE Id='ID_Placeholder' ALL ROWS]; undelete record;
-
[実行] をクリックします。
復元すると、次のイベントメッセージが生成されます。復元されたレコードの変更イベントには、元の削除されたレコードから項目が含まれます。
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "UNDELETE", "changeOrigin": "com/salesforce/api/soap/61.0;client=devconsole", "transactionKey": "0001b7d4-927c-6028-fe72-7f28dc5cba83", "sequenceNumber": 1, "commitTimestamp": 1722538187000, "commitNumber": 1722538187363508200, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": "005ak000004FkWTAA0", "Name": "e-100", "CreatedDate": 1722538034000, "CreatedById": "005ak000004FkWTAA0", "LastModifiedDate": 1722538187000, "LastModifiedById": "005ak000004FkWTAA0", "Last_Name__c": "Smith", "First_Name__c": "Trish", "Tenure__c": 3 }
リソース
-
Salesforce Developers: Java Quick Start for Pub/Sub API (Pub/Sub API の Java クイックスタート)
-
Salesforce Developers: Change Data Capture Developer Guide (変更データキャプチャ開発者ガイド)
-
外部サイト: Pub/Sub API GitHub リポジトリ