我经历了完全相同的行为,不幸的是@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
在 Web 界面中按下):
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
,即 from\MyTeamProject\Iteration\my sprint
到MyTeamProject\my sprint
。
希望这可以节省一些时间。
注意:我在 TFS 2013 上运行它。