こんにちは、管理人の@Salesforce.Zです。
sfdc apex開発では
よくあってしまうのが
「System.LimitException: Too many SOQL queries: 101」
でしょう
これが本当に考慮するべき、かつ大事なところです。
公式サイトのベストプラクティス以外のノウホウを
今回、共有したいと思います。
目次
エラーを回避する
エラー原因:コンテキストで合計 100 個までの SOQL クエリを実行することができるガバナ制限に達した
ガバナ制限を引き上げたらり、無効にすることはできません
コードを見直すしかありません
発生可能性のあるところ
これがcase by caseだが、一応可能性のあるところを列挙します、 見直すポイントとして使っていただけたら、幸いです。
※大事なのがループになっているか、親子の連動でループ処理になっていないか * 登録/更新/削除を行うたびにSOQLを発行していないか 特定のタイミグに特定のSOQLだけを発行する制御で回避できる
公式サイト以外の知恵で回避方法
スキーマオブジェクトを使用すること
例えば、レコードタイプは全然クエリを使う必要がないので これを例にします。
今回、取引先を例にして、
営業っていうレコードタイプがある前提
営業レコードタイプの開発名:sales
テスト環境と本番環境のレコードタイプIDが違うので、
たまにIDが必要になってくる
普通のコード
下記のコードを匿名windowで実行する
List<RecordType> rcdList = [SELECT Id, DeveloperName, SobjectType FROM RecordType WHERE SobjectType = 'Account'];
実行結果ログ
SOQLのところが1
スキーマオブジェクトを使用したコード
Id rcdTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Sales').getRecordTypeId();
実行結果ログ
SOQLのところが0
まとめ
too many soql なら、コードを見直す
too many soqlなら、スキーマオブジェクトを使用してみる