2012-10-17 28 views
3

返回結果的數量/大小是否有限制?例如,我查詢了所有缺陷,並在實數超過600時返回了185。有沒有一種方法可以檢測查詢是否無法獲得所有結果?拉力賽:Java Rest Api:返回結果限制?

編輯:它看起來像我達到了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

在這裏的例子,他們設置頁面大小和限制。可能你受到默認值的限制? http://developer.rallydev.com/help/java-toolkit-rally-rest-api從Javadoc它看起來好像默認值是200和1頁雖然。 – Dan

+0

這有助於丹。它看起來像200是最大頁面大小,並調試我的代碼,這是返回的JsonArray的大小。 –

+0

它看起來像你必須做幾個查詢來獲得每次增加.setStart(int)的所有結果。但我可能會誤解。 – Dan

回答

2

有上QueryRequest一個setLimit()方法,它允許您設置爲從請求返回的最大記錄數。如果未爲請求對象指定此值,則行爲將僅返回一頁數據(200條記錄)。

所以,如果你這樣做:

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

的RESTAPI應自動返回一個較大的多項成果,並將其頁面你。

+0

Integer.MAX_VALUE應該確保你總是得到所有的結果... –

2

雖然設置:

queryRequest.setLimit(Integer.MAX_VALUE);

並照顧很多類型的,它並不適用於所有類型的工作。

例如,類型缺陷迭代似乎回到數千結果在一個單一頁面(單個查詢調用反彈),而其他類型的如用戶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 
+0

它不應該是依賴於類型的 - 它應該處理所有的分頁。如果您發現故事的行爲不正確,請將其報告給Rally支持,以便我們可以提交缺陷並跟蹤此問題。 –

+0

就像一個魅力..感謝 –