イベントチャネルへの登録

学習の目的

この単元を完了すると、次のことができるようになります。

  • [変更データキャプチャ] ページで変更イベント通知に対してオブジェクトを有効にする。
  • EMP コネクタを使用して変更イベントチャネルに登録する。
  • Salesforce で更新を行い、変更イベント通知を生成する。

変更データキャプチャの基礎を学習したので、実際に Salesforce で変更を生成し、変更イベントを受信しましょう。このセクションでは、従業員レコードを作成して変更します。 

従業員カスタムオブジェクトを作成する

この演習を開始する前に、従業員カスタムオブジェクトを定義する必要があります。最初のステップでは、カスタムオブジェクトを作成します。Trailhead Playground 組織または Developer Edition 組織で一緒に手順を進めることができます。Trailhead Playground にアクセスするには、右上隅にあるプロファイル画像をクリックしてから [ハンズオン組織] をクリックし、起動したい組織のユーザ名をクリックします。

  1. [設定] から、[オブジェクトマネージャ] タブをクリックして、[作成] > [カスタムオブジェクト] を選択します。
  2. 次の値を入力します。

表示ラベル: Employee (従業員)

表示ラベル (複数形)): Employees (従業員)

(可能な場合は [母音で始まる場合はチェック] を選択)。

オブジェクト名: Employee (従業員)

レコード名: Employee Name (従業員名)

3.[カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する] を選択します。

4.[保存] をクリックします。

5.[新規カスタムタブ] ページで、[タブスタイル] に [ビル] タブを選択します。

6.[次へ] | [次へ] | [保存] をクリックします。

7.[項目とリレーション] をクリックして、[新規] をクリックします。

8.項目ウィザードに従って次の 3 つの項目を作成します。

データ型: Text (テキスト)、項目の表示ラベル: Last Name (姓)、項目名: Last_Name、長さ: 50、必須: Yes (はい)

データ型: Text (テキスト)、項目の表示ラベル: First Name (名)、項目名: First_Name、長さ: 50

データ型: Number (数値)、項目の表示ラベル: Tenure (在職期間)、長さ: 18、小数点の位置: 0、項目名: Tenure

変更通知に対して従業員オブジェクトを有効にする

変更通知を受信する前に、関心のあるオブジェクトを選択する必要があります。選択しないと、適切なチャネルに登録しても通知を受信しません。このセクションでは、従業員カスタムオブジェクトを選択して従業員レコードの変更をリスンします。

  1. [設定] から、[クイック検索] ボックスに「Change Data Capture」 (変更データキャプチャ) と入力し、[変更データキャプチャ] をクリックします。
  2. [使用可能なエンティティ] で、[Employee (Employee__c) ] を選択し、[>] 矢印をクリックします。
  3. [保存] をクリックします。

[変更データキャプチャ] ページ

EMP コネクタを使用して登録する

次に、EMP コネクタを使用して、Employee (従業員) レコードの変更イベントを生成して登録する方法を示します。このセクションでは、変更イベントを生成して受信する手順を説明し、変更イベントの例で確認できるようにします。このバッチを獲得する目的で必ずしも次の手順を実行する必要はありません。後々 EMP コネクタを使用して変更イベントに登録するときに、この手順を参照できます。

メモ

メモ

EMP コネクタは、無料のオープンソースのコミュニティサポートツールです。Salesforce は、CometD を使用してイベントを登録する方法の例としてこのツールを提供しています。独自の機能強化でこの EMP コネクタプロジェクトに貢献するには、https://github.com/forcedotcom/EMP-Connector のリポジトリにプル要求を送信してください。

前提条件

手順

  1. EMP-Connector GitHub リポジトリのローカルコピーを取得する手順は、次のとおりです。
  2. EMP-Connector ツールを作成する手順は、次のとおりです。
    • $ cd EMP-Connector
    • $ mvn clean package
    • mvn コマンドによって EMP-Connector プロジェクトディレクトリの target フォルダに生成される JAR ファイル。生成された target/emp-connector-0.0.1-SNAPSHOT-phat.jar という JAR ファイルに、コネクタと LoginExample 機能が含まれます。この JAR にはコネクタのすべての連動関係が含まれているため、それらを個別にダウンロードする必要がありません。
  3. EMP コネクタを Developer Edition 組織または Trailhead Playground 組織に対して実行するには、次のコマンドを入力し、Trailhead Playground 組織または Salesforce 組織のログイン情報と登録するチャネルを指定します。この例では、チャネルは /data/Employee__ChangeEvent です。
    • $ java -jar target/emp-connector-0.0.1-SNAPSHOT-phat.jar <username> <password> /data/Employee__ChangeEvent
メモ

メモ

コマンドラインでは、一部の文字には特別な機能があると認識されます。パスワードに特殊文字が含まれている場合は、リテラル文字列として渡されるように、パスワードを単一引用符で囲んでください。たとえば、macOS システムと Unix ベースのシステムの場合、引用符内に含める必要がある特殊文字は !,、\$ です。

EMP-Connector ツールを Employee__c のチャネルに登録した後、従業員レコードへの変更または新規レコードの作成が行われると、通知が生成され、ツールによってコンソールに出力されます。

従業員レコードを作成する

では、レコードを変更していくつか変更イベント通知を受信しましょう。最初に、従業員レコードを作成します。 

  1. アプリケーションランチャー (アプリケーションランチャー) で、[Employees (従業員)] を見つけて選択します。
  2. [新規] をクリックします。
  3. 次の項目に入力します。
    • Employee Name (従業員名): e-100
    • Last Name (姓): Smith
    • First Name (名): Patricia
  4. [保存] をクリックします。

従業員レコードを保存すると、コンソールに変更通知が次のように表示されます。

{
  "schema": "-pszPCNGMHqUPU1ftkjxEA",
  "payload": {
    "LastModifiedDate": "2019-09-25T20:36:12.000Z",
    "OwnerId": "005RM000001vI4mYAE",
    "CreatedById": "005RM000001vI4mYAE",
    "ChangeEventHeader": {
      "commitNumber": 65840604581,
      "commitUser": "005RM000001vI4mYAE",
      "sequenceNumber": 1,
      "entityName": "Employee__c",
      "changeType": "CREATE",
      "changedFields": [],
      "changeOrigin": "com/salesforce/api/soap/47.0;client=SfdcInternalAPI/",
      "transactionKey": "00051d2e-a65a-3e97-03fc-cdf4e16d5d3c",
      "commitTimestamp": 1569443772000,
      "recordIds": [
        "a00RM0000004ICTYA2"
      ]
    },
    "CreatedDate": "2019-09-25T20:36:12.000Z",
    "First_Name__c": "Patricia",
    "LastModifiedById": "005RM000001vI4mYAE",
    "Name": "e-100",
    "Last_Name__c": "Smith"
  },
  "event": {
    "replayId": 15053
  }
}

従業員レコードを更新する

次に、作成したレコードを更新しましょう。在職期間項目に値を追加し、名項目を変更します。 

  1. 従業員レコードの詳細ページで、[編集] をクリックします。
  2. [First Name (名)] 項目を「Trish」に変更します。
  3. [Tenure (在職期間)] に「3」と入力します。
  4. [保存] をクリックします。

従業員レコードを更新すると、次の変更イベントメッセージが生成されます。変更イベントには、ヘッダー項目に加えて新規および変更された項目のみが含まれています。

{
  "schema": "-pszPCNGMHqUPU1ftkjxEA",
  "payload": {
    "LastModifiedDate": "2019-09-25T20:38:11.000Z",
    "ChangeEventHeader": {
      "commitNumber": 65840825286,
      "commitUser": "005RM000001vI4mYAE",
      "sequenceNumber": 1,
      "entityName": "Employee__c",
      "changeType": "UPDATE",
      "changedFields": [
        "LastModifiedDate",
        "First_Name__c",
        "Tenure__c"
      ],
      "changeOrigin": "com/salesforce/api/soap/47.0;client=SfdcInternalAPI/",
      "transactionKey": "00051d4a-7640-5b8c-c6d1-b8db4ce4cf2f",
      "commitTimestamp": 1569443892000,
      "recordIds": [
        "a00RM0000004ICTYA2"
      ]
    },
    "First_Name__c": "Trish",
    "Tenure__c": 3.0
  },
  "event": {
    "replayId": 15054
  }
}

従業員レコードを削除する

次に、従業員レコードを削除したらどうなるか確認しましょう。 

  1. Trish の詳細ページで、ドロップダウンメニューから [削除] を選択します。
  2. 確認ポップアップで [削除] をクリックします。

削除すると、次のイベントメッセージが生成されます。削除の変更イベントにはレコードやシステム項目は含まれません。

{
  "schema": "-pszPCNGMHqUPU1ftkjxEA",
  "payload": {
    "ChangeEventHeader": {
      "commitNumber": 65841052769,
      "commitUser": "005RM000001vI4mYAE",
      "sequenceNumber": 1,
      "entityName": "Employee__c",
      "changeType": "DELETE",
      "changedFields": [],
      "changeOrigin": "com/salesforce/api/soap/47.0;client=SfdcInternalAPI/",
      "transactionKey": "00051d67-b628-09dc-15a0-05101183b4d1",
      "commitTimestamp": 1569444019000,
      "recordIds": [
        "a00RM0000004ICTYA2"
      ]
    }
  },
  "event": {
    "replayId": 15055
  }
}

従業員レコードを復元する

レコードを削除すると、そのレコードは論理削除され、一定期限内であれば復元できます。Apex でレコードを復元しましょう。

  1. クイックアクセスメニュー (設定ギアアイコン) をクリックし、[開発者コンソール] を選択します。
  2. 開発者コンソールで、[Debug (デバッグ)] をクリックし、[Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
  3. 新しいウィンドウで、次のコードを入力し、ID プレースホルダを recordIds ヘッダー項目で返された ID 値に置き換えます。recordIds 項目は、前のステップでレコードを削除した後に受信した変更イベントメッセージに含まれています。
Employee__c record = [SELECT Id,Name FROM Employee__c WHERE Id='ID_Placeholder' ALL ROWS];
undelete record;
  1. [実行] をクリックします。

復元すると、次のイベントメッセージが生成されます。復元されたレコードの変更イベントには、元の削除されたレコードから項目が含まれます。

{
  "schema": "-pszPCNGMHqUPU1ftkjxEA",
  "payload": {
    "LastModifiedDate": "2019-09-25T20:43:31.000Z",
    "OwnerId": "005RM000001vI4mYAE",
    "CreatedById": "005RM000001vI4mYAE",
    "ChangeEventHeader": {
      "commitNumber": 65841428802,
      "commitUser": "005RM000001vI4mYAE",
      "sequenceNumber": 1,
      "entityName": "Employee__c",
      "changeType": "UNDELETE",
      "changedFields": [],
      "changeOrigin": "com/salesforce/api/soap/47.0;client=devconsole",
      "transactionKey": "00051d9a-2fd0-e4de-a8e6-09f68b7ca54c",
      "commitTimestamp": 1569444212000,
      "recordIds": [
        "a00RM0000004ICTYA2"
      ]
    },
    "CreatedDate": "2019-09-25T20:36:12.000Z",
    "First_Name__c": "Trish",
    "LastModifiedById": "005RM000001vI4mYAE",
    "Tenure__c": 3.0,
    "Name": "e-100",
    "Last_Name__c": "Smith"
  },
  "event": {
    "replayId": 15056
  }
}

リソース