5

我可以通过以下方式成功创建迭代路径:

var commonservice = collection.GetService<ICommonStructureService>();

// create new area path and iteration path
var iterationRoot = commonservice.GetNodeFromPath("\\MyTeamProject\\Iteration");
var newIterationPath = commonservice.CreateNode("my new sprint", iterationRoot.Uri);

但是,当我尝试将此路径分配给工作项并将其保存时,该字段不会验证。

如果我再次运行测试(已经创建了迭代)相同的代码会成功。

有谁知道如何使这项工作?

4

4 回答 4

3

这为我修复了它:

WorkItemStore wis = (WorkItemStore)tfsTeamProjColl.GetService(typeof(WorkItemStore));
wis.RefreshCache();
wis.SyncToCache();

也许它会帮助某人。

于 2011-02-15T22:22:16.217 回答
2

我经历了完全相同的行为,不幸的是@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 sprintMyTeamProject\my sprint

希望这可以节省一些时间。

注意:我在 TFS 2013 上运行它。

于 2014-04-18T12:10:11.707 回答
0

我有类似的问题。我创建了 Areapath,然后创建了一个使用 AreaPath 的查询。我确实调用了 store.RefreshCash() 但它不起作用。仅当我手动运行两次 store.RefreshCshe() 时在调试器中。感谢“Yan Sklyarenko”。我试过你的建议,它工作正常(TFS Server 2012)。

于 2014-10-24T07:48:25.357 回答
0

您可能会遇到缓存问题。创建迭代后尝试清除缓存。您可以尝试几件事:

  1. 获取 WorkItemStore 的新副本。
  2. 断开并重新连接到 TFS
  3. 检查 WIS 或 TFS 服务器对象上是否有“刷新”方法。我已经在晚上关闭了我的 TFS 开发实例,我不记得是否有类似的东西。

如果那还不是,请发布您的代码,我会看看我是否可以重现它。

于 2010-05-22T02:46:50.617 回答