0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apex 「System.LimitException: Too many SOQL queries: 101」エラーが出る前に気を付けること

Last updated at Posted at 2023-10-20

どうも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で作っています。
興味のある方は見てもらえたら嬉しいです。
よろしくお願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?