TFS API获取工作项数据

5
我在使用TFS API时遇到了一个简单的问题,当我获取工作项时,无法获取工作项的Effort数据。我的想法是通过特定的条件从TFS获取工作项,然后更改Effort数据并将其保存回TFS。现在我可以获取工作项,并通过字段更新任何数据,但我没有找到如何获取和更新Effort的方法。
从TFS获取数据的查询如下图所示: enter image description here
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();
    }
}

1
那么,有什么东西不起作用吗?你确切想要做什么? - jessehouwing
当我拉取工作项时,工作项没有任何有关工作量的信息,我需要拉取工作量数据,以便我可以更改它,然后在TFS中更新它。据我所知,我无法使用WorkItem.Fields[]更改工作量数据。 - Jhon Enamo Casas
那么,这意味着在我检索所有项的查询中,我有[System.WorkItemType] = 'Task',我应该将其更改为Product Backlog Item,然后我就可以使用字段更改Effort了? - Jhon Enamo Casas
仍然很奇怪,因为我有一些具有努力数据的任务,http://i.imgur.com/YpMuRCD.png,当我使用我的查询时,我可以在WorkItemColletion中看到这个任务。 - Jhon Enamo Casas
1个回答

8

可用的字段取决于您的流程模板。现在,您正在查询“任务”工作项,该工作项默认情况下具有“工作量”组中的以下字段。请注意,任务没有“工作量”字段,而是有其他字段:

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流程模板中定义,并且在需求类别(默认情况下为产品待办事项和错误)中的所有工作项中使用:

Process Template    | Field (s)
Scrum               | Effort
MSF Agile           | Story Point
MSF CMMI            | Size

如果您想更新Scrum过程模板中工作项的“Effort”字段,则最好查询位于“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字段参考中定义的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;

好的,但是如何更新Effort字段呢?没有找到相关信息。:) 先谢谢了。因为我没有找到使用WorkItem.Field[]方法更新它的任何信息。同样适用于显示Effort数据。 - Jhon Enamo Casas
哦,谢谢你的回答,杰西!你帮了我很多 :) - Jhon Enamo Casas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接