Salesforce 分页

本文介绍了在Salesforce中进行分页的两种方法:使用SQL的LIMIT和OFFSET实现分页,以及通过StandardSetController利用标准控制器进行分页。通过具体的例子展示了如何操作,并分享了在实际应用过程中的体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章已经生成可运行项目,

前言

做数据展示难免会碰到分页的问题。在Salesforce中,数据分页不是很困难的事情,笔者在这里抽出来单独聊一下。

介绍

在这里笔者介绍几种常用的方式:
  1. SQL分页 — 采用LIMIT和OFFSET 
  2. StandardSetController 分页 — 采用标准控制器
其中SQL分页的方式直接简单,但是OFFSET受到限制,最大值为2000。话说这个限制好坑的...;StandardSetController 分页不会有2000的限制。所以在接口方案中我们可以采用这一种方式来避免限制问题。并且这种方式在常用的Controller中也是可以去使用的。

例子

下面是一个抽象的Service:
public class PagingService {

    private ApexPages.StandardSetController ssc;
    
    public PagingService(String sql) {
        this.ssc = new ApexPages.StandardSetController(Database.getQueryLocator(sql));
    }
    
    /**
     *@Function: 首页
     *
     */
    public Map<String, Object> first() {
        this.ssc.first();
        return this.getData();
    }
    
    /**
     *@Function: 尾页
     *
     */
    public Map<String, Object> last() {
        this.ssc.last();
        return this.getData();
    }
    
    /**
     *@Function: 下一页
     *
     */
    public Map<String, Object> next() {
        this.ssc.next();
        return this.getData();
    }
    
    /**
     *@Function: 上一页
     *
     */
    public Map<String, Object> previous() {
        this.ssc.previous();
        return this.getData();
    }
    
    /**
     *@Function: 根据当前页数获取数据
     *
     */
    private Map<String, Object> getData() {
        List<Object> data = this.ssc.getRecords();
        Map<String, Object> result = new Map<String, Object>();
        result.put('currentPage', this.ssc.getPageNumber());
        result.put('pageSize', this.ssc.getPageSize());
        result.put('actualSize', data.size());
        result.put('data', data);
        result.put('hasNext', this.ssc.getHasNext());
        result.put('hasPrevious', this.ssc.getHasPrevious());
        
        return result;
    }
    
    /**
     *@Function: 设置当前页数
     *
     */
    public void setPageNumber(Integer pageNumber) {
        this.ssc.setPageNumber(pageNumber);
    }
    
    /**
     *@Function: 设置当前每页数据量
     *
     */
    public void setPageSize(Integer pageSize) {
        this.ssc.setPageSize(pageSize);
    }
    
    /**
     *@Function: 获取指定页数的数据
     *
     */
    public Map<String, Object> goto(Integer pageNumber) {
        this.setPageNumber(pageNumber);
        return this.getData();
    }
}

在这里笔者枚举了常用的一些方法,有额外需要的朋友可以在getData中添加需要的数据列。

心得

Salesforce对分页的封装还是比较好的,常用的基本都有。不过对于Ajax请求的分页,前台采用actionFunction的方式会好一些。
采用SQL分页时使用ORDER BY关键字是较好的选择,这样就会严格的按照序列返回,否则可能会导致和预期不相符。
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值