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) が決まります。

IT

Posted by arkgame