メイン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でワークアイテムを照会したり、このプロジェクトのすべてのワークアイテムを取得したりするにはどうすればよいですか?
ワークアイテムを見つけるためにクエリを使用 に最も効率的です。クエリにWHEREプロジェクト= '@Project'を追加して、スコープをそのプロジェクトだけに制限できます。最初にBeginQueryを呼び出し、次にEndQueryを呼び出すことで、探していたアイテムだけのワークアイテムコレクションを取得します。
必要なwqlクエリを取得する最も簡単な方法は、Team Explorerでクエリを作成し、file-> save as(編集モードで)を使用してファイルに保存することです。そのファイルをメモ帳で開き、クエリをそこからコピーします。
あるいは、 WorkItemStore.Query method を直接使用して、同じことを達成できます。
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);