5

返回结果的数量/大小是否有限制?例如,我查询了所有缺陷并返回了 185,而实际数量在 600 以上。有没有办法可以检测查询是否无法获得所有结果?

编辑:看起来我达到了 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);
4

3 回答 3

4

虽然设置:

queryRequest.setLimit(Integer.MAX_VALUE);

确实照顾许多类型,它不适用于所有类型。

例如,类型DefectIteration似乎在单个页面中返回数千个结果(对 Rally 的单个查询调用),而其他类型(例如UserHierarchicalRequirement )忽略了该限制,而是迫使我使用分页(设置 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
于 2013-04-11T16:57:21.587 回答
2

QueryRequest 上有一个 setLimit() 方法,允许您设置从请求返回的最大记录数。如果未为请求对象指定此值,则行为将仅返回一页数据(200 条记录)。

所以如果你这样做:

   int queryLimit = 4000;
   defectRequest.setLimit(queryLimit);

RestApi 应该返回大量结果,并自动为您分页。

于 2012-10-17T22:23:59.383 回答
0

截至 2019 年,他们将其限制为 2000 个结果,无论您设置多少限制。没有这方面的文档。我通过测试和设置页面以及最大数量发现了这一点。

这适用于 Java API。

于 2019-09-24T16:00:54.163 回答