有没有办法使用TFS 2012 API以编程方式访问WorkItem的“看板列”?
使用Scrum 2.2模板,每当在Board上的Kanban列之间拖动工作项时,Bug或Product Backlog Item的历史记录都会将“[MyProject \ MyTeam] Kanban Column”显示为已更改的字段,但该字段不是通过TFS API专门检索工作项时可以访问。
在WorkItemChangedEvent
界面上实施ProcessEvent
方法时,它还会在Microsoft.TeamFoundation.Framework.Server.ISubscriber
对象中显示为已更改的字段。
解决方法:
同事找到blogpost关于创建只读自定义字段以保持看板列的值,利用WorkItemChangedEvent
捕获最新值。然后可以在此列上查询。这种方法的一个问题是只能跟踪单个团队的看板列。
更新 根据此blogpost,看板列不是字段,而是“WIT扩展”。这可能有助于找到答案。
答案 0 :(得分:6)
我在ISubscriber.ProcessEvent方法中找到了使用TFS 2013 API 读取值的方法:
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];
}
}
}
答案 1 :(得分:1)
如果您准备深入了解数据库,可以挖掘出这些信息。我还没有完全理解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
答案 2 :(得分:0)
我不熟悉Scrum 2.2模板,但在TFS工作项跟踪方面,CMMI或Scrum模板的工作原理相同。
尝试这样的事情:
public string GetKanbanColumn(WorkItem wi)
{
if (wi != null)
{
return wi["Kanban"].ToString();
}
return string.Empty;
}
取决于工作项模板XML文件中指定的列的实际名称。希望这会有所帮助。