返回的结果的数量/大小是否有限制?例如,我查询了所有缺陷,当实数高于600时,我得到了185.有没有办法可以检测查询是否无法获得所有结果?
编辑:看起来我的页面限制大小为200.有谁知道如何制作循环以获得下一组结果?
这是我的代码:
String rallyProjectOid = getRallyProjectOid(rallyApi, rallyProjectName);
// Get the list of Rally defects for the project
QueryRequest defectRequest = new QueryRequest("defect");
defectRequest.setFetch(new Fetch("Project", "LastUpdateDate", "FormattedId", "SubmittedBy", "Owner"));
defectRequest.setProject(rallyProjectOid);
defectRequest.setQueryFilter(new QueryFilter("LastUpdateDate", ">", timestamp));
QueryResponse projectDefects = rallyApi.query(defectRequest);
答案 0 :(得分:2)
QueryRequest上有一个setLimit()方法,允许您设置从请求返回的最大记录数。如果没有为请求对象指定此值,则行为将仅返回一页数据(200条记录)。
所以,如果你这样做:
int queryLimit = 4000;
defectRequest.setLimit(queryLimit);
RestApi应返回大量结果,并自动为您分页。
答案 1 :(得分:2)
虽然设置:
queryRequest.setLimit(Integer.MAX_VALUE);
确实处理了许多类型,它并不适用于所有类型。
例如,类型缺陷和迭代似乎在单个页面中返回数千个结果(对Rally进行单个查询调用),而其他类型如用户和 HierarchicalRequirement 忽略了该限制,而是强迫我使用分页(设置Start然后重新查询)来获取所有结果。
以下是我如何处理两者的示例:
// NOTE : no pagination needed for defect or iteration, but required for hierarchicalrequirement or user
QueryRequest queryRequest = new QueryRequest("hierarchicalrequirement");
queryRequest.setFetch(new Fetch(new String[] {"ObjectID", "CreationDate", "LastUpdateDate", "FormattedId"}));
queryRequest.setQueryFilter(new QueryFilter("CreationDate", ">=", "2013-01-01T07:00:00.000Z"));
queryRequest.setLimit(Integer.MAX_VALUE);
int responseTotalResultsCount = Integer.MAX_VALUE;// So we enter while loop first time
int actualResultsProcessedSoFar = 0;
// Handle both cases
while ((queryRequest.getStart()) < responseTotalResultsCount && actualResultsProcessedSoFar < responseTotalResultsCount) {
QueryResponse queryResponse = restApi.query(queryRequest);
responseTotalResultsCount = queryResponse.getTotalResultCount();// Set to correct value here
JsonArray results = queryResponse.getResults();
if (results.size() == 0) {
return;
} else {
for (JsonElement jsonElement : queryResponse.getResults()) {
// Process this particular JsonElement here
// If no pagination required, this counter lets us exit while loop
actualResultsProcessedSoFar++;
}// end for loop
}// end if (results.size() == 0)
// Setting this to handle pagination, if required
queryRequest.setStart(queryRequest.getStart() + queryRequest.getPageSize());
} // end while loop
答案 2 :(得分:0)
截至2019年,他们将其限制为2000个结果,与设置限制的数量无关。对此没有任何文档。我通过测试和设置页面并达到最大数量发现了这一点。
这适用于Java API。