Newer Version Available
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}