2009-10-02 8 views
5

¿Existe una manera eficiente de repasar los resultados de una consulta SOQL sin recuperar todos los resultados de la consulta y descartar la mayoría de ellos?SOQL Paginación para las consultas de la API de Salesforce

Como ejemplo, me gustaría poder recorrer la lista completa de contactos que muestra 10 registros a la vez. No tengo la necesidad de ordenar por ningún campo en particular.

+0

En el sitio Salesforce Ideas hay una discusión de utilizar el campo ID en conjunto con el ordene y limite la funcionalidad de SOQL para recorrer los resultados. Ver http://ideas.salesforce.com/article/show/10089030/SOQL_Request_allow_greaterthan_lessthan_WHERE_conditions_for_Id_fields –

+0

Esto probablemente conduzca a un mal karma de mi parte, pero encontré una forma de hacer paginación sobre las consultas genéricas de SOQL. Compartiría el código, pero es parte de un producto comercial. Lo mejor que puedo hacer es compartir un enlace si alguien está interesado: http://www.fishofprey.com/2009/10/soql-pagination-for-salesforce-api.html. –

Respuesta

7

Actualmente la solución más eficiente que he encontrado que funcionará con cualquier consulta SOQL a través de la API de pareja es que persistan los sObjects volvió del QueryResult inicial y el localizador de consulta en caso que se solicita una página fuera de los resultados actuales.

Esto requirió un nivel de soporte de paginación en la parte superior de Salesforce QueryResult.

I.e. Cuando se solicita una página sObjects pueden ser requeridos a partir de:

  • La corriente (en caché) QueryResult
  • A QueryResult posterior que puede ser exagerado usando el localizador de consulta
  • A QueryResult antes
  • alguna combinación de los Tres.

Si la página abarca dos (o más) QueryResults será necesario crear un QueryResult artificial con todos los registros requeridos.

actualización para la primavera 2012 Release

Parece que hay una nueva funcionalidad que viene añadir soporte OFFSET para SOQL. P.ej.

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

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

actualización para el verano de 2012 Release

OFFSET is now GA (disponibilidad general?)

2

puede utilizar un número automático archivado para hacer la paginación en el lado del servidor. este campo se puede usar después de la cláusula 'ordenar por', puede actuar como un campo de índice.

He hecho la paginación como si fuera tu lado. pero tengo otro problema, no puedo ordenar en el lado del servidor al mismo tiempo. porque el ordenamiento y la paginación necesitan agregar columnas después de la cláusula 'ordenar por'.

Cuestiones relacionadas