Apex を使用するポリシーを作成するサンプル
環境
Salesforce Apex
概要
1.このコードがプロファイルオブジェクトとユーザーオブジェクトに SOQL クエリを実行して、イベントをトリガーしたユーザーのプロファイルを取得します。
Profile profile = [SELECT Name FROM Profile WHERE Id IN
(SELECT profileId FROM User WHERE Id = :reportEvent.UserId)];
2.プロファイルが取得したら、条件をテストできます。プロファイル名に「Data Steward」という文字列が含まれず、かつ、
イベントで処理される行が 10 を超えている場合、つまり、レコードが 10 件を超えるレポートをユーザーが参照またはエクスポートする場合は、この Apex コードが true を返します。
if (!profile.Name.contains('Data Steward’)
&& reportEvent.RowsProcessed > 10) {
return true;
}
使用例
global class PreventLargeDataExportEventCondition implements TxnSecurity.EventCondition { public boolean evaluate(SObject event) { switch on event{ when ReportEvent reportEvent{ return evaluate(reportEvent); } when null { // Don't take policy action when event is null return false; } when else { // Don't take policy action when event is not handled return false; } } } /** * リポートイベントの処理メソッド */ private boolean evaluate(ReportEvent reportEvent) { Profile profile = [SELECT Name FROM Profile WHERE Id IN (SELECT profileId FROM User WHERE Id = :reportEvent.UserId)]; // ユーザー プロファイルが「Data Steward」ではない場合にのみポリシー アクションを実行します。 // 処理行 が 10 を超えています。 if(!profile.Name.contains('Data Steward') && reportEvent.RowsProcessed >10) { return true; } return false; } }
説明
PreventLargeDataExportEventCondition クラスは、Apex ベースのトランザクションセキュリティポリシーに必要な
TxnSecurity.EventCondition Apex インターフェースを実装します。
TxnSecurity.EventCondition インターフェースには、evaluate(SObject) というメソッドが必要です。このメソッドは SObject パラメーターを取り、Boolean 値 (true/false) を返します。
返された Boolean によってポリシーがトリガーされるか (true) 否か (false) が決まります。