Rally:Java Rest Api:返回结果限制?

时间:2012-10-17 21:24:58

标签: java api rest rally

返回的结果的数量/大小是否有限制?例如,我查询了所有缺陷,当实数高于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);

3 个答案:

答案 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。