Tfs 访问工作项的看板列(特定于团队的字段)

Tfs 访问工作项的看板列(特定于团队的字段),tfs,tfs-sdk,kanban,Tfs,Tfs Sdk,Kanban,是否有方法使用TFS 2012 API以编程方式访问工作项的“看板列” 使用Scrum 2.2模板,每当在看板列之间拖动工作项时,错误或产品积压项的历史记录将“[MyProject\MyTeam]看板列”显示为一个已更改的字段,但当通过TFS API专门检索工作项时,该字段不可访问 当在Microsoft.TeamFoundation.Framework.Server.ISubscriber界面上实现ProcessEvent方法时,它还显示为WorkItemChangedEvent对象中的已更改

是否有方法使用TFS 2012 API以编程方式访问工作项的“看板列”

使用Scrum 2.2模板,每当在看板列之间拖动工作项时,错误或产品积压项的历史记录将“[MyProject\MyTeam]看板列”显示为一个已更改的字段,但当通过TFS API专门检索工作项时,该字段不可访问

当在
Microsoft.TeamFoundation.Framework.Server.ISubscriber
界面上实现
ProcessEvent
方法时,它还显示为
WorkItemChangedEvent
对象中的已更改字段

解决方法: 一位同事发现了一个关于创建只读自定义字段以持久化看板列的值的问题,利用
WorkItemChangedEvent
捕获最新值。然后可以查询此列。这种方法的一个问题是,只能跟踪单个团队的看板列

更新:
据此,看板栏不是一个字段,而是一个“WIT扩展”。这可能有助于找到答案。

我不熟悉Scrum 2.2模板,但在TFS工作项跟踪方面,CMMI或Scrum模板的工作是相同的

试着这样做:

公共字符串GetKanbanColumn(工作项wi)
{
如果(wi!=null)
{
返回wi[“看板”].ToString();
}
返回字符串。空;
}
根据在工作项模板XML文件中指定的列的实际名称。希望这能有所帮助。

我找到了一种使用TFS 2013 API在ISubscriber.ProcessEvent方法中读取值的方法:

var workItemId=12345;
var extService=new WorkItemTypeExtensionService();
var workItemService=新的workItemService();
var wit=workItemService.GetWorkItem(requestContext,workItemId);
foreach(extService.GetExtensions(requestContext,即workItemTypeExtensionId)中的var wef)
{
foreach(wef.字段中的var字段)
{
if(field.LocalName==“看板列”| | field.LocalName==“待办事项列”)
{
//访问新列名
var columnName=wit.LatestData[field.field.FieldId];
}
}
}

如果你准备深入数据库,你可以挖掘出这些信息。我还不完全理解TFS中团队的建模,但首先需要确定感兴趣的团队将看板状态存储在哪个字段id中,如下所示(TFS 2012):


然后将下面的XXXXXXXX替换为上面发现的字段ID



TFS 2012支持多个团队,并且看板列在Scrum模板中每个团队都是唯一的,因此无法使用下标操作符访问这些列。这些类可以在哪个dll中找到?这似乎只在服务器端工作。是否无法从客户端应用程序访问它?此代码示例可能需要更大,因为有许多变量无法解析..:-(
 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%
 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