2013-08-12 24 views
9

Gibt es eine Möglichkeit, programmgesteuert auf die "Kanban-Spalte" für ein WorkItem mit der TFS 2012-API zuzugreifen?Zugriff auf die Kanbanspalte (ein teamspezifisches Feld) für ein Workitem

Mit der Scrum 2.2 Vorlage zeigt die Historie eines Bugs oder Product Backlog Items "[MyProject \ MyTeam] Kanban Column" als ein geändertes Feld, wenn ein Arbeitselement zwischen Kanban Spalten auf dem Board gezogen wird, aber das Feld ist nicht verfügbar, wenn Sie ein Arbeitselement über die TFS-API abrufen.

Es wird auch als ein geändertes Feld im Objekt WorkItemChangedEvent angezeigt, wenn die Methode ProcessEvent auf der Schnittstelle Microsoft.TeamFoundation.Framework.Server.ISubscriber implementiert wird.

Umgehung: Ein Mitarbeiter fand ein blogpost über ein schreibgeschützte benutzerdefiniertes Feld zu schaffen, den Wert der Kanban-Säule bestehen bleiben, unter Ausnutzung der WorkItemChangedEvent unter dem letzten Wert zu erfassen. Es ist dann möglich, nach dieser Spalte zu fragen. Ein Problem bei diesem Ansatz besteht darin, dass nur die Kanbanspalte eines einzelnen Teams verfolgt werden kann.

Update: Nach dieser blogpost ist die Kanban-Spalte kein Feld, sondern eine "WIT Extension". Dies kann zu einer Antwort führen.

Antwort

6

ich einen Weg, um gefunden habe gelesen den Wert der API TFS 2013 verwenden, innerhalb des ISubscriber.ProcessEvent Methode:

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

In welcher DLL können diese Klassen gefunden werden? – Greg

+0

Dies scheint nur serverseitig zu funktionieren. Gibt es keine Möglichkeit, über eine Client-Anwendung darauf zuzugreifen? –

+0

Dieses Codebeispiel könnte mit größer sein, da es viele Variablen gibt, die nicht aufgelöst werden .. :-( –

0

Ich bin nicht vertraut mit der Scrum 2.2 Vorlage, aber die Arbeiten sind die gleichen für CMMI oder Scrum Vorlagen, wenn es um TFS Work Item Tracking kommt.

versuchen, etwas wie folgt aus:

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

Je nach dem tatsächlichen Namen der Spalte angegeben, in der Work Item Template XML-Datei. Hoffe das hilft.

+0

TFS 2012 mehr Teams unterstützt, und die Kanban-Säule ist einzigartig pro Team in der Scrum-Vorlage, so dass es nicht möglich ist, diese Spalten mit dem Index für den Zugriff auf Oper Tor. – JoeGaggler

1

Wenn Sie bereit sind, in die Datenbank graben Sie diese Informationen schürfen können aus. Ich verstehe noch nicht vollständig die Modellierung der Teams in TFS, aber zuerst müssen Sie das Feld id das Team von Interesse arbeiten, ist der Kanban Zustand bei der Speicherung wie folgt (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% 

Dann XXXXXXXX ersetzen unten mit dem entdeckten fieldID oben


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 
Verwandte Themen