Заметки консультанта

Шамрай Александр Владимирович

Azure DevOps Services Rest Api. 11. Перемещение рабочих элементов в другой командный проект

Posted by Shamrai Alexander на Январь 29, 2019

Перемещение рабочих элементов может понадобиться в различных случаях:

  1. Рабочий элемент не там изначально зарегистрировали.
  2. Для команды создали новый командный проект и необходимо забрать ее требования и ошибки.
  3. И т.д.

Сама операция переноса не очень сложная (Move a work item to another project), но если необходимо перенести тысячи рабочих элементов, то ручная работа займет много времени.

Для переноса рабочего элемента необходимо обновить всего три поля:

  1. Командный проект
  2. Путь итерации
  3. Путь области

В эти поля нужно установить наименование нового командного проекта. Пример будет базироваться на статьях Выполнение запросов по рабочим элементам и Создание и редактирование рабочих элементов.

Пример для обновления одного рабочего элемента очень прост:

static
int MoveWorkItem(int WIId, string NewTeamProject)

{

Dictionary<string, object> fields = new Dictionary<string, object>();

fields.Add(«System.TeamProject», NewTeamProject);

fields.Add(«System.AreaPath», NewTeamProject);

fields.Add(«System.IterationPath», NewTeamProject);


var editedWI = UpdateWorkItem(WIId, fields);

Console.WriteLine(«Work item has been moved: « + editedWI.Id.Value);


return editedWI.Id.Value;

}

static WorkItem UpdateWorkItem(int WIId, Dictionary<string, object> Fields)

{

JsonPatchDocument patchDocument = new JsonPatchDocument();


foreach (var key in Fields.Keys)

patchDocument.Add(new JsonPatchOperation()

{

Operation = Operation.Add,

Path = «/fields/» + key,

Value = Fields[key]

});


return WitClient.UpdateWorkItemAsync(patchDocument, WIId).Result;

}

Если же нам необходимо перенести большое количество рабочих элементов, то предварительно необходимо создать запрос по рабочим элементам, который выберет их все (Create and save managed queries with the query editor). Далее запрос можно выполнить и получить все идентификаторы и выполнить обновление каждого рабочего элемента:

List<int> wis = RunStoredQuery(teamProjectOld, queryPath);

foreach (int wiId in wis) MoveWorkItem(wiId, teamProjectNew);

В истории рабочего элемента будет соответствующая запись:

Пример тестового приложения можно посмотреть здесь:

https://github.com/ashamrai/TFRestApi/tree/master/11.TFRestApiAppMoveWorkItems

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

 
%d такие блоггеры, как: