【问题标题】:TFS API - How to fetch work item(s) from specific Team ProjectTFS API - 如何从特定团队项目中获取工作项
【发布时间】:2012-03-05 04:53:57
【问题描述】:

我正在尝试查询主 TfsTeamProjectCollection 中的单个团队项目,其中总共包含 194 个团队项目。我确切地知道如何通过 ID 从WorkItemStore 获取WorkItem。问题是,通过这样做,API 在集合中的 ALL 项目中搜索,查询大约需要一分钟。这太慢了,必须有一种方法可以直接从单个团队项目中查询工作项?这是我的代码:

    private Uri collectionUri;
    private TfsTeamProjectCollection projectCollection;
    private WorkItemStore workItemStore;

    public Project GetTeamProject()
    {
        projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri);

        workItemStore = projectCollection.GetService<WorkItemStore>();
        Project teamProject = workItemStore.Projects[TFS_PROJECT_KEY];
        return teamProject;
    }

现在我有了我感兴趣的团队项目,如何通过 ID 查询工作项或只获取该项目中的所有工作项?

【问题讨论】:

  • 仅供参考,摆脱那个 try/catch 块。它什么都不做。
  • 它曾经捕获空指针异常,因为该方法将项目ID作为参数,但我改变了它。
  • 你所做的只是重新抛出异常,这与根本不捕获它是一样的。你也不应该捕获 NullReferenceException,因为它总是意味着一个编程错误。
  • 感谢您的指点...但这有点超出范围

标签: c# tfs tfs-sdk


【解决方案1】:

您可以尝试这样的方法来获取 teamProject 中的所有 WI:

WorkItemCollection workItemCollection = workItemStore.Query(
     " SELECT [System.Id], [System.WorkItemType],"+    
     " [System.State], [System.AssignedTo], [System.Title] "+ 
     " FROM WorkItems " +
     " WHERE [System.TeamProject] = '" + teamProject.Name +
    "' ORDER BY [System.WorkItemType], [System.Id]");

这是为了获得一个特定的 WorkItem ID:

WorkItem workItem = workItemStore.GetWorkItem(555);

【讨论】:

  • 您知道要向项目添加什么引用才能识别查询吗?因为我已经在使用Microsoft.TeamFoundation.ClientMicrosoft.TeamFoundation.WorkItemTracking.Client,所以workItemStore.Query() 参数中的所有内容都出现错误
  • 请注意,与 SQL 查询一样,您可以使用 @ParameterName 将参数添加到您的团队查询。只需使用名称/值对添加 Dictionary 作为最后一个参数,WorkItemStore 将确保数据正确转义。 (另见:msdn.microsoft.com/en-US/library/bb140400(v=vs.80).aspx
  • 我只是把它扔在那里,如果你想要一个特定的工作项,你必须像这样过滤它:" AND [System.Id] = " + workItemID; - 上面没有明确说明,没什么大不了的。
【解决方案2】:

您感兴趣的use a query to find the workitems 可能最有效。您可以在查询中添加一个 Where project = '@Project' 以将范围限制为该项目。通过首先调用 BeginQuery 然后 EndQuery 您将获得一个工作项集合,其中包含您正在寻找的项目。

获取所需 wql 查询的最简单方法是在团队资源管理器中创建一个查询,然后使用文件->另存为(在编辑模式下)将其保存到文件中。在记事本中打开该文件以将查询复制出来。

您也可以直接使用WorkItemStore.Query method 来实现相同的目的。

【讨论】:

  • 保存 wql 查询是一个绝妙的技巧。使用 Team Explorer GUI 更容易获得正确的查询。你为我节省了几个小时的时间:-)
猜你喜欢
  • 2015-07-12
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 2018-05-26
  • 2012-01-27
  • 2015-12-30
相关资源
最近更新 更多