Rally:JavaRESTAPI:返回结果的限制?
返回结果的数量/大小是否有限制?例如,我查询了所有缺陷,得到了185个,当实数大于600时。是否有一种方法可以检测查询是否无法获得所有结果 编辑:看起来我达到了页面大小限制200。有人知道如何创建循环以获得下一组结果吗 这是我的密码:Rally:JavaRESTAPI:返回结果的限制?,java,api,rest,rally,Java,Api,Rest,Rally,返回结果的数量/大小是否有限制?例如,我查询了所有缺陷,得到了185个,当实数大于600时。是否有一种方法可以检测查询是否无法获得所有结果 编辑:看起来我达到了页面大小限制200。有人知道如何创建循环以获得下一组结果吗 这是我的密码: String rallyProjectOid = getRallyProjectOid(rallyApi, rallyProjectName); // Get the list of Rally defects for the project
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);
QueryRequest上有一个setLimit()方法,允许您设置从请求返回的最大记录数。如果未为请求对象指定此值,则行为将仅返回一页数据(200条记录)
因此,如果你这样做:
int queryLimit = 4000;
defectRequest.setLimit(queryLimit);
RestApi应该返回更多的结果,并自动为您分页。尽管设置:
queryRequest.setLimit(整数最大值)代码>
它可以处理许多类型,但并不适用于所有类型
例如,类型Defect和Iteration似乎在一个页面中返回数千个结果(对Rally的一个查询调用),而其他类型(如User和HierarchicalRequirement)忽略了该限制,而是强制我使用分页(设置开始,然后重新查询)来获取所有结果
以下是我如何处理这两个问题的示例:
// 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
//注意:缺陷或迭代不需要分页,但分层需求或用户需要分页
QueryRequest QueryRequest=新的QueryRequest(“层次要求”);
setFetch(新的Fetch(新字符串[]{“ObjectID”、“CreationDate”、“LastUpdateDate”、“FormattedId”}));
queryRequest.setQueryFilter(新的QueryFilter(“CreationDate”、“>=”、“2013-01-01T07:00:00.000Z”);
queryRequest.setLimit(整数最大值);
int responseTotalResultCount=整数。最大值;//所以我们第一次进入while循环
int actualResultsProcessedSoFar=0;
//处理这两种情况
while((queryRequest.getStart())
从2019年开始,他们将结果限制在2000个,无论您设置了多少限制。没有这方面的文件。我通过测试和设置页面和最大数量发现了这一点
这适用于JavaAPI 在这里的示例中,它们设置了页面大小和限制。您可能受到默认值的限制?从Javadoc看来,默认值是200和1页,这对Dan很有帮助。看起来200是最大页面大小,而调试我的代码,这是返回的JsonArray的大小。看起来每次增加.setStart(int)时,您都必须执行几次查询才能获得所有结果。不过我可能弄错了。projectDefects.getTotalResultSize()
给了您什么?也有200个?大概有600个。这是决定结果是否受页面大小限制的关键因素。它不应该依赖于类型-它应该处理相同的所有分页。如果您发现故事的行为不正确,请将此报告给Rally support,以便我们可以提交缺陷并跟踪此问题。