2012-02-13 16 views
37

Tôi đang cố gắng truy vấn một dự án nhóm trong chính TfsTeamProjectCollection, trong đó có tổng cộng 194 dự án nhóm. Tôi biết chính xác cách nhận mã số WorkItem theo số từ WorkItemStore. Vấn đề là, bằng cách làm điều này, các tìm kiếm API trong TẤT CẢ của các dự án trong bộ sưu tập và truy vấn mất khoảng một phút. Đây là cách quá chậm, phải có một cách để truy vấn các mục công việc trực tiếp từ một dự án nhóm đơn lẻ? Đây là mã tôi có:TFS API - Cách tìm nạp (các) mục công việc từ Dự án nhóm cụ thể

private Uri collectionUri; 
    private TfsTeamProjectCollection projectCollection; 
    private WorkItemStore workItemStore; 

    public Project GetTeamProject() 
    { 
     projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri); 

     workItemStore = projectCollection.GetService<WorkItemStore>(); 
     Project teamProject = workItemStore.Projects[TFS_PROJECT_KEY]; 
     return teamProject; 
    } 

Bây giờ tôi có dự án nhóm theo ID, hoặc tôi có thể truy vấn các mục công việc theo ID hoặc nhận tất cả các mục công việc trong dự án này?

+0

FYI, thoát khỏi mà cố gắng/khối catch. Nó không làm gì cả. –

+0

nó được sử dụng để bắt một nullpointerexception bởi vì phương pháp sẽ có một id dự án như một tham số, nhưng tôi đã thay đổi nó. –

+1

Tất cả những gì bạn đã làm là trả lại ngoại lệ, cũng giống như không bắt được nó. Bạn cũng không bao giờ nên bắt NullReferenceException, vì nó luôn luôn có nghĩa là một lỗi lập trình. –

Trả lời

15

Có lẽ hiệu quả nhất đối với use a query to find the workitems mà bạn quan tâm. Bạn có thể thêm dự án Where project = '@Project' vào truy vấn để giới hạn phạm vi cho dự án đó. Trước tiên, hãy gọi BeginQuery và sau đó là EndQuery bạn sẽ nhận được một bộ sưu tập workitem chỉ cho các mục bạn đang tìm kiếm.

Cách dễ nhất để truy vấn wql bắt buộc là tạo truy vấn trong Team Explorer, sau đó sử dụng tệp-> lưu dưới dạng (trong chế độ chỉnh sửa) để lưu tệp vào tệp. Mở tệp đó trong Notepad để sao chép truy vấn ra khỏi đó.

Hoặc bạn có thể sử dụng trực tiếp WorkItemStore.Query method để đạt được điều tương tự.

+3

Việc tiết kiệm truy vấn wql là một mẹo tuyệt vời. Dễ dàng hơn nhiều để truy vấn của bạn ngay khi sử dụng GUI của Team Explorer. Bạn đã lưu cho tôi những giờ rối tung về :-) – DaveF

34

Bạn có thể thử một cái gì đó như thế này để có được tất cả Wis trong teamProject:

WorkItemCollection workItemCollection = workItemStore.Query(
    " SELECT [System.Id], [System.WorkItemType],"+  
    " [System.State], [System.AssignedTo], [System.Title] "+ 
    " FROM WorkItems " + 
    " WHERE [System.TeamProject] = '" + teamProject.Name + 
    "' ORDER BY [System.WorkItemType], [System.Id]"); 

Và điều này để có được một ID WorkItem cụ thể:

WorkItem workItem = workItemStore.GetWorkItem(555); 
+0

Bạn có biết tham chiếu gì để thêm vào dự án để truy vấn được nhận dạng không? Bởi vì tôi đã sử dụng 'Microsoft.TeamFoundation.Client' và' Microsoft.TeamFoundation.WorkItemTracking.Client' và tôi gặp lỗi cho mọi thứ trong tham số 'workItemStore.Query()' –

+0

+1 cho câu trả lời này nếu bạn có thể giúp :) –

+0

Nevermind, nó hoạt động ... Cảm ơn –