2012-01-17 4 views
10

Ho un artefatto specifico in TFS, diciamo il changeset "123", che ha l'URI "vstfs: /// VersionControl/Changeset/123". Mi sono reso conto che il collegamento "http://tfs:8080/tfs/web/UI/Pages/Scc/ViewChangeset.aspx?changeset=123" aprirà la vista dei dettagli del changeset utilizzando il browser web.Come posso aprire la vista della finestra di dialogo dei dettagli del changeset TFS utilizzando un componente aggiuntivo di Visual Studio?

Quello che mi piacerebbe fare è aprire la vista dei dettagli del changeset all'interno di visual studio. Il luogo in cui sto incorporando questo è una sezione personalizzata all'interno del riepilogo della build. Ho implementato questa sezione personalizzata come plugin VisualStudio. Ecco una foto:

enter image description here

La sezione "build di rilascio" è su misura e fornirà informazioni su un e-mail che sarà inviata a tutti, una volta che tale accumulo viene rilasciato.

Il changeset 627 all'interno di questa sezione è un controllo Button che è stato trasformato automaticamente in un collegamento. Il "Click" -Handler dietro il pulsante funziona. Il codice al momento è simile al seguente:

... 
string link = buildDetailView.TeamProjectCollection.Uri.AbsoluteUri.Substring(0, buildDetailView.TeamProjectCollection.Uri.AbsoluteUri.LastIndexOf('/')); 
link += "/web/UI/Pages/Scc/ViewChangeset.aspx?changeset="; 
link += ((Button)sender).Content; 

Process.Start(new ProcessStartInfo(link)); 
e.Handled = true; 
... 

Questo codice aprirà una nuova scheda Browser e mostrerà la pagina corretta. Tuttavia, mi piacerebbe che aprisse i dettagli del changeset all'interno di Visual Studio. Proprio come il pulsante in basso nella sezione "Associated changesets" fa. Quando fai clic sul link "Changeset 627", verrà aperto quel changeset all'interno di Visual Studio.

EDIT 1

può essere un po 'più chiaro cosa esattamente il risultato desiderato è, se vi posto una foto di essa. La finestra "Dettagli changeset" è ciò che vorrei aprire utilizzando l'API.

enter image description here

+0

I Non sono sicuro al 100% e non ho il codice qui, dove ho fatto qualcosa di simile, ma penso che sia necessario dare un'occhiata all'SDK di Visual Studio.Cercherò di ricordare di dare un'occhiata al mio vecchio codice questa sera, se non avessi ricevuto una risposta fino ad allora. – Feroc

+0

@Feroc grazie, darò un'occhiata all'SDK. – Christian

+0

+1: molto interessante. Ho aggiunto in una soluzione un semplice file TXT che conteneva il tuo link 'http: // tfs: 8080/tfs/web/UI/Pages/Scc/ViewChangeset.aspx? Changeset = 123" '. Quando l'ho aperto nell'IDE , ha aperto il changeset con CTRL + clic all'interno di VS - proprio come è necessario.È anche questo il tuo caso? In caso contrario - questo dovrebbe essere monitorato nel contesto Impostazioni VS. – pantelif

risposta

14

Date un'occhiata alle seguenti pubblicazioni:

Essenzialmente , è necessario fare riferimento ai seguenti assembly:

Microsoft.TeamFoundation.Client 
Microsoft.TeamFoundation.VersionControl.Client 
Microsoft.TeamFoundation.VersionControl.Controls 
Microsoft.VisualStudio.TeamFoundation 
Microsoft.VisualStudio.TeamFoundation.Client 
Microsoft.VisualStudio.TeamFoundation.VersionControl 

Quindi è possibile utilizzare VersionControlExt.ViewChangesetDetails(int changesetId) per visualizzare un insieme di modifiche specifica il componente aggiuntivo:

VersionControlExt vce; 
vce = _applicationObject.GetObject("Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt") as VersionControlExt; 
vce.ViewChangesetDetails(changesetId); 

Questo fa apparire una finestra di dialogo che mostra all'utente tutti i dettagli su un particolare insieme di modifiche. (E 'la stessa finestra di dialogo che appare se l'utente seleziona "Dettagli ..." nella finestra di dialogo "Trova Changeset".)

+0

Grazie mille per questo buon esempio, funziona perfettamente! Grazie – Christian

0

In VS 2015 è possibile utilizzare il seguente codice preso dal here

public void ViewChangesetDetails(int changesetId) 
{ 
     ITeamExplorer teamExplorer = this.GetService<ITeamExplorer>(); 
     if (teamExplorer != null) 
     { 
      teamExplorer.NavigateToPage(new Guid(TeamExplorerPageIds.ChangesetDetails), changesetId); 
     } 
} 
Problemi correlati