campus フォレストキャンパス

© 2019 System Forest inc.

sitemap サイトマップ

Salesforce エラー:数式ではまってしまいました。。

Salesforce エラー:数式ではまってしまいました。。

数式ではまってしまいました。
年度更新を行う案件があったのですが、項目的にほぼコピーでしたので、Selectにて全項目取得後Cloneにて複製処理を行っていました。その際、午前中まで通ってたテストが、午後にはいきなりエラーとなり通らなくなりました。 エラーコードを見てみると、Clone元のオブジェクトをSelectした時点で、下記エラーが発生してタイムアウトとなりました。

— System.UnexpectedException: common.exception.SfdcSqlException: ORA-04030: out of process memory when trying to allocate 20504 bytes (callheap,KTI call freeable small pool) —

となり、ググってみるとOracleのメモリー不足と言うエラーとのこと。

Salesforce内にて使用しているOracleのエラーだったので、ケース申請しようと思いましたが、直前までは正常に動いており、検索した結果ORA-XXXXX(Xは数字)のエラーは決まって項目が多い、データ数が多いなどだった為、情報収集から開始。 別担当者に聞いてみると、該当オブジェクトを編集して、直前まで数式項目と、フロー処理の追加していたとの事。 これをもとに、以下の対策をしました。

  • フローを削除 → 改善せず → 元に戻しました。
  • テストコードにて、データ数を最小限に → 改善せず → 元に戻しました
  • SOQLで、システム関連(更新者、更新日時)nullセットする分を項目から削除 → 改善せず
  • さらにSOQLで、数式になっている分を項目から削除 → テスト通過
  • 今回のオブジェクトでは全項目が320、数式の項目が50以上有ったためだと思われます。 APEXで、データを取得するだけのSOQLでテストしましたが、すべてSELECT文を実行した時点でエラーとなりました。標準の編集、表示画面では発生しないためApex内でSELECT処理を行うときは、数式が再計算される?
    標準で取得する場合は、数式の項目は再計算されない?(内部動作なので、詳細は判りませんが以下ように注意すべきと思います。)
  • 数式を多数使用する場合は、表示、編集画面をApexを使用しないようにする。
  • Apexを使用する場合は、フローではなくトリガもしくはApexにて処理を行うようにする。

今回は、数式が50ヶ所以上、項目が320個と言うオブジェクトでの発生でしたが、今後オブジェクト項目を多数使用する場合は、頭の隅にでも入れていただければと思います。

<後日談>
該当オブジェクトの、ビューにて“データがありません”とのエラーが発生しました。やはり、ガバナ以内であっても、項目や数式が多い場合は問題が発生する事案が多いようです。 結局は、オブジェクト構成の見直しとなりました。

Inquiry

こちらからお気軽にご相談ください。

Recruit

私たちは共に働く仲間を集めています。