SOQL ガバナ制限に達するのを避けるために、マップを使用する一括トリガがあります。このトリガーは、再帰およびクエリの制限のために静的クラス変数も使用します。
私が行っているのは、挿入や更新などの一括操作がオブジェクト (この場合は連絡先オブジェクト) で開始されると、トリガーは最初のトリガーで関連する取引先のマップを作成し、それらのマップを残りのトリガー発射。
以下は、うまく機能している操作の例ですが、After Update および After Insert トリガー操作に対してのみです。
静的クラス変数が true でないことを確認してください。
variable が true でない場合、マップを作成します。
静的クラス変数を true に設定します。
トリガー操作を実行します。
挿入/更新トリガーの場合、セッション状態は維持され、静的クラス変数は一括操作が終了するまでリセットされません。
ただし、before delete トリガーの場合、セッション状態はないようで、レコードが削除されるたびにセッションがリセットされます。セッションはリセットされますが、ガバナー制限はレコードの一括削除に対して累積的です。そのため、削除前のトリガーを使用すると、マップを使用している場合でも、soql クエリ数がカウントされ続け、100 を超えるレコードを削除するための悪名高い「Too Many Sql クエリ」の制限に達します。
SOQL の制限に達するのを防ぐ方法についてのご意見をお待ちしております。私はこれについてどこにも何も見つけることができませんでした。