TFS API - 如何从特定的团队项目中获取工作项

时间:2012-02-13 19:10:30

标签: c# tfs tfs2010 tfs-sdk

我正在尝试查询主TfsTeamProjectCollection中的单个团队项目,该项目共包含194个团队项目。我确切知道如何从WorkItem获取WorkItemStore ID。问题是,通过这样做,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查询工作项目或者只是获取该项目中的所有工作项目?

2 个答案:

答案 0 :(得分:36)

您可以尝试这样的方法来获取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);

答案 1 :(得分:15)

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

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

或者,您可以直接使用WorkItemStore.Query method来实现相同的目标。