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

JF *_*ieu 38 c# tfs tfs-sdk tfs2010

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

    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;
    }
Run Code Online (Sandbox Code Playgroud)

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

pan*_*lif 35

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

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]");
Run Code Online (Sandbox Code Playgroud)

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

WorkItem workItem = workItemStore.GetWorkItem(555);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,与SQL查询一样,您可以使用@ParameterName向Team查询添加参数.只需将Dictionary作为最后一个参数添加名称/值对,WorkItemStore将确保数据被正确转义.(另见:http://msdn.microsoft.com/en-US/library/bb140400(v = vs.80).aspx) (6认同)

jes*_*ing 15

使用查询来查找您感兴趣的工作项可能是最有效的.您可以在查询中添加Where project ='@ Project',以将范围限制为该项目.通过首先调用BeginQuery然后调用EndQuery,您将获得仅针对您正在寻找的项目的工作项集合.

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

或者,您可以直接使用WorkItemStore.Query方法来实现相同的功能.

  • 保存wql查询是一个很好的提示.使用Team Explorer GUI更容易获得正确的查询.你节省了我几个小时的麻烦:-) (3认同)