Получите доступ к столбцу Канбан (специфичное для команды поле) для рабочего элемента
Есть ли способ получить программный доступ к "колонке Канбана" для WorkItem с помощью API TFS 2012?
При использовании шаблона Scrum 2.2 в истории элемента журнала ошибок или продукта отображается "Столбец [MyProject\MyTeam] Канбан" в качестве измененного поля всякий раз, когда рабочий элемент перетаскивается между столбцами Канбан на доске, но это поле недоступно, если специально извлечение рабочего элемента через TFS API.
Это также отображается как измененное поле в WorkItemChangedEvent
объект при реализации ProcessEvent
метод на Microsoft.TeamFoundation.Framework.Server.ISubscriber
интерфейс.
Обходной путь : сотрудник нашел в блоге пост о создании настраиваемого поля только для чтения, чтобы сохранить значение столбца Канбана, используя преимущества WorkItemChangedEvent
чтобы захватить последнее значение. Затем можно запросить этот столбец. Одна из проблем этого подхода заключается в том, что можно отслеживать только колонку Канбан одной команды.
Обновление: Согласно этому посту, столбец Канбан - это не поле, а "расширение WIT". Это может помочь привести к ответу.
3 ответа
Я нашел способ прочитать значение, используя 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];
}
}
}
Если вы готовы копаться в базе данных, вы можете добыть эту информацию. Я еще не полностью понимаю моделирование команд в TFS, но сначала вам нужно выяснить, в каком поле id команды, представляющей интерес, хранится состояние Канбан следующим образом (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
Я не знаком с шаблоном Scrum 2.2, но работа с шаблонами CMMI или Scrum одинакова, когда дело доходит до отслеживания рабочих элементов TFS.
Попробуйте что-то вроде этого:
public string GetKanbanColumn(WorkItem wi)
{
if (wi != null)
{
return wi["Kanban"].ToString();
}
return string.Empty;
}
В зависимости от фактического имени столбца, указанного в XML-файле шаблона рабочего элемента. Надеюсь это поможет.