# Platform Event API によるユーザ操作の捕捉

Mashmatrix Sheetアプリケーションでユーザが行う操作には、Salesforceプラットフォームのプラットフォームイベントの仕組みを用いて外部のプログラムから捕捉できるものがあります。これにより、ユーザがMashmatrix Sheetで特定の操作を行ったタイミングで追加の処理を行ったり、操作内容をログに記録したりといったことが可能になります。

{% hint style="info" %}
Platform Event APIの利用には、ApexコードやSalesforceフロー、およびその他のSalesforceのプラットフォームイベントを利用したクライアントの開発に関する知識が必要になります。詳細はSalesforceの開発ドキュメントを参考にしてください。
{% endhint %}

## 捕捉可能な操作の種別 <a href="#fire-and-subscribe-events" id="fire-and-subscribe-events"></a>

### レコードの保存 (Save Records) <a href="#event-save-records" id="event-save-records"></a>

Mashmatrix Sheetからレコードの保存を行ったときに通知されるイベント

#### Platform Event名

`msmxSheet__SaveRecords__e`

#### イベントに含まれる項目

* **Book ID (BookId\_\_c)** - レコードの保存を実行したブックのID
* **Sheet ID (SheetId\_\_c)** - レコードの保存を実行したシートのID
* **Object Name (ObjectName\_\_c)** - 保存対象のSalesforceオブジェクト名
* **Operation Type (OperationType\_\_c)** - レコードの保存操作の種別。create / update / destroy のうちのいずれかとなります。
* **Num of Saving Records (RecordNum\_\_c)** - 保存対象のレコードの数
* **Success (Success\_\_c)** - 保存に成功したかどうかのフラグ(true/false)
* **Num of Success Records (SuccessRecordNum\_\_c)** - 保存に成功したレコードの数
* **Success Record IDs (SuccessRecordIds\_\_c)** - 保存に成功したレコードのIDのリスト（コンマ区切り。最大で5,000件まで）
* **Num of Error Records (ErrorRecordNum\_\_c)** - 保存に失敗したレコードの数
* **Error Record IDs (ErrorRecordIds\_\_c)** - 保存に失敗したレコードのIDのリスト（コンマ区切り。最大で5,000件まで）
* **Error Message (ErrorMessage\_\_c)** - 保存時のエラーメッセージ
* **User ID (UserId\_\_c)** - レコードの保存を実行したユーザのID

### クエリの実行 (Execute Query) <a href="#event-execute-query" id="event-execute-query"></a>

Mashmatrix Sheetからレコードのクエリを実行した際に通知されるイベント

#### Platform Event名

`msmxSheet__ExecuteQuery__e`

#### イベントに含まれる項目

* **Book ID (BookId\_\_c)** - レコードのクエリを実行したブックのID
* **Sheet ID (SheetId\_\_c)** - レコードのクエリを実行したシートのID
* **Object Name (ObjectName\_\_c)** - クエリ対象のSalesforceオブジェクト名
* **Query SOQL (Query\_\_c)** - 実行したクエリ文（SOQL）
* **Success (Success\_\_c)** - クエリに成功したかどうかのフラグ(true/false)
* **Num of Queried Records (RecordNum\_\_c)** - クエリで取得したレコードの数
* **Record IDs (RecordIds\_\_c)** - クエリで取得したレコードのIDのリスト（コンマ区切り。最大で5,000件まで）
* **Error Message (ErrorMessage\_\_c)** - エラーメッセージ
* **User ID (UserId\_\_c)** - レコードのクエリを実行したユーザのID

### ダウンロード (Download) <a href="#event-download" id="event-download"></a>

Mashmatrix SheetからダウンロードアクションボタンでCSVダウンロードを行ったときに通知されるイベント

#### Platform Event名

`msmxSheet__Download__e`

#### イベントに含まれる項目

* **Book ID (BookId\_\_c)** - ダウンロードを実行したブックのID
* **Sheet ID (SheetId\_\_c)** - ダウンロードを実行したシートのID
* **Num of Downloaded Records (RecordNum\_\_c)** - ダウンロード対象のレコードの数
* **Record IDs (RecordIds\_\_c)** - ダウンロードしたレコードのIDのリスト（コンマ区切り。最大で5,000件まで）
* **User ID (UserId\_\_c)** - ダウンロードを実行したユーザのID

## Salesforceフローを利用したクライアントの作成

プラットフォームイベントを捕捉するクライアントとして、Saleforceフローは代表的な選択肢です。Mashmatrix Sheetの操作イベントもフローを介して取得することができます。

Mashmatrix Sheetの操作イベントを捕捉するには、新規のプラットフォームイベントトリガーフローをフロービルダーで作成します。

<figure><img src="https://918299401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAdS8j6AOK0kqiLE6LBdM%2Fuploads%2Fgit-blob-a615c44b2d2789bc0ff40db489afa9380e9d6a37%2Fimage%20(2).png?alt=media" alt=""><figcaption></figcaption></figure>

プラットフォームイベントの選択画面で、補足したいイベントの種類を検索し、選択します。

<figure><img src="https://918299401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAdS8j6AOK0kqiLE6LBdM%2Fuploads%2Fgit-blob-d1cd09263b08b94352b96ffd5897e80bda4a6202%2Fimage%20(1)%20(2).png?alt=media" alt=""><figcaption></figcaption></figure>

プラットフォームイベントの項目値などを条件として、フローの実行を分岐したり、追加のアクションや通知処理を設定します。以下の画像の例はダウンロード操作の対象レコード数が1,000件を超えていた場合に管理者へメールを送信する例です。

<figure><img src="https://918299401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAdS8j6AOK0kqiLE6LBdM%2Fuploads%2Fgit-blob-500e48e7974e919f95751ecfd33393554d704d0f%2Fimage%20(2)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://918299401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAdS8j6AOK0kqiLE6LBdM%2Fuploads%2Fgit-blob-35cbaee589f28767543fba5b51f6efd11ee14d43%2Fimage%20(3).png?alt=media" alt=""><figcaption></figcaption></figure>

## Message Channel APIとの違い <a href="#difference-with-message-channel-api" id="difference-with-message-channel-api"></a>

Lightning Message Serviceを用いたメッセージ送信であるMessage Channel APIは、Lightningページ内でのメッセージのやり取りに用いられるのに対し、Platform Event APIによるメッセージは主にサーバサイドでの処理のフックに利用できます。

また、Message Channel APIはSheetコンポーネントとして埋め込まれた画面でのみ利用ができますが、Platform Event APIはMashmatrix Sheetアプリケーション画面も含めたすべての画面での操作内容が対象となります。
