Para obter largas quantidades de registro do Sales Force via API, que em geral tem o limite de 500 registros por requisição, assim como limite máximo de offset em 2000, é necessário utilizar outros recursos disponibilizados na própria API, que não diretamente o método query, utilizado para fazer requisições.
Para isto é necessário combinar o método query com o método queryMore e o cursor queryLocator, que representa o cursor no servidor do Sales Force que mantém o rastro para a posição corrente da localização atual do conjunto de registros obtidos.
Abaixo uma utilização hipotética utilizando php para demonstrar como obter todos os registros do object Account do Sales Force
$query = "
SELECT
Account.Id
Account.Name
FROM Account
ORDER BY Account.Name
";
$response = $sf->query($query);
while(true){
if(!
(
$response
&&
property_exists($response,'records')
)
){
break;
}
$Record = $response->records;
if( count($Record) <=0 ){
break;
}
foreach($Record as $o){
$name = (property_exists($o,"Name")) ? $o->Name : null;
print $name;
}
if(!$response->queryLocator){
break;
}
$response = $sf->queryMore($response->queryLocator);
}



