新しい拡張ポリシーのテストとトラブルシューティング
| 使用可能なインターフェース: Salesforce Classic および Lightning Experience |
| 使用可能なエディション: Enterprise Edition、Unlimited Edition、および Developer Edition Salesforce Shield または Salesforce Event Monitoring アドオンサブスクリプションが必要です。 |
Sandbox でテストする
新しいポリシーは、本番にリリースする前に必ず Sandbox でテストします。Sandbox で、ポリシーを作成して有効化してから、さまざまなアクションを試してポリシーが期待どおりに実行されるかどうかをテストします。
たとえば、ReportEvent ポリシーがリードに関するレポートのエクスポートをすべてブロックする必要がある場合は、さまざまなレポート操作を試してそれらがブロックされることを確認します。次に例を示します。
- リードに関する標準レポートを実行する。
- リードに関するカスタムレポートタイプを作成し、そのタイプを使用するレポートを実行する。
- リードに関するレポートの REST API クエリを実行する。
ポリシー条件を確認する
ポリシーが期待どおりに動作しない場合、追加した条件が適切ではない可能性があります。イベントマネージャは、ポリシー条件のトラブルシューティングに適したツールです。イベントマネージャの UI からイベントの保存またはストリーミングを有効化すると、組織の実際のイベントの項目値を調べることができます。これらの実際の値を期待値と比較し、一致するかどうかを確認できます。
たとえば、「QueriedEntities 次の値と等しい Lead」という条件を指定して ReportEvent ポリシーを作成するとします。次に、組織で Lead オブジェクトが含まれるカスタムレポートタイプを実行します。ポリシーがトリガされることを期待していますが、トリガされません。次の手順を実行して、問題を見つけます。
- 組織での ReportEvent の履歴を参照するために、イベントマネージャで ReportEvent の保存を有効化します。
- ReportEvent エントリが保存されるように再度カスタムレポートタイプを実行します。
- Postman などの API クライアントから、ReportEvent イベントオブジェクトを照会し、このカスタムレポートタイプの最近の実行に対応するエントリを見つけます。
- QueriedEntities 項目の値を確認します。期待した値ですか? 違っていれば、条件を変更します。たとえば、カスタムレポートタイプがリード以外のオブジェクトにも関連する場合、QueriedEntities の値は、Lead, Campaign, MyCustomObject__c のようになっています。この場合、ポリシー条件を「QueriedEntities 次の値を含む Lead」に変更します。
自動 Apex テストを追加する
自動 Apex テストは、新しい拡張ポリシーの Apex コードに入力ミス、論理的な不具合、退行があるか見つけるのに適した方法です。一般には、ベストプラクティスとして、開発サイクルの早期に自動テストを作成します。テストにより、本番環境のユーザに悪影響を与える前に、誤動作するポリシーを修正できます。
たとえば、リードデータエクスポート Apex クラスに入力ミスが含まれていて、条件が Lead ではなく Laed を評価しているとします。この Apex テストを実行すると、失敗するため、問題があることがわかります。
1/**
2 * Tests for the LeadExportEventCondition class, to make sure that our Transaction Security Apex
3 * logic handles events and event field values as expected.
4 **/
5 @isTest
6 public class LeadExportEventConditionTest {
7
8 /**
9 * Test Case 1: If an ApiEvent has Lead as a queried entity and more than 2000 rows
10 * processed, then the evaluate method of our policy's Apex should return true.
11 **/
12 static testMethod void testApiEventPositiveTestCase() {
13 // set up our event and its field values
14 ApiEvent testEvent = new ApiEvent();
15 testEvent.QueriedEntities = 'Account, Lead';
16 testEvent.RowsProcessed = 2001;
17
18 // test that the Apex returns true for this event
19 LeadExportEventCondition eventCondition = new LeadExportEventCondition();
20 System.assert(eventCondition.evaluate(testEvent));
21 }
22
23 }Apex デバッグログを追加する
Apex テストを作成して実行した後、Apex コードに問題があることはわかりますが、それが何かはわかりません。Apex デバッグログを使用すると、Apex クラスの動作を可視化しやすくなるため、問題を修正できます。
現在 System.debug() ステートメントに Laed という入力ミスが含まれている、リードデータエクスポート拡張ポリシーの Apex コードを更新しましょう。
1global class LeadExportEventCondition implements TxnSecurity.EventCondition {
2 public boolean evaluate(SObject event) {
3 switch on event{
4 when ApiEvent apiEvent {
5 System.debug('Evaluating an ApiEvent');
6 return evaluate(apiEvent.QueriedEntities, apiEvent.RowsProcessed);
7 }
8 when ReportEvent reportEvent {
9 System.debug('Evaluating a ReportEvent');
10 return evaluate(reportEvent.QueriedEntities, reportEvent.RowsProcessed);
11 }
12 when null {
13 System.debug('Evaluating null');
14 return false;
15 }
16 when else {
17 System.debug('Evaluating another event type: ' + event);
18 return false;
19 }
20 }
21 }
22
23 private boolean evaluate(String queriedEntities, Decimal rowsProcessed){
24 // pulling out our 2 conditions into variables
25 // so that we can also use them for logging!
26 boolean containsLead = queriedEntities.contains('Laed');
27 boolean moreThan2000 = rowsProcessed > 2000;
28
29 System.debug('Contains Lead? ' + containsLead);
30 System.debug('More than 2000 rows? ' + moreThan2000);
31
32 if (containsLead && moreThan2000){
33 return true;
34 }
35 return false;
36 }
37}開発者コンソールから Apex テストを再実行し、Apex コードが生成したデバッグログを表示します。次の例では、最近のイベントの Lead が含まれていない QueriedEntities 項目が表示されています。強調表示されたデバッグログで、正しく評価されなかった条件が特定されます。これで、簡単に Apex コードを調べて入力ミスを見つけることができます。

本番環境でポリシーが実行されたときのデバッグ出力を表示する場合は、自動ユーザのユーザ追跡フラグを追加します。自動ユーザがトランザクションセキュリティポリシーを実行します。
![新しいユーザ追跡フラグが表示されている [設定] の [デバッグログ]](https://developer.salesforce.com/docs/resources/img/ja-jp/244.0?doc_id=images%2Fenh_txn_sec_migrate_trace_flag.png&folder=securityImplGuide)