2009-03-06 33 views
5

Chúng tôi đang viết một công cụ tùy chỉnh sử dụng API khách hàng TFS, để kết nối với TFS, để lấy hạng mục công trình cho một dự án, vvTFS Client API - Truy vấn để nhận các mục công việc được liên kết với một tệp cụ thể?


Chúng tôi đang truy vấn các cửa hàng hạng mục công trình, sử dụng WIQL.

Đặt tên tệp đủ điều kiện, cách dễ nhất để nhận danh sách các mục công việc có bộ thay đổi chứa tệp được chỉ định là gì?

Trả lời

4

Tôi không chắc rằng có một cách dễ dàng để thực hiện truy vấn mà bạn đang yêu cầu bằng API TFS. Tôi biết rằng bạn chắc chắn không thể làm điều đó bằng cách sử dụng WIQL. Tôi nghĩ, bằng cách sử dụng API, bạn sẽ phải lặp qua tất cả các mục công việc - nhận các liên kết changeset trong chúng và sau đó tìm trong mỗi changeset cho đường dẫn tệp mà bạn đang theo sau. Điều này rõ ràng là không sử dụng nhiều.

Tuy nhiên, bạn có thể nhận được dữ liệu đó bằng cách sử dụng cơ sở dữ liệu TFS Data Warehouse. Thông tin này sẽ tụt hậu so với thông tin cửa hàng hoạt động trực tiếp vì kho chỉ được cập nhật định kỳ - nhưng sẽ cho phép bạn theo dõi mọi thứ theo thứ nguyên thư mục/tệp khá dễ dàng.

-2

Nhấp chuột phải vào tệp trong Solution Explorer và chọn Xem lịch sử. Bạn sẽ nhận được một danh sách các thay đổi. Kích đúp vào một changeset sẽ mở ra một hộp thoại, nơi bạn có thể thấy các mục công việc liên quan.

+0

Xin lỗi, tôi đang nói về việc sử dụng WIQL để truy vấn TFS từ một công cụ tùy chỉnh mà chúng tôi đang phát triển. – amazedsaint

2

Đoạn mã nhỏ này sẽ giúp bạn thu thập các mục công việc được cung cấp tên máy chủ TFS và dự án .. Nó cũng lọc ra các mục công việc trong trạng thái đã xóa.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 

    namespace EngineTFSAutomation 
    { 
     class TFSHelper 
     { 
      static public WorkItemCollection QueryWorkItems(string server, string projectname) 
      { 
       TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(server); 
       WorkItemStore workItemStore = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
       Project p = workItemStore.Projects[projectname]; 
       string wiqlQuery = "Select * from Issue where [System.TeamProject] = '"+projectname+"'"; 
       wiqlQuery += " and [System.State] <> 'Deleted'"; 
       wiqlQuery+= " order by ID"; 
       WorkItemCollection witCollection = workItemStore.Query(wiqlQuery); 
       return witCollection; 
      } 
     } 
    } 
+0

Tôi chỉ nhận ra rằng bạn đang tìm kiếm một cách để có được một danh sách tất cả các mục công việc có changesets ảnh hưởng đến một tập tin cụ thể. –

+0

cũng truy vấn WIQL sẽ cung cấp cho bạn tất cả các mục công việc, sau đó tôi giả sử bạn có thể lặp lại từng mục công việc có liên kết. Nếu các liên kết là các changesets bạn có thể thấy nếu các changesets chứa các tập tin trong câu hỏi. Tôi sẽ xem nếu tôi có thể viết một cái gì đó như thế, tôi sẽ sửa lại câu trả lời của tôi sau. –

+0

Tôi đã thử mã mà bạn đã cung cấp và nhận cảnh báo rằng lớp TeamFoundationServer không còn được dùng nữa trong TFS 2010. Tôi đã sử dụng \t 'TfsTeamProjectCollection tfs = new TfsTeamProjectCollection (new Uri (server)); tfs.EnsureAuthenticated(); 'hoạt động, nhưng truy vấn dường như chạy mãi mãi (và không kết thúc). Bạn có gợi ý không? – Matt

1

Đối TFS 2012

Uri tfsUri = new Uri("http://xxx.xx.xx.xxx:8080/tfs2012"); 
    TfsConfigurationServer configurationServer =TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);     
    ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren(new[] {CatalogResourceTypes.ProjectCollection },false,CatalogQueryOptions.None); 

    foreach (CatalogNode collectionNode in collectionNodes) 
    { 
     // Use the InstanceId property to get the team project collection 
     Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]); 
     TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId); 

     WorkItemStore workItemStore = (WorkItemStore)teamProjectCollection.GetService(typeof(WorkItemStore)); 

     string query = "SELECT [System.Id] FROM WorkItems where [Assigned to][email protected]"; 
     WorkItemCollection queryResults = workItemStore.Query(query); 

    } 
0

Đối với TFS 2013 mã sau hoạt động để truy cập vào thông tin dự án TFS:

var tfsUri = new Uri("http://tfs.xxx.xxx.com:8080/tfs/myCollection"); 
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri); 
tfs.EnsureAuthenticated(); 
var iis = tfs.GetService<Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore>(); 
// here access to a particular Project with its name 
var uriWithGuid = iis.Projects["My project name"].Uri; 
Các vấn đề liên quan