В настоящее время наиболее эффективное решение, которое я нашел, которое будет работать с любым запросом SOQL через партнерский API, - это сохранение объектов sObject, возвращаемых из исходного QueryResult, и указатель запросов, если страница запрашивается вне текущих результатов.
Для этого требовался уровень поддержки подкачки поверх Salesforce QueryResult.
т.е. Когда запрашивается страница, sObjects может потребоваться от:
- Текущий (кэшированный) QueryResult
- Последующий QueryResult, который можно получить с помощью локатора запроса
- Предыдущий QueryResult
- Некоторая комбинация всех трех.
Если страница охватывает два (или более) QueryResults, необходимо создать искусственный QueryResult со всеми необходимыми записями.
Обновление для выпуска 2012 г. весны
Похоже, что появилась новая функциональность, которая добавит поддержку OFFSET для SOQL. Э.Г.
SELECT Name FROM Merchandise__c WHERE Price__c > 5.0 ORDER BY Name LIMIT 50 OFFSET 100
См. Spring '12, версия Force.com для платформы - добавлено смещение в SOQL (Pilot)
Обновление к лету 2012 года выпуска
Смещение теперь GA (Общая доступность?)