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;
        }
使用例
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
}
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; } }
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) が決まります。

IT

Posted by arkgame