2013-08-12 3 views
9

Есть ли способ программно получить доступ к «Kanban Column» для WorkItem с использованием API TFS 2012?Доступ к столбцу Kanban (поле для команды) для рабочего элемента

Использование шаблона Scrum 2.2 в истории элемента Bug или Product Backlog показывает «[MyProject \ MyTeam] Kanban Column» как измененное поле всякий раз, когда рабочий элемент перетаскивается между столбцами Kanban на плате, но это поле недоступны, когда специально загружают рабочий элемент через API TFS.

Он также отображается как измененное поле в объекте WorkItemChangedEvent при реализации метода ProcessEvent на интерфейсе Microsoft.TeamFoundation.Framework.Server.ISubscriber.

Обход: Коллега нашел blogpost о создании пользовательского поля только для чтения, чтобы сохраняться значение столбца канбан, воспользовавшись WorkItemChangedEvent, чтобы захватить последнее значение. Затем можно запросить этот столбец. Одна из проблем с этим подходом заключается в том, что можно отслеживать только колонку Kanban одной команды.

Update: Согласно этому blogpost, колонна Kanban не поле, а скорее "ВИТ Extension". Это может помочь привести к ответу.

ответ

6

Я нашел способ чтения значение с использованием API TFS 2013, внутри метода ISubscriber.ProcessEvent:

var workItemId = 12345; 
var extService = new WorkItemTypeExtensionService(); 
var workItemService = new WorkItemService(); 
var wit = workItemService.GetWorkItem(requestContext, workItemId); 
foreach (var wef in extService.GetExtensions(requestContext, wit.WorkItemTypeExtensionIds)) 
{ 
    foreach (var field in wef.Fields) 
    { 
     if (field.LocalName == "Kanban Column" || field.LocalName == "Backlog items Column") 
     { 
      // Access the new column name 
      var columnName = wit.LatestData[field.Field.FieldId]; 
     } 
    } 
} 
+2

Какую dll можно найти в этих классах? – Greg

+0

Это похоже на работу только на стороне сервера. Нет ли доступа к нему из клиентского приложения? –

+0

Этот образец кода мог бы быть с большим, так как есть много переменных, которые не разрешают .. :-( –

0

Я не знаком с шаблоном Scrum 2.2, но работы одинаковы для шаблонов CMMI или Scrum, когда дело доходит до отслеживания рабочих элементов TFS.

попробовать что-то вроде этого:

public string GetKanbanColumn(WorkItem wi) 
{ 
    if (wi != null) 
    { 
     return wi["Kanban"].ToString(); 
    } 
    return string.Empty; 
} 

В зависимости от фактического имени столбца, указанного в Work Item файла шаблона XML. Надеюсь это поможет.

+0

TFS 2012 поддерживает несколько команд, и колонна канбан является уникальной в команду в шаблоне Scrum, так что это не возможно, чтобы получить доступ к этим столбцам, используя индекс опера тор. – JoeGaggler

1

Если вы готовы копаться в базе данных вы можете добывать эту информацию вне. Я не совсем понимаю, моделирование команд в TFS еще, но сначала нужно работать, какие поля идентификатор команды интереса хранит состояние Канбан в следующим образом (TFS 2012):


USE Tfs_DefaultCollection 
SELECT TOP(10) 
     MarkerField + 1 as FieldId,* 
FROM tbl_WorkItemTypeExtensions with(nolock) 
JOIN tbl_projects on tbl_WorkItemTypeExtensions.ProjectId = tbl_projects.project_id 
WHERE tbl_projects.project_name LIKE '%ProjectName% 

Затем замените XXXXXXXX ниже с FieldId обнаруженного выше


SELECT TOP 1000 
     wid.Id, 
     wia.State, 
     wid.StringValue as Kanban, 
     wia.[Work Item Type], 
     wia.Title, 
     tn.Name as Iteration 
FROM tbl_WorkItemData wid with(nolock) 
JOIN WorkItemsAre wia on wia.ID = wid.Id 
JOIN TreeNodes tn on wia.IterationID = tn.ID 
WHERE FieldId = XXXXXXXX and RevisedDate = '9999-01-01 00:00:00.000' 
ORDER BY Id