Yo Blog

カメラとドライブが趣味のSEが書く雑記ブログ

【Salesforce 認定 Platform デベロッパー対策 #02】ガバナ制限について

スポンサーリンク

Salesforceで、必ずぶち当たる壁「ガバナ制限」。
もちろん、Platformデベロッパー試験でも、ガバナ制限も出題されるでしょう。

ガバナ制限とは

マルチテナント環境で実行されるApexが、共有リソースを独占しないように様々な制限事項があります。これがガバナ制限。

ガバナ制限の単位は2つあります。

トランザクション

トランザクションについての参考サイト

developer.salesforce.com

developer.salesforce.com

ポイント

  • DML操作が正常に完了するまでの一連の操作の単位
  • トランザクション境界から外部コードへのコールにも適用される
  • エラーが発生した場合は、すべてのデータベース変更はロールバックされる
  • savepointを設定できる
    • エラー発生時、savepoint後を破棄し、savepoint生成時の状況に復元する
    • 設定したsavepointもガバナ制限にカウントされる

ガバナ制限の例

参考サイト

developer.salesforce.com

ポイント

  • 個々のsObjectではなく、sObjectリストに対してDMLコールを行うと、DMLステート面と制限に達する可能性は低くなる
  • forループ内でSOQLクエリを置くと、クエリがループ回数分実行されるため、SOQLクエリ制限を越える可能性が高くなる
  • SOQL for ループを使用すると、ヒープサイズ制限を回避できる
    • nullを入れたり、リストを削除する回避方法もある

ガバナ制限値にまつわるクラス

developer.salesforce.com

Limitsクラス

ガバナ制限にまつわる、メソッドのコール数やヒープサイズの残りの量などを返却してくれるメソッド。

参考サイト

developer.salesforce.com

主なメソッド

一部抜粋

  • getDMLRows()
  • getLimitDMLRows()
    • DML ステートメント、database.EmptyRecycleBin メソッド、および他のメソッドなど、DML 制限にカウントされるすべてのステートメントを使用して処理できるレコードの合計数を返します。
  • getHeapSize()
    • ヒープに使用されたメモリのおおよその容量 (バイト単位) を返します。
  • getLimitHeapSize()
    • ヒープに使用できるメモリの合計容量 (バイト単位) を返します
  • getQueries()
    • 発行された SOQL クエリの数を返します。
  • getLimitQueries()
    • 発行できる SOQL クエリの合計数を返します。

Testクラス

ガバナ制限のテストもできる

主なメソッド

  • startTestメソッド
  • stopTestメソッド

developer.salesforce.com