2011-02-07 12 views
5

Abbiamo un processo di compilazione personalizzato (non utilizzando MS Build) e durante tale processo aggiungo una build "falsa" all'elenco di build globali. Il motivo per cui lo sto facendo è che puoi selezionare la build per un determinato oggetto di lavoro (trovato in build). Abbiamo un campo personalizzato, incluso nella compilazione, che ha lo scopo di mostrare in quale build è stato corretto l'elemento di lavoro. Non riesco a capire come aggiornare questo campo a livello di codice. L'idea è che avrò una piccola app che farà ciò che chiamerò durante il processo di costruzione, trovando tutti gli elementi di lavoro dall'ultima build, quindi aggiornando il campo per quegli elementi di lavoro. Qualche idea?Come aggiornare un campo TFS personalizzato a livello di programmazione

+0

Puoi essere più specifico sulla parte della lista delle build globali. Stai usando un modello di build personalizzato (in Windows Workflow Foundation)? Stai aggiungendo a una variabile o argomento in quel modello? – LWoodyiii

+0

Siamo spiacenti, sto usando l'elenco globale in TFS. Non sto usando un modello di build, stiamo usando un prodotto chiamato Automated Build Studio per la build vera e propria. Stavo per scrivere un'app standalone per chiamare da ABS questa funzionalità. – Nick

risposta

13

Qualcosa del genere dovrebbe funzionare per voi:

public void UpdateTFSValue(string tfsServerUrl, string fieldToUpdate, 
    string valueToUpdateTo, int workItemID) 
{ 
    // Connect to the TFS Server 
    TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(tfsUri)); 
    // Connect to the store of work items. 
    _store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
    // Grab the work item we want to update 
    WorkItem workItem = _store.GetWorkItem(workItemId); 
    // Open it up for editing. (Sometimes PartialOpen() works too and takes less time.) 
    workItem.Open(); 
    // Update the field. 
    workItem.Fields[fieldToUpdate] = valueToUpdateTo; 
    // Save your changes. If there is a constraint on the field and your value does not 
    // meet it then this save will fail. (Throw an exception.) I leave that to you to 
    // deal with as you see fit. 
    workItem.Save();  
} 

Un esempio di chiamare questo sarebbe:

UpdateTFSValue("http://tfs2010dev:8080/tfs", "Integration Build", "Build Name", 1234); 

La variabile fieldToUpdate dovrebbe essere il nome del campo, non il refname (vale a dire Integrazione Build, non Microsoft.VSTS.Build.IntegrationBuild)

Probabilmente si potrebbe farcela usando PartialOpen(), ma non sono sicuro.

Probabilmente sarà necessario aggiungere Microsoft.TeamFoundation.Client al progetto. (E forse Microsoft.TeamFoundation.Common)

+0

Grazie, questo è esattamente quello che stavo cercando! – Nick

+0

+1 Chiedo perché questa risposta non è mai stata votata? –

+5

Non sono sicuro se hanno cambiato qualcosa o se tutti lo capiscono ma è necessario: workItem.Fields [fieldToUpdate] .Value in TFS 2012 altrimenti si otterrà un errore sulla raccolta dei campi in sola lettura; –

4

Questo è cambiato per TFS 2012, fondamentalmente si deve aggiungere workItem.Fields [fieldToUpdate] .Value

versione aggiornata di quello che ha scritto @Vaccano.

public void UpdateTFSValue(string tfsServerUrl, string fieldToUpdate, 
    string valueToUpdateTo, int workItemID) 
{ 
    // Connect to the TFS Server 
    TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(tfsUri)); 
    // Connect to the store of work items. 
    _store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
    // Grab the work item we want to update 
    WorkItem workItem = _store.GetWorkItem(workItemId); 
    // Open it up for editing. (Sometimes PartialOpen() works too and takes less time.) 
    workItem.Open(); 
    // Update the field. 
    workItem.Fields[fieldToUpdate].Value = valueToUpdateTo; 
    // Save your changes. If there is a constraint on the field and your value does not 
    // meet it then this save will fail. (Throw an exception.) I leave that to you to 
    // deal with as you see fit. 
    workItem.Save();  
} 
Problemi correlati