AsyncCondition インターフェース
名前空間
使用方法
トランザクションセキュリティポリシー条件を実装したクラスで非同期 Apex コールを実行する場合は、TxnSecurity.EventCondition のほかに TxnSecurity.AsyncCondition インターフェースをクラスに実装する必要があります。トランザクションセキュリティ Apex ポリシーで許可されない Apex コールアウトおよび DML ステートメントの代わりに、非同期 Apex を使用します。
Apex では、さまざまな方法で Apex コードの非同期実行が可能です。TxnSecurity.AsyncCondition インターフェースでは、これらのすべての方法がサポートされています。
このインターフェースには、メソッドはありません。
AsyncCondition の実装例
TxnSecurity.AsyncCondition インターフェースの実装例を次に示します。ユーザーがログインすると、トランザクションセキュリティポリシーがトリガーされます。この例の場合、ExternalValidation__c は、外部検証システムからの情報を含むカスタムオブジェクトです。ExternalValidation__c に対する SOQL クエリの結果によって、ユーザーのログインをブロックするかどうかが決定されます。次にこのポリシーにより、CalloutToExternalValidator クラスが非同期実行のためにキューに入れられます。CalloutToExternalValidator クラスを実行すると、検証システムに対する外部コールが実行され、イベントのこのログに関する情報でクラスが更新されます。CalloutToExternalValidator は、非同期 Apex によってトリガーされます。そのため、ExternallyValidatedLoginCondition Apex クラスには、通常の TxnSecurity.EventCondition インターフェースとともに、TxnSecurity.AsyncCondition インターフェースを実装する必要があります。
1global class ExternallyValidatedLoginCondition implements TxnSecurity.EventCondition, TxnSecurity.AsyncCondition {
2 public boolean evaluate(SObject event) {
3 LoginEvent loginEvent = (LoginEvent) event;
4 Boolean userBlocked = [select blocked from ExternalValidation__c where loginId = loginEvent.UserId][0].Blocked;
5
6 System.enqueueJob(new CalloutToExternalValidator(loginEvent.SourceIp, loginEvent.LoginUrl));
7 return userBlocked;
8 }
9}
10
11public class CalloutToExternalValidator implements Queueable {
12 private String sourceIp;
13 private String loginUrl;
14
15 public CalloutToExternalValidator(String sourceIp, String loginUrl) {
16 this.sourceIp = sourceIp;
17 this.loginUrl = loginUrl;
18 }
19
20 public void execute(QueueableContext context) {
21 // callout to external validation service
22 // pass sourceIp, loginUrl
23
24 // update ExternalValidation__c
25 }
26}