はじめに
Salesforceに格納されている添付ファイルがダウンロードされた際に、セキュリティ監査の目的などでメール通知を送りたいケースがあります。
本記事では、Salesforceの標準機能である「トランザクションセキュリティポリシー」を使用して、以下の2パターンの実装方法を紹介します。
- すべてのファイルダウンロード時に通知する(ノーコード設定)
- 「機密情報」フラグがあるファイルダウンロード時のみ通知する(Apex使用)
前提条件
この機能を使用するには、以下のライセンス(機能)が必要です。
- Salesforce Shield または Event Monitoring(イベントモニタリング)
ノーコードでの設定方法
まずは条件ビルダーを使用して、すべてのファイルダウンロードを検知する設定を行います。
1. トランザクションセキュリティポリシーの設定ページへアクセス
クイック検索にて「トランザクション」と入力し、セキュリティ > イベントモニタリング > トランザクションセキュリティポリシー へアクセスします。

2. トランザクションセキュリティポリシーが起動する条件を指定方法を選択
3. トリガー条件を指定
4. アクションの指定
- アクション :
なし - 通知 :
メール通知 - 受信者 : メール通知を行いたいユーザーを指定
- メール通知のコンテンツ :
デフォルトメールコンテンツ - 名前 : 任意のAPI名
5. 完成
任意の添付ファイルをダウンロードすると、指定したユーザーへメール通知が送信されます。
Apexを使用したポリシーのカスタマイズ
上記の実装では、Salesforce組織内のすべてのファイルが通知対象となります。
「特定の機密ファイルのみ監視したい」という要望に対して、Apexを用いて条件を絞り込む方法を解説します。
ここでは 「ContentVersion(ファイル)」オブジェクトに追加した『機密情報』項目にチェックがある場合のみ通知する というロジックを実装します。
1. コンテンツバージョンオブジェクトへカスタム項目を追加
- 項目の表示ラベル :
機密情報 - API名 :
IsConfidential__c - データ型 :
チェックボックス
2. トランザクションセキュリティポリシーが起動する条件を指定方法を選択
3. トリガー条件を指定
- イベント :
ファイルイベント - Apexクラス :
新しい空のApexクラス- これを選択すると、ひな形となるクラスが自動生成されます
4. アクションの指定
- アクション :
なし - 通知 :
メール通知 - 受信者 : メール通知を行いたいユーザーを指定
- メール通知のコンテンツ :
デフォルトメールコンテンツ - 名前 : 任意のAPI名
5. Apexの編集
生成されたApexクラスを編集します。
- イベントからファイルIDを取得
- ファイルIDを元に ContentVersion を検索
- カスタム項目 IsConfidential__c が True なら通知する(Trueを返す)
global class ConfidentialFilePolicy implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
// 1. イベントオブジェクトを FileEvent にキャスト
FileEventStore fEvent = (FileEventStore) event;
// 2. ファイルID (VersionId) が存在するか確認
if (fEvent.VersionId == null) {
return false;
}
// 3. ファイルレコードを取得してカスタム項目 (IsConfidential__c) をチェック
List<ContentVersion> cvs = [
SELECT IsConfidential__c
FROM ContentVersion
WHERE Id = :fEvent.VersionId
];
if (!cvs.isEmpty() && cvs[0].IsConfidential__c == true) {
return true; // ポリシー発動(メール送信)
}
return false; // ポリシー発動しない
}
}
6. 完成
機密情報にチェックが入っているファイルがダウンロードされた場合にのみメール通知が送信されるようになります。







