Я испытал точно такое же поведение, и, к сожалению, ответ @JWC не помог. Решение, которое работает для меня, можно найти по этой ссылке .
Итак, это краткое изложение на тот случай, если первоначальный ответ будет утерян.
Ключевым моментом является использование WorkItemServer
класса. Он живет в Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll
сборке.
Прежде всего, вы создаете экземпляр WorkItemStore
:
var store = collection.GetService<WorkItemStore>();
Затем создайте необходимые пути итерации:
var commonservice = collection.GetService<ICommonStructureService>();
var iterationRoot = commonservice.GetNodeFromPath("\\MyTeamProject\\Iteration");
var newIterationPath = commonservice.CreateNode("my sprint", iterationRoot.Uri);
Затем обновите кэш в TFS (я подозреваю, что это похоже на нажатие F5
в веб-интерфейсе):
var wiServer = collection.GetService<WorkItemServer>();
wiServer.SyncExternalStructures(WorkItemServer.NewRequestId(), commonservice.GetProjectFromName("MyTeamProject").Uri);
store.RefreshCache();
И, наконец, назначьте вновь созданный рабочий элемент вновь созданной итерации:
var wi = new WorkItem(store.Projects["MyTeamProject"].WorkItemTypes["Product Backlog Item"]);
wi.Title = "Hello from API";
wi.Description = "This work item was created from API";
wi.Fields["Assigned To"].Value = "Yan Sklyarenko";
wi.IterationPath = FormatPath(commonservice.GetNode(newIterationPath).Path, "Iteration", "MyTeamProject");
wi.Save();
Вот и все! Метод FormatPath
переводит путь итерации в форму, требуемую для поля рабочего элемента IterationPath
, то есть от \MyTeamProject\Iteration\my sprint
до MyTeamProject\my sprint
.
Надеюсь, это поможет сэкономить время.
ПРИМЕЧАНИЕ: я запускаю это к TFS 2013.