どうもTABEです!
salesforceの開発をやっていると
よく出るエラーとして「System.LimitException: Too many SOQL queries: 101」があると思います。
これは一つのトランザクションでクエリを100件以上発行している時に発生するエラーです。
ガバナ制限というsalesforceには制限があり
それに沿ってクエリやCRUDの回数を一つのトランザクションで制限されています。
有名なのがForループにSOQLやInsert、Update、Deleteを入れることは最悪です。
これはほぼ何処かしらでエラーになると言っても過言ではないので、Apex開発をする方は必ず押さえておきましょう。
そこでずっと前から思っているApexを書くときにガバナ制限を考慮する書き方として
以下の2点は気をつけたいなと思っています。
①何も条件なしにSOQLを発行していないか?
これはかなりやりがちなのですが、商談のレコード情報が欲しいからすぐにSOQLを作って取得してしまう。ちょっと待ってください!!!それって何かの条件の上で起動する処理ではないですか?
対象のレコードを更新した時に起動と単純な起動にしていると、開発を重ねていくと、フローや色々なトリガーが重なって、新しい処理を追加した時に、1年前に作ったApexやフローを修正しないといけなくなります。
なのでなるべく、そのSQOLを発行する前に何か条件はないか?要件を確認して調整しましょう!
必ず、、、保守をやっていたら1年後に絶対に痛い目を見ます。。。
②UserInfoメソッドを最初に必ず起動する様にしない
これもかなり良くやる処理だと思います。。。
UserInfo.getProfileId()
を使ってログインユーザのプロファイルのIDを取得することが出てくると思います。
これってSQOLを裏で発行しているんですよね。何も考えずに最初にこのコードを書きまくっていると、それが重なってそこかでクエリの発行数が簡単に100件を超えます。
テストクラスとかでも、これのせいでデータを作れなくなったり結構しました。あー既存の処理変更しないと。。。って
他にもあると思いますが、自分が結構気にしているのはこの二つです!
少しでも参考になれば幸いです!
ではまた!
salesforceの解説用動画をUdemyで作っています。
興味のある方は見てもらえたら嬉しいです。
よろしくお願いします!