3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

StandardSetControllerクラスとは

Last updated at Posted at 2021-12-30

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]

参考文献

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?