SOQL Pagination для запросов Salesforce API - PullRequest
5 голосов
/ 02 октября 2009

Существует ли эффективный способ пролистывания результатов запроса SOQL без возврата всех результатов запроса и последующего удаления большинства из них?

В качестве примера я хотел бы иметь возможность просматривать весь список контактов, отображая 10 записей одновременно. У меня нет необходимости сортировать по конкретному полю.

Ответы [ 2 ]

8 голосов
/ 01 июня 2010

В настоящее время наиболее эффективное решение, которое я нашел, которое будет работать с любым запросом 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 (Общая доступность?)

2 голосов
/ 25 мая 2010

вы можете использовать автонумерацию для разбивки на страницы на стороне сервера. это поле может использоваться после предложения order by, оно может выступать в качестве индексного поля.

Я сделал нумерацию страниц, как на вашей стороне. но у меня есть другая проблема, я не могу сделать сортировку на стороне сервера в то же время. потому что сортировка и разбиение на страницы должны добавлять столбец после предложения order by.

...