2011-02-07 34 views
5

Chúng tôi có quy trình xây dựng tùy chỉnh (không sử dụng MS Build) và trong quá trình đó, tôi thêm bản dựng "giả mạo" vào danh sách xây dựng toàn cầu. Lý do tôi làm điều đó là để bạn có thể chọn bản dựng cho một mục công việc cụ thể (được tìm thấy trong bản dựng). Chúng tôi có một lĩnh vực tùy chỉnh, xây dựng bao gồm, được dự định để hiển thị mà xây dựng mà mục công việc đã được cố định in Tôi đang gặp khó khăn trong việc tìm ra cách cập nhật trường này theo lập trình. Ý tưởng là tôi sẽ có một ứng dụng nhỏ thực hiện điều này mà tôi sẽ gọi trong quá trình xây dựng, tìm tất cả các mục công việc kể từ lần xây dựng cuối cùng, sau đó cập nhật trường cho các mục công việc đó. Bất kỳ ý tưởng?Cách cập nhật trường tùy chỉnh TFS theo lập trình

+0

Bạn có thể cụ thể hơn về phần danh sách xây dựng toàn cầu không. Bạn đang sử dụng một mẫu xây dựng tùy chỉnh (trong Windows Workflow Foundation)? Bạn đang thêm vào một biến hoặc đối số trong mẫu đó? – LWoodyiii

+0

Xin lỗi, tôi đang sử dụng danh sách toàn cầu trong TFS. Tôi không sử dụng mẫu xây dựng, chúng tôi đang sử dụng một sản phẩm có tên là Automated Build Studio cho bản dựng thực tế. Tôi chỉ định viết một ứng dụng độc lập để gọi từ ABS cho chức năng này. – Nick

Trả lời

13

Something như thế này nên làm việc cho bạn:

public void UpdateTFSValue(string tfsServerUrl, string fieldToUpdate, 
    string valueToUpdateTo, int workItemID) 
{ 
    // Connect to the TFS Server 
    TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(tfsUri)); 
    // Connect to the store of work items. 
    _store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
    // Grab the work item we want to update 
    WorkItem workItem = _store.GetWorkItem(workItemId); 
    // Open it up for editing. (Sometimes PartialOpen() works too and takes less time.) 
    workItem.Open(); 
    // Update the field. 
    workItem.Fields[fieldToUpdate] = valueToUpdateTo; 
    // Save your changes. If there is a constraint on the field and your value does not 
    // meet it then this save will fail. (Throw an exception.) I leave that to you to 
    // deal with as you see fit. 
    workItem.Save();  
} 

Một ví dụ về gọi này sẽ là:

UpdateTFSValue("http://tfs2010dev:8080/tfs", "Integration Build", "Build Name", 1234); 

Biến fieldToUpdate nên là tên của trường, không phải là refname (tức . Tích hợp Xây dựng, không phải Microsoft.VSTS.Build.IntegrationBuild)

Có thể bạn có thể lấy đi bằng cách sử dụng PartialOpen(), nhưng tôi không chắc chắn.

Có thể bạn sẽ cần thêm Microsoft.TeamFoundation.Client vào dự án của mình. (Và có lẽ Microsoft.TeamFoundation.Common)

+0

Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm! – Nick

+0

+1 Tự hỏi tại sao câu trả lời này không bao giờ được bỏ phiếu? –

+5

Không chắc chắn nếu họ thay đổi một cái gì đó hoặc nếu tất cả mọi người chỉ con số này ra nhưng bạn cần phải làm: workItem.Fields [fieldToUpdate] .Value trong TFS 2012 nếu không bạn sẽ nhận được một lỗi về bộ sưu tập hiện trường là chỉ đọc; –

4

này đã thay đổi cho TFS năm 2012, về cơ bản bạn phải thêm workItem.Fields [fieldToUpdate] .Value

Phiên bản cập nhật về những gì @Vaccano viết.

public void UpdateTFSValue(string tfsServerUrl, string fieldToUpdate, 
    string valueToUpdateTo, int workItemID) 
{ 
    // Connect to the TFS Server 
    TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(tfsUri)); 
    // Connect to the store of work items. 
    _store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
    // Grab the work item we want to update 
    WorkItem workItem = _store.GetWorkItem(workItemId); 
    // Open it up for editing. (Sometimes PartialOpen() works too and takes less time.) 
    workItem.Open(); 
    // Update the field. 
    workItem.Fields[fieldToUpdate].Value = valueToUpdateTo; 
    // Save your changes. If there is a constraint on the field and your value does not 
    // meet it then this save will fail. (Throw an exception.) I leave that to you to 
    // deal with as you see fit. 
    workItem.Save();  
} 
Các vấn đề liên quan