binxie
2023-06-26 1b3fb93f787b8b546a307bf063183f5295d183f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public with sharing class PaginatedListControllerLwc {
    @AuraEnabled
    public static PaginatedAccounts getAccountsPaginated(Integer pageSize, Integer pageToken, String sortField, String sortOrder) {
        system.debug('init soql'+ String.valueOf(pageSize)  + String.valueof(pageToken));
        PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
        String paginatedQuery = 'SELECT Name, Type, Phone, NumberOfEmployees, Owner.Name'
                 + ' FROM Account'
                 + ' WITH SECURITY_ENFORCED';
        system.debug('sort field:'+sortField + '--'+sortOrder);
        if(sortField != null && sortOrder !=null) {
            paginatedQuery += ' ORDER BY '+ sortField +' '+ sortOrder;
        }
        paginatedQuery += ' LIMIT ' + pageSize;
        paginatedQuery += ' OFFSET ' + pageToken;
        system.debug('SOQL:' + paginatedQuery);
        paginatedAccounts.records = Database.query(paginatedQuery);
        Integer totalCount = [SELECT COUNT() FROM Account];
 
        paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount) ? pageToken + pageSize : null;
        paginatedAccounts.recordStart = pageToken + 1;
        paginatedAccounts.pageNumber = pageToken/pageSize + 1;
        Integer recordEnd = pageSize * paginatedAccounts.pageNumber;
        paginatedAccounts.recordEnd = totalCount >= recordEnd ? recordEnd : totalCount;
        paginatedAccounts.totalRecords = totalCount;
        return paginatedAccounts;
    }
 
    public class PaginatedAccounts {
        @AuraEnabled
        public List<Account> records;
        @AuraEnabled
        public Integer nextPageToken;
        @AuraEnabled
        public Integer pageNumber {get;set;}
        @AuraEnabled
        public Integer totalRecords {get;set;}
        @AuraEnabled
        public Integer recordStart {get;set;}
        @AuraEnabled
        public Integer recordEnd {get;set;}        
    }
}