Apex-governor-limits
Apex-ガバナーの制限
ガバナーの実行制限により、Force.comマルチテナントプラットフォーム上のリソースを効率的に使用できます。 これは、効率的な処理のためのコード実行に関してSalesforce.comによって指定された制限です。
ガバナー制限とは何ですか?
知っているように、Apexはマルチテナント環境で実行されます。つまり、単一のリソースがすべての顧客と組織で共有されます。 したがって、誰もリソースを独占しないようにする必要があります。したがって、Salesforce.comは、コード実行を管理および制限する一連の制限を作成しました。 ガバナーの制限のいずれかを超えると、エラーがスローされ、プログラムの実行が停止します。
開発者の観点からは、コードがスケーラブルであり、制限に達していないことを確認することが重要です。
これらの制限はすべて、トランザクションごとに適用されます。 単一のトリガーの実行は1つのトランザクションです。
これまで見てきたように、トリガー設計パターンは制限エラーを回避するのに役立ちます。 他の重要な制限が表示されます。
SOQLクエリ制限の回避
トランザクションごとに発行できるクエリは100のみです。つまり、コードが100を超えるSOQLクエリを発行すると、エラーがスローされます。
例
この例は、SOQLクエリの制限に到達する方法を示しています-
次のトリガーは、顧客のリストを反復処理し、子レコード(請求書)の説明を文字列「Ok to Pay」で更新します。
「updateCustomerDescription」メソッドが呼び出され、顧客レコードの数が100を超えると、SOQL制限に達します。 これを回避するには、ForループでSOQLクエリを記述しないでください。 この場合、SOQLクエリはForループで記述されています。
以下は、DMLおよびSOQLの制限を回避する方法を示す例です。 ネストされた関係クエリを使用して請求書レコードを取得し、コンテキスト変数 trigger.newMap を使用してidおよびCustomerレコードのマップを取得しました。
DML一括呼び出し
この例は、バルクトリガーとトリガーヘルパークラスパターンを示しています。 最初にヘルパークラスを保存してから、トリガーを保存する必要があります。
注-以前に作成した「CustomerTriggerHelper」クラスに以下のコードを貼り付けます。
Salesforceガバナーのその他の制限
次の表に、重要なガバナーの制限を示します。
Description | Limit |
---|---|
Total heap size | 6 MB/12 MB |
Total number of DML statements issued | 150 |
Total number of records retrieved by a single SOSL query | 2000 |
Total number of SOSL queries issued | 20 |
Total number of records retrieved by Database.getQueryLocator | 10000 |
Total number of records retrieved by SOQL queries | 50000 |