StandardSetControllerクラス
複数のレコードを分割して管理できるクラス。
分割セットを自由に切り替えられるので、ページネーションによく使われるイメージ。
基本的な使い方
//1. インスタンス作成
List<Account> accList = [SELECT Name FROM Account];
Apexpages.StandardSetController ssc = new Apexpages.StandardSetController(accList);
//2. インスタンスの状態を変える
ssc.setPageSize(5); //1セットに格納するレコード数を指定
ssc.Next(); //次のレコードセットに切替
//3. インスタンスから値を取得する
List<Account> accResults = ssc.getRecords(); //現在のレコードセットを取得
実際は↑みたいな書き方をする場面は少ない。
実践的なサンプルコードはこちら
インスタンス化のパターン
1.sObjectのリストを渡す
//公式docsより引用
ApexPages.StandardSetController ssc = new ApexPages.StandardSetController(accountList);
2.クエリロケータ(Database.getQueryLocator)の返り値を渡す
//公式docsより引用
new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Name,CloseDate FROM Opportunity]));
1と2の違い
レコード数の上限(10000)を超えた時の動きが違う。
sObjectのリスト:上限を超えたら切り捨てられる
クエリロケータ:エラーが起こる(Limit Exception)
おまけ:インスタンスをSystem.debugで出力してみる
public with sharing class pagination { public pagination() { List<Account> aList = [SELECT id FROM Account]; Apexpages.StandardSetController ssc = new Apexpages.StandardSetController(aList); System.debug(Logginglevel.WARN,ssc); } }
結果
ApexPages.StandardSetController[Account]