TFS API 获取工作项数据
TFS API get work item data
我遇到了 TFS 的简单问题 API,当我获取工作项时,我无法获取工作项工作量数据,我的想法是通过特定条件从 TFS 获取工作项,然后更改工作量数据并将其保存回 TFS。现在我可以获取工作项,并按字段更新任何数据,但我找不到如何获取 Effort 并更新它。
从 TFS 获取数据的查询:
SELECT * FROM WorkItems WHERE [System.WorkItemType] = 'Task' AND [Assigned to] = 'name'
ORDER BY [System.WorkItemType], [System.Id]
这是获取字段的代码
public void getDataFromTfs()
{
Console.WriteLine("Getting data from TFS to Store");
Console.WriteLine("*********************");
setQuery();
Console.WriteLine("Query" + byTasksModified.ToString());
Console.WriteLine("*********************");
Console.ReadLine();
credentials = new System.Net.NetworkCredential("xxxxx", "xxxxxx", "xxxxx");
TfsTeamProjectCollection teamProjectCollection =
new TfsTeamProjectCollection(new Uri(@"LINK HERE"), credentials);
teamProjectCollection.EnsureAuthenticated();
Store = (WorkItemStore) teamProjectCollection.GetService(typeof(WorkItemStore));
WIC = Store.Query(byTasksAssignedTo);
Console.WriteLine("Data fetched into Store");
foreach (WorkItem workItem in WIC)
{
Console.WriteLine("ID: {0}", workItem.Id);
Console.WriteLine("Title: {0}", workItem.Title);
}
}
在这里,我通过特定查询获取我需要的所有任务,然后我有方法来提取特定任务
public void getSpecificWorkItemData()
{
workItem = Store.GetWorkItem(64);
Console.WriteLine("ID: {0}", workItem.Id);
Console.WriteLine("Title: {0}", workItem.Title);
workItem.Open();
Console.ReadLine();
}
然后我有任务的更新方法
public void updateWorkItem()
{
workItem.Fields["Assigned to"].Value = "NAME";
if (workItem.IsValid() == false)
{
Console.WriteLine("Item is not valid");
}
else
{
try
{
workItem.Save();
}
catch (ValidationException exception)
{
Console.WriteLine("Error saving work item!");
Console.WriteLine(exception.Message);
}
Console.WriteLine("Item Saved");
workItem.Close();
Console.ReadLine();
}
}
这取决于您的流程模板哪些字段可用。现在,您正在查询 "Task" 个工作项,默认情况下在 "Effort" 组中具有以下字段。请注意,任务没有 "Effort" 字段,还有其他字段:
Process Template | Field (s)
Scrum | Remaining Work
MSF Agile | Remaining Work, Completed Work, Original estimate
MSF CMMI | Remaining Work, Completed Work, Original estimate
您所关注的 Effort 字段在 Scrum 过程模板中定义,并被需求类别中的所有工作项使用(默认为产品待办列表项和 Bug):
Process Template | Field (s)
Scrum | Effort
MSF Agile | Story Point
MSF CMMI | Size
如果要更新 Scrum 流程模板中工作项中的工作量字段,最好查询工作项类型类别 "Requirement Category":
中的工作项
SELECT *
FROM WorkItems
WHERE [System.TeamProject] = @project
AND [System.WorkItemType] IN GROUP 'Requirement Category'
ORDER BY [System.Id]
如果您想更新剩余工时、已完成工时或原始估算字段,您需要使用任务:
SELECT id, Microsoft.VSTS.Scheduling.CompletedWork, Microsoft.VSTS.Scheduling.RemainingWork, Microsoft.VSTS.Scheduling.OriginalEstimate
FROM WorkItems
WHERE [System.TeamProject] = @project
AND [System.WorkItemType] IN GROUP 'Task Category'
ORDER BY [System.Id]
然后根据 TFS Field Reference 中定义的 Ref 名称更新它们,这是最安全的方法:
workItem.Fields["Microsoft.VSTS.Scheduling.CompletedWork"].Value = 123;
workItem.Fields["Microsoft.VSTS.Scheduling.RemainingWork"].Value = 123;
workItem.Fields["Microsoft.VSTS.Scheduling.OriginalEstimate"].Value = 123;
我遇到了 TFS 的简单问题 API,当我获取工作项时,我无法获取工作项工作量数据,我的想法是通过特定条件从 TFS 获取工作项,然后更改工作量数据并将其保存回 TFS。现在我可以获取工作项,并按字段更新任何数据,但我找不到如何获取 Effort 并更新它。
从 TFS 获取数据的查询:
SELECT * FROM WorkItems WHERE [System.WorkItemType] = 'Task' AND [Assigned to] = 'name'
ORDER BY [System.WorkItemType], [System.Id]
这是获取字段的代码
public void getDataFromTfs()
{
Console.WriteLine("Getting data from TFS to Store");
Console.WriteLine("*********************");
setQuery();
Console.WriteLine("Query" + byTasksModified.ToString());
Console.WriteLine("*********************");
Console.ReadLine();
credentials = new System.Net.NetworkCredential("xxxxx", "xxxxxx", "xxxxx");
TfsTeamProjectCollection teamProjectCollection =
new TfsTeamProjectCollection(new Uri(@"LINK HERE"), credentials);
teamProjectCollection.EnsureAuthenticated();
Store = (WorkItemStore) teamProjectCollection.GetService(typeof(WorkItemStore));
WIC = Store.Query(byTasksAssignedTo);
Console.WriteLine("Data fetched into Store");
foreach (WorkItem workItem in WIC)
{
Console.WriteLine("ID: {0}", workItem.Id);
Console.WriteLine("Title: {0}", workItem.Title);
}
}
在这里,我通过特定查询获取我需要的所有任务,然后我有方法来提取特定任务
public void getSpecificWorkItemData()
{
workItem = Store.GetWorkItem(64);
Console.WriteLine("ID: {0}", workItem.Id);
Console.WriteLine("Title: {0}", workItem.Title);
workItem.Open();
Console.ReadLine();
}
然后我有任务的更新方法
public void updateWorkItem()
{
workItem.Fields["Assigned to"].Value = "NAME";
if (workItem.IsValid() == false)
{
Console.WriteLine("Item is not valid");
}
else
{
try
{
workItem.Save();
}
catch (ValidationException exception)
{
Console.WriteLine("Error saving work item!");
Console.WriteLine(exception.Message);
}
Console.WriteLine("Item Saved");
workItem.Close();
Console.ReadLine();
}
}
这取决于您的流程模板哪些字段可用。现在,您正在查询 "Task" 个工作项,默认情况下在 "Effort" 组中具有以下字段。请注意,任务没有 "Effort" 字段,还有其他字段:
Process Template | Field (s)
Scrum | Remaining Work
MSF Agile | Remaining Work, Completed Work, Original estimate
MSF CMMI | Remaining Work, Completed Work, Original estimate
您所关注的 Effort 字段在 Scrum 过程模板中定义,并被需求类别中的所有工作项使用(默认为产品待办列表项和 Bug):
Process Template | Field (s)
Scrum | Effort
MSF Agile | Story Point
MSF CMMI | Size
如果要更新 Scrum 流程模板中工作项中的工作量字段,最好查询工作项类型类别 "Requirement Category":
中的工作项SELECT *
FROM WorkItems
WHERE [System.TeamProject] = @project
AND [System.WorkItemType] IN GROUP 'Requirement Category'
ORDER BY [System.Id]
如果您想更新剩余工时、已完成工时或原始估算字段,您需要使用任务:
SELECT id, Microsoft.VSTS.Scheduling.CompletedWork, Microsoft.VSTS.Scheduling.RemainingWork, Microsoft.VSTS.Scheduling.OriginalEstimate
FROM WorkItems
WHERE [System.TeamProject] = @project
AND [System.WorkItemType] IN GROUP 'Task Category'
ORDER BY [System.Id]
然后根据 TFS Field Reference 中定义的 Ref 名称更新它们,这是最安全的方法:
workItem.Fields["Microsoft.VSTS.Scheduling.CompletedWork"].Value = 123;
workItem.Fields["Microsoft.VSTS.Scheduling.RemainingWork"].Value = 123;
workItem.Fields["Microsoft.VSTS.Scheduling.OriginalEstimate"].Value = 123;