web-dev-qa-db-ja.com

TFS API-特定のチームプロジェクトから作業項目を取得する方法

メインTfsTeamProjectCollectionの単一のチームプロジェクトをクエリしようとしていますが、これには合計で194のチームプロジェクトが含まれています。 WorkItemからIdでWorkItemStoreを取得する方法を正確に知っています。これを行うことで、APIはコレクション内のプロジェクトの[〜#〜] all [〜#〜]を検索し、クエリには約1分かかります。これは遅すぎる方法です。単一のチームプロジェクトから作業項目を直接クエリする方法が必要です。ここに私が持っているコードがあります:

    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でワークアイテムを照会したり、このプロジェクトのすべてのワークアイテムを取得したりするにはどうすればよいですか?

38
JF Beaulieu

ワークアイテムを見つけるためにクエリを使用 に最も効率的です。クエリにWHEREプロジェクト= '@Project'を追加して、スコープをそのプロジェクトだけに制限できます。最初にBeginQueryを呼び出し、次にEndQueryを呼び出すことで、探していたアイテムだけのワークアイテムコレクションを取得します。

必要なwqlクエリを取得する最も簡単な方法は、Team Explorerでクエリを作成し、file-> save as(編集モードで)を使用してファイルに保存することです。そのファイルをメモ帳で開き、クエリをそこからコピーします。

あるいは、 WorkItemStore.Query method を直接使用して、同じことを達成できます。

15
jessehouwing

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);
36
pantelif