Как программно обновить пользовательское поле TFS - PullRequest
5 голосов
/ 07 февраля 2011

У нас есть пользовательский процесс сборки (не использующий MS Build), и во время этого процесса я добавляю «поддельную» сборку в глобальный список сборок. Я делаю это потому, что вы можете выбрать сборку для данного рабочего элемента (находится в сборке). У нас есть настраиваемое поле, включая сборку, которое предназначено, чтобы показать, в какой сборке был исправлен этот рабочий элемент. У меня проблемы с выяснением, как обновить это поле программным способом. Идея в том, что у меня будет небольшое приложение, которое будет делать это, и которое я буду вызывать в процессе сборки, находя все рабочие элементы с момента последней сборки, а затем обновляя поле для этих рабочих элементов. Есть идеи?

Ответы [ 2 ]

13 голосов
/ 02 марта 2011

Что-то вроде этого должно работать для вас:

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();    
}

Пример вызова этого будет:

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

Переменная fieldToUpdate должна быть именем поля, а не именем ссылки (т. Е. Integration Build , а не Microsoft.VSTS.Build.IntegrationBuild )

Возможно, вы могли бы избежать использования PartialOpen () , но я не уверен.

Возможно, вам потребуется добавить Microsoft.TeamFoundation.Client в ваш проект. (А может быть Microsoft.TeamFoundation.Common)

4 голосов
/ 16 марта 2015

Это изменилось для TFS 2012, в основном вы должны добавить workItem.Fields [fieldToUpdate] .Value

Обновленная версия написанного @Vaccano.

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();    
}
...