function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
thsrthsr 

ガバナ制限の根本的な解決方法はありませんでしょうか?

ガバナ制限の根本的な解決方法はありませんでしょうか?

たとえば、Too many SOQL queries: 201のようなSOQLの実行総数の制限の回避方法、ご存知の方がいらっしゃいましたらご教授いただけませんでしょうか?

よろしくお願いいたします。

Best Answer chosen by Admin (Salesforce Developers) 
ikouikou

ソースを見る限り、設計に問題があると思います。

 

doIt()内で何故SOQLやDMLを3回ずつ実行しているのか分からないので、なんとも言えませんが、

id_listのループ内でSOQLやDMLを実行するのではなく、まとめて行うようにしましょう。

 

リファレンス等でも指摘されているので、一度読んでみてください。

 

ちなみにガバナー制限は、設計(書き方)で回避するしかありません。

All Answers

yumayuma

どのような状況でどのガバナ制限に引っかかっているのかわかりません。

 

処理ごとにinsertやupdateをするのではなくListにaddして一括でinsertなどを行う。

 

List<Account> TEST = new List<Account>();

for(Integer i=0; i<=10; i++){

Account temp = new Account();

temp.Name = Test;

 

 TEST.add(temp);

}

insert TEST;

thsrthsr

早速ご回答いただきありがとうございます。

 

説明不足で申し訳ございません。

 

たとえば、一括処理時に下記のdoIt()を100回を呼び出そうとすると、ガバナ制限に引っかかってしまうのです。
コントローラー内:Too many SOQL queries: 101
バッチ内:Too many SOQL queries: 201

//一括処理クラス
------------------------------
★仮にid_list内に100件があるとする
for (String sID : id_list) {
    cCom.doIt(sID);
}
------------------------------

//共通クラス
public class cCom {
    public static integer doIt(Id pid) {
     select....;//SOQLクエリ1

       update1;

     select....;//SOQLクエリ2

       update2;

     select....;//SOQLクエリ3

       update3;
}
}

どうやら更新のほうではなく、SOQLクエリの発行総数が引っかかっているようです。
やはり、一括処理件数を減らすか、method内のSOQLクエリ数を減らすかしか方法がありませんでしょうか?
ご教授いただけたら幸いです。
よろしくお願いいたします。

ikouikou

ソースを見る限り、設計に問題があると思います。

 

doIt()内で何故SOQLやDMLを3回ずつ実行しているのか分からないので、なんとも言えませんが、

id_listのループ内でSOQLやDMLを実行するのではなく、まとめて行うようにしましょう。

 

リファレンス等でも指摘されているので、一度読んでみてください。

 

ちなみにガバナー制限は、設計(書き方)で回避するしかありません。

This was selected as the best answer
thsrthsr

ありがとうございました。とても参考になりました。

またよろしくお願いします。