2011-02-07 12 views
5

Mamy niestandardowy proces kompilacji (nie używając MS Build) i podczas tego procesu dodaję "fałszywą" kompilację do globalnej listy kompilacji. Powodem, dla którego to robię, jest to, że możesz wybrać kompilację dla danego elementu pracy (znalezionego w kompilacji). Mamy niestandardowe pole, wbudowane w kompilację, które ma na celu pokazanie, która kompilacja tego elementu pracy została naprawiona. Mam problem z ustaleniem sposobu aktualizacji tego pola programowo. Chodzi o to, że będę miał małą aplikację, która zrobi to, że zadzwonię podczas procesu kompilacji, znajdując wszystkie elementy pracy od ostatniej kompilacji, a następnie aktualizując pole dla tych elementów pracy. Jakieś pomysły?Jak programowo zaktualizować niestandardowe pole TFS?

+0

Można bardziej szczegółowo opisać część listy globalnych kompilacji. Czy używasz niestandardowego szablonu kompilacji (w Windows Workflow Foundation)? Czy dodajesz do zmiennej lub argumentu w tym szablonie? – LWoodyiii

+0

Przepraszamy, używam globalnej listy w TFS. Nie używam szablonu kompilacji, używamy produktu o nazwie Automated Build Studio dla samej kompilacji. Chciałem tylko napisać osobną aplikację, aby zadzwonić z ABS dla tej funkcji. – Nick

Odpowiedz

13

Coś jak to powinno działać dla Ciebie:

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();  
} 

Przykładem nazywając to byłoby:

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

Zmienna fieldToUpdate powinna być nazwa pola, a nie refname (tj Integracja Kompilacja, a nie Microsoft.VSTS.Build.IntegrationBuild)

Prawdopodobnie można uciec przy użyciu PartialOpen(), ale nie jestem pewien.

Prawdopodobnie będziesz musiał dodać Microsoft.TeamFoundation.Client do swojego projektu. (A może Microsoft.TeamFoundation.Common)

+0

Dzięki, właśnie tego szukałem! – Nick

+0

+1 Zastanawiam się, dlaczego ta odpowiedź nigdy nie została poddana pod głosowanie? –

+5

Nie jestem pewien, czy coś zmienili, czy wszyscy po prostu to wymyślili, ale musisz zrobić: workItem.Fields [fieldToUpdate]. Wartość w TFS 2012 inaczej otrzymasz komunikat o tym, że zbiór pól jest tylko do odczytu; –

4

To zmieniło dla TFS 2012, w zasadzie trzeba dodać workItem.Fields [fieldToUpdate] .Value

zaktualizowana wersja co @Vaccano napisał.

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();  
} 
Powiązane problemy