2013-08-12 13 views
9

C'è un modo per accedere a livello di codice alla "colonna Kanban" per un oggetto WorkItem che utilizza l'API TFS 2012?Accesso alla colonna Kanban (un campo specifico della squadra) per un elemento di lavoro

Utilizzando il modello Scrum 2.2, la cronologia di un oggetto Bug o Product Backlog mostra "[MyProject \ MyTeam] Kanban Column" come un campo modificato ogni volta che un elemento di lavoro viene trascinato tra le colonne Kanban sulla Board, ma il campo è non accessibile quando si richiama in modo specifico un oggetto di lavoro tramite l'API TFS.

Viene inoltre visualizzato come un campo modificato nell'oggetto WorkItemChangedEvent quando si implementa il metodo ProcessEvent nell'interfaccia Microsoft.TeamFoundation.Framework.Server.ISubscriber.

Soluzione: Un collega ha trovato un blogpost sulla creazione di un campo personalizzato di sola lettura a persistere il valore della colonna Kanban, approfittando della WorkItemChangedEvent per catturare l'ultimo valore. È quindi possibile interrogare su questa colonna. Un problema con questo approccio è che è possibile tenere traccia solo della colonna Kanban di una singola squadra.

Aggiornamento: Secondo questo blogpost, la Colonna Kanban non è un campo, piuttosto una "WIT Extension". Questo può aiutare a portare a una risposta.

risposta

6

Ho trovato un modo per leggere il valore utilizzando l'API TFS 2013, all'interno del metodo 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

In quale dll possono essere trovate queste classi? – Greg

+0

Sembra funzionare solo sul lato server. Non c'è modo di accedervi da un'applicazione client? –

+0

Questo esempio di codice potrebbe essere più grande in quanto ci sono molte variabili che non si risolvono .. :-( –

0

Non ho familiarità con il modello Scrum 2.2, ma i lavori sono gli stessi per i modelli CMMI o Scrum quando si tratta del tracciamento dell'elemento di lavoro TFS.

provare qualcosa di simile:

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

seconda del nome effettivo della colonna, specificata nel file XML Template elemento di lavoro. Spero che questo ti aiuti.

+0

TFS 2012 supporta più squadre, e la Colonna Kanban è unico per ogni squadra nel modello Scrum, quindi non è possibile accedere a queste colonne utilizzando il pedice musica lirica tor. – JoeGaggler

1

Se siete disposti a scavare nel database si può Mine Questa informazione su. Non capisco pienamente la modellazione delle squadre in TFS ancora, ma prima è necessario capire quale id il team di interesse memorizza lo stato Kanban nel modo seguente (TFS 2012) campo:


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% 

quindi sostituire XXXXXXXX di seguito con la FieldId scoperto sopra


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 
Problemi correlati