I must be missing something :
The REST API supports a resultOffset parameter to fetch records that are beyond maxRecordCount. https://developers.arcgis.com/rest/services-reference/enterprise/query-feature-service-layer-.htm
However, I cannot find this parameter in the 4.19 API https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.ht... nor in the 3.36 API https://developers.arcgis.com/javascript/3/jsapi/query.html.
What is the way to get records with the 4.x version above maxRecordCount from my service ?
Thanks a lot
Solved! Go to Solution.
Since you'll be using Query to retrieve the features, check out the properties available in this class; and related to your question the 'start' parameter: Query.start
This is what I did with 10.5.1 services. There's probably a better way now but I haven't revisited it. The undefined queryObject variable is your original query object.
// Set record limit to match the service being queried
const maxRecordCount = 1000;
// Ensure only one value for outFields (changed at 10.6.1)
// When returnCountOnly and returnDistinctValues are true,
// more than one field specified in outFields is not supported.
let queryForCount = queryObject.clone();
if (queryForCount.outFields && queryForCount.outFields.length > 1) {
queryForCount.outFields = [queryForCount.outFields[0]];
}
let queryTask = new QueryTask({url: "urlForMyLayer"});
queryTask.executeForCount(queryForCount)
.then(function(queryRecordCount) {
if (queryRecordCount) {
// Build array of page steps and use to query the service
// as many times as necessary to retrieve all records.
const pageCount = Math.ceil(queryRecordCount / maxRecordCount);
let resultPages = [];
for (let i = 0; i < pageCount; i++) {
resultPages.push(i * maxRecordCount);
}
return Promise.all(resultPages.map(function(resultPageStart) {
queryObject.start = resultPageStart;
queryObject.num = maxRecordCount;
return queryTask.execute(queryObject);
}));
} else {
// No records to query; send back an Array with one empty FeatureSet
// to mimic the return from Promise.all()
console.log('No records to query');
return Promise.resolve([new FeatureSet()]);
}
})
.then(function(featureSets) {
// Combine all features into the first FeatureSet for return.
let returnFeatureSet = featureSets.pop();
featureSets.forEach(function(featureSet) {
Array.prototype.push.apply(returnFeatureSet.features, featureSet.features);
});
resolve(returnFeatureSet);
})
.catch(function(err) {
reject(err);
});
Since you'll be using Query to retrieve the features, check out the properties available in this class; and related to your question the 'start' parameter: Query.start
Thanks John ! Also it's quite confusing the parameters names are different from those in the REST API. I was indeed missing something !