Есть ли эффективный способ постранично просматривать результаты запроса SOQL, не возвращая все результаты запроса, а затем отбрасывая большинство из них?

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

5
Daniel Ballinger 2 Окт 2009 в 05:34

2 ответа

Лучший ответ

В настоящее время наиболее эффективным решением, которое я нашел, которое будет работать с любым запросом SOQL через партнерский API, является сохранение объектов sObjects, возвращаемых из исходного QueryResult и локатора запросов, в случае, если страница запрашивается вне текущих результатов.

Для этого требовался уровень поддержки разбиения по страницам поверх Salesforce QueryResult.

Т.е. При запросе страницы sObjects могут потребоваться от:

  • Текущий (кешированный) QueryResult
  • Последующий QueryResult, который можно получить с помощью локатора запросов.
  • Предыдущий QueryResult
  • Какая-то комбинация всех трех.

Если страница охватывает два (или более) QueryResult, необходимо будет создать искусственный 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 в SOQL (пилотный)

Обновление для выпуска летом 2012 г.

OFFSET теперь называется GA (общедоступно?)

8
Daniel Ballinger 28 Май 2012 в 03:12

Вы можете использовать поле авто-нумерации для разбивки на страницы на стороне сервера. это поле можно использовать после предложения 'order by', оно может действовать как поле индекса.

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

2
Hui 25 Май 2010 в 06:31