【发布时间】:2018-07-11 12:48:59
【问题描述】:
我想构建一个查询应用程序,它将查询 TFS 中的一个分支,并检索所有工作项并将其显示为主从报告:
User Story:30669 [Closed] Ongoing Support and Maintenance
Task:31566 [Closed] Upgrade latest version of client libraries
Bug:30905 [Closed] Executing Error "The given Key was not present in the dictionary"
User Story:30351 [Closed] Add new Function
Task:28188 [Closed] Implement new Function
这会让我们很好地了解我们在给定分支上做了哪些工作,以及如果我们选择构建,构建中会包含什么。
所以目前我可以检索日期之间分支的所有工作项,不包括合并。我想包含合并,但我很难理解 TFS 客户端界面。
这是我目前所拥有的:BranchModel、ChangesetModel、UserStories 和 TaskBugs 是帮助我为输出报告安排 WorkItem 对象的类:
const String c_collectionUri = "http://tfsServer:81/tfs/ProjectCollection";
const String c_projectName = "Project";
using (TfsTeamProjectCollection tpc =
new TfsTeamProjectCollection(new Uri(c_collectionUri)))
{
VersionControlServer vcServer =
tpc.GetService<VersionControlServer>();
WorkItemStore workItemStore = tpc.GetService<WorkItemStore>();
// Fetch the branch history
var history = vcServer.QueryHistory(@"$/ProjectCollection/Project/Branch1/Source", RecursionType.Full)
.Where(h => h.CreationDate >= new DateTime(2018, 1, 1) && h.CreationDate <= new DateTime(2018, 1, 5));
BranchModel branch = new BranchModel("Branch1");
// Get the changesets, for from the fetched history
List<Changeset> changesets = new List<Changeset>();
foreach (Changeset changeset in history)
{
changesets.Add(changeset);
// TODO: Add code to get Changesets related to merge
}
// Get the WorkItems from Changesets Fetched
foreach (Changeset changeset in changesets)
{
ChangesetModel changesetModel = branch.AddChangeset(changeset);
foreach (WorkItem workItem in changeset.WorkItems)
{
// Fetch the UserStory for a Bug/Task
foreach (var linkedItem in workItem.Links)
{
RelatedLink relatedItem = linkedItem as RelatedLink;
WorkItem userStory = null;
if (relatedItem != null)
userStory = GetWorkItem(workItemStore, c_projectName, relatedItem.RelatedWorkItemId);
if (userStory != null)
{
var userStoryModel = branch.AddUserStory(userStory);
var taskBugModel = userStoryModel.Add(workItem);
}
}
}
}
// Finally print the report
Console.WriteLine();
Console.WriteLine("Related Work:");
Console.WriteLine("=".PadLeft(80, '='));
foreach (var userStory in branch.UserStories)
{
Console.WriteLine(userStory.Value.ToString());
foreach (var taskBug in userStory.Value.TaskBugs)
{
Console.WriteLine(taskBug.Value.ToString());
}
}
以及GetWorkItem的方法:
void WorkItem GetWorkItem(WorkItemStore workItemStore, string c_projectName, int workitemID)
{
return workItemStore.Projects[c_projectName].Store.GetWorkItem(workitemID);
}
我想知道,对于恰好是合并的Changeset,如何获取与该合并相关的相关工作项。
【问题讨论】:
标签: c# tfs tfs-2015 tfs-workitem workitem