2009-10-02 5 views
5

Esiste un modo efficace per sfogliare i risultati da una query SOQL senza riportare tutti i risultati della query e quindi scartarne la maggioranza?Impaginazione SOQL per query API Salesforce

Ad esempio, mi piacerebbe essere in grado di sfogliare l'elenco completo dei contatti che mostra 10 record alla volta. Non ho bisogno di ordinare da un campo particolare.

+0

Sul sito Salesforce Ideas si discute di utilizzare il campo ID in collaborazione con il ordina e limita la funzionalità SOQL per sfogliare i risultati. Vedi http://ideas.salesforce.com/article/show/10089030/SOQL_Request_allow_greaterthan_lessthan_WHERE_conditions_for_Id_fields –

+0

Questo probabilmente porterà a un brutto karma da parte mia, ma ho trovato un modo per fare l'impaginazione oltre alle query SOQL generiche. Condividerei il codice, ma fa parte di un prodotto commerciale. Il meglio che posso fare è condividere un link se qualcuno è interessato - http://www.fishofprey.com/2009/10/soql-pagination-for-salesforce-api.html. –

risposta

7

Attualmente la soluzione più efficiente che ho trovato che funzionerà con qualsiasi query SOQL tramite l'API del partner è quella di mantenere gli oggetti SObjects restituiti dal QueryResult iniziale e il localizzatore di query in caso di richiesta di una pagina al di fuori dei risultati correnti.

Ciò ha richiesto un livello di supporto di paging in cima a Salesforce QueryResult.

I.e. Quando viene richiesta una pagina sObjects può essere richiesto da:

  • La corrente (cache) QueryResult
  • Un QueryResult successivo che può essere recuperata utilizzando la query localizzatore
  • Una prima QueryResult
  • una combinazione di tutti tre.

Se la pagina si estende su due (o più) QueryResults, è necessario creare un QueryResult artificiale con tutti i record richiesti.

Aggiornamento per la primavera 2012 di uscita

Sembra che ci sia una nuova funzionalità venire che aggiungerà il supporto a OFFSET SOQL. Per esempio.

SELECT Name FROM Merchandise__c WHERE Price__c > 5.0 ORDER BY Name LIMIT 50 OFFSET 100 

Vedi Spring '12 Force.com Platform Release - OFFSET added to SOQL (Pilot)

Aggiornamento per l'estate 2012 di rilascio

OFFSET is now GA (disponibilità generale?)

2

è possibile utilizzare un numero automatico archiviato per eseguire l'impaginazione sul lato server. questo campo può essere usato dopo la clausola 'order by', può fungere da campo indice.

Ho impaginato come quello che si schiera. ma ho avuto un altro problema, non riesco a fare l'ordinamento sul lato server allo stesso tempo. poiché ordinamento e impaginazione richiedono entrambi aggiungere una colonna dopo la clausola 'ordina per'.