В настоящее время наиболее эффективным решением, которое я нашел, которое будет работать с любым SOQL-запросом через API-интерфейс партнера, является сохранение объектов sObjects, возвращаемых из исходного QueryResult, и локатор запросов, если страница запрашивается за пределами текущих результатов.
Для этого необходим уровень поддержки поискового вызова поверх Salesforce QueryResult.
I.e. Когда страница запрашивается 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 Platform Release - OFFSET added to SOQL (Pilot)
Обновление для лета 2012 Release
OFFSET is now GA (General Availability?)
На идеи сайта Salesforce есть обсуждение, используя поле Id в сочетании с упорядочивать и ограничивать функциональность SOQL для просмотра результатов. См. Http://ideas.salesforce.com/article/show/10089030/SOQL_Request_allow_greaterthan_lessthan_WHERE_conditions_for_Id_fields –
Это, вероятно, приведет к плохой карме с моей стороны, но я выяснил, как сделать разбиение на страницы поверх общих запросов SOQL. Я бы поделился кодом, но он является частью коммерческого продукта. Лучшее, что я могу сделать, это поделиться ссылкой, если кому-то интересно - http://www.fishofprey.com/2009/10/soql-pagination-for-salesforce-api.html. –