2015-01-13 5 views
4

Я застрял в простой проблеме с TFS API, когда я получаю рабочий элемент, я не могу получить рабочие данные об усилиях, идея состоит в том, чтобы получить рабочий элемент из TFS по определенным критериям, а затем изменить данные Усиления и сохраните его обратно в TFS. Теперь я могу получить рабочий элемент и обновить любые данные по полю, но я не нашел, как получить Effort, и обновить его.TFS API получить данные рабочего элемента

enter image description here

запросы для получения данных из 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(); 
    } 
} 
+1

Так что же это не работает. Что это значит, что вы именно то, что хотите? – jessehouwing

+0

Ну, когда я вытаскиваю рабочий элемент, рабочий элемент не имеет никакой информации об Effort, и мне также нужно вытащить данные Effort, поэтому я могу его изменить, а затем обновить в TFS. Насколько я понимаю, я не могу изменить данные о затратах с помощью WorkItem.Fields [] –

+0

Итак, это означает, что в моем запросе, где im, потянув все элементы, у меня есть [System.WorkItemType] = 'Task', я должен изменить его на Product Элемент Backlog, и тогда я смогу изменить действие с использованием полей? –

ответ

6

Это зависит от вашего шаблона процесса, какие поля доступны. Прямо сейчас вы запрашиваете рабочие элементы «Задача», которые по умолчанию имеют следующие поля в группе «Усилия». Обратите внимание, что нет поля «усилию» для выполнения задач, есть эти другие:

Process Template | Field (s) 
Scrum    | Remaining Work 
MSF Agile   | Remaining Work, Completed Work, Original estimate 
MSF CMMI   | Remaining Work, Completed Work, Original estimate 

поле усилию вы после того, как определено в шаблоне процесса Scrum и используется всеми рабочими элементами в требовании Категория (Продукт Отставание товар и ошибка по умолчанию):

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

Если вы хотите, чтобы обновить поле усилия в рабочих элементах в шаблоне процесса Scrum, то лучше запросить рабочие элементы, которые находятся в Work Item Type категории «Требование Категория ":

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, является самый безопасный способ:

workItem.Fields["Microsoft.VSTS.Scheduling.CompletedWork"].Value = 123; 
workItem.Fields["Microsoft.VSTS.Scheduling.RemainingWork"].Value = 123; 
workItem.Fields["Microsoft.VSTS.Scheduling.OriginalEstimate"].Value = 123; 
+0

Хорошо, но как обновить поля Effort? Не нашел эту информацию. :) Спасибо в совете. Потому что я не нашел никакой информации о том, как я могу ее обновить, используя метод WorkItem.Field []. То же самое для показа данных Effort. –

+0

OH, Большое спасибо за ваш ответ Джесси! Вы мне очень помогли :) –

Смежные вопросы