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.

Foi útil?

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'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top