SOQL Paginação para consultas da API do Salesforce
-
19-09-2019 - |
Pergunta
Existe uma maneira eficiente de página através de resultados de uma consulta SOQL sem trazer todos os resultados da consulta e, em seguida, descartar a maioria deles?
Como exemplo, eu gostaria de ser capaz de organizar a lista completa de contatos mostrando 10 registros por vez. Não tenho a necessidade de classificar por nenhum campo em particular.
Solução
Atualmente, a solução mais eficiente que encontrei que funcionará com qualquer consulta SOQL por meio da API do parceiro é persistir que os Sobjects retornados do QueryResult inicial e do localizador de consulta, caso uma página seja solicitada fora dos resultados atuais.
Isso exigiu um nível de suporte de paginação no topo do Salesforce QueryResult.
Ou seja, quando uma página é solicitada Sobjects pode ser necessária de:
- O atual (em cache) quereja
- Uma queixa subsequente que pode ser buscada usando o localizador de consulta
- Um QueryResult anterior
- Alguma combinação dos três.
Se a página abranger duas (ou mais) consultas, um consultivo artificial precisará ser criado com todos os registros necessários.
Atualização para o lançamento da primavera de 2012
Parece que há uma nova funcionalidade que adicionará suporte de deslocamento ao SOQL. Por exemplo
SELECT Name FROM Merchandise__c WHERE Price__c > 5.0 ORDER BY Name LIMIT 50 OFFSET 100
Ver Spring '12 Force.com Lançamento da plataforma - Offset adicionado ao SOQL (piloto)
Atualização para lançamento do verão de 2012
Offset agora é GA (Disponibilidade Geral?)
Outras dicas
Você pode usar um número automático arquivado para fazer a paginação no lado do servidor. Esse campo pode ser usado após a cláusula 'Order by', ele pode atuar como um campo de índice.
Eu fiz a paginação como o seu lado. Mas tive outro problema, não consigo classificar no lado do servidor ao mesmo tempo. Porque o tipo e a paginação precisam adicionar coluna após a cláusula 'Order by'.