Я испытал точно такое же поведение, и, к сожалению, ответ @JWC не помог. Решение, которое работает для меня, можно найти по адресу this link.
Итак, это краткое резюме, если исходный ответ будет потерян.
Ключевым моментом является использование класса 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.