2016-12-15 27 views
1

在此提到:Using the TFS REST API to get all work items in an iteration ,我已經與VS文檔在https://www.visualstudio.com/en-us/docs/integrate/api/wit/queries#get-a-query-or-folder將TFS REST API與存儲查詢一起使用時是否已編譯?

工作我們嘗試基於TFS的服務器上存儲的查詢更改日誌文本文件。在REST API之前,我們使用VS 2012/2013 TFS庫,但現在正在轉向REST。

現在通過閱讀我看到查詢工作項目時,我應該爲最多做到這一點的文檔200的工作項(https://www.visualstudio.com/en-us/docs/integrate/api/wit/wiql#get-work-items

如果我理解正確的文件,然後我需要一個存儲查詢6次HTTP的查詢返回607個工作項目。

  1. 按名稱獲取存儲查詢 - > http://server/Project/_apis/wit/queries/Shared%20Queries/Change%20Log?api-version=1.0&$expand=all,它返回WIQL網址查詢
  2. 查詢WIQL - >返回607個IDS
  3. 前200個工作項目創建一個工作項查詢
  4. 下一個200
  5. 用於下一200
  6. 未來7

然後按照查詢號提供的顯示列配置組裝這些工作項並對其進行格式化。 1.

通過測試200工作項目的限制,我發現on-premise安裝實際上允許更多的工作項目。目前,工作項目的最大數量由GET請求長度2096(在TFS 2017上測試)定義。

這是確認如何執行存儲查詢的方法嗎?

回答

3

是的,這是正確的做法。

簡單的C#代碼發送REST API:

String MyURI = "[REST API URL]"; 
      WebRequest WReq = WebRequest.Create(MyURI); 
      WReq.Credentials = 
       new NetworkCredential("[user name]", "[password]", "[domain]"); 

      WebResponse response = WReq.GetResponse(); 
      Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
      // Get the stream containing content returned by the server. 
      Stream dataStream = response.GetResponseStream(); 
      // Open the stream using a StreamReader for easy access. 
      StreamReader reader = new StreamReader(dataStream); 
      // Read the content. 
      string responseFromServer = reader.ReadToEnd(); 
      // Display the content. 
      Console.WriteLine(responseFromServer); 

在另一方面,你可以run the query with WIQL string

關於獲取存儲查詢的WIQL字符串,可以使用TFS .net客戶端API。

NetworkCredential cred = new NetworkCredential("[user name]", "[password]", "[domain]"); 
      TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("[collection URL"), cred); 
      tpc.EnsureAuthenticated(); 
      WorkItemStore wis = tpc.GetService(typeof(WorkItemStore)) as WorkItemStore; 
QueryHierarchy queryRoot = wis.Projects["[team project]"].QueryHierarchy; 
      QueryFolder queryFolder = queryRoot["Shared Queries"] as QueryFolder; 
      QueryDefinition qd = queryFolder["PBIS"] as QueryDefinition; 
      string tt = qd.QueryText; 

關於與Extended Client package電話查詢REST API,你可以參考這個簡單的代碼:

var u = new Uri("[collection url]"); 
VssCredentials c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("v-stache", "[email protected]", "fareast"))); 
      var connection = new VssConnection(u, c); 
      var workitemClient = connection.GetClient<WorkItemTrackingHttpClient>(); 
var result = workitemClient.QueryByWiqlAsync(new Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.Wiql() { Query = "select[System.Id] from WorkItems where [System.TeamProject] = 'ScrumStarain2' and [System.WorkItemType] = 'Product Backlog Item' and [System.State] <> ''" }, "ScrumStarain2").Result; 
+0

我們使用TFS .NET客戶端API,但它似乎不再可用在2015年。我們與2015年的CI只建立代碼,但最終會丟失衛星組件。 – Samuel

+0

@Samuel TFS客戶端API仍然適用於2015年,您可以爲您的問題打開新的線程。 –

+0

@samuel,2015年的客戶端API作爲「Team Foundation Server擴展API」在Nuget上提供......只需將其添加到您的項目中即可。 –

相關問題