2012-01-17 8 views
10

Tengo un artefacto específico en TFS, digamos el conjunto de cambios "123", que tiene el URI "vstfs: /// VersionControl/Changeset/123". Me di cuenta de que el enlace "http://tfs:8080/tfs/web/UI/Pages/Scc/ViewChangeset.aspx?changeset=123" abrirá la vista de detalles del conjunto de cambios usando el navegador web.¿Cómo puedo abrir la vista de diálogo de detalles del conjunto de cambios de TFS usando un complemento de Visual Studio?

Lo que me gustaría hacer es abrir la vista de detalles del conjunto de cambios dentro de Visual Studio. El lugar donde estoy incrustando esto es una sección personalizada dentro del resumen de compilación. Implementé esta sección personalizada como un complemento de VisualStudio. Aquí está una foto:

enter image description here

La sección "versión de lanzamiento" es por encargo y proporcionará información acerca de un correo electrónico que se envía a todo el mundo, una vez que se dio a conocer un ejemplo de construcción.

El Changeset 627 dentro de esta sección es un control de botón que se ha transformado automáticamente en un enlace. El "clic" -Handler detrás del botón funciona. El código actualmente se ve así:

... 
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; 
... 

Este código se abrirá una nueva pestaña del navegador y mostrar la página correcta. Sin embargo, me gustaría que abra los detalles del conjunto de cambios dentro de Visual Studio. Al igual que el botón en la parte inferior en la sección "Conjuntos de cambios asociados" sí lo hace. Al hacer clic en el enlace "Changeset 627", se abrirá ese conjunto de cambios dentro de Visual Studio.

EDIT 1

Puede ser un poco más claro qué es exactamente el resultado deseado es, si puedo enviar una foto de ella. La ventana "Detalles de los cambios" es lo que me gustaría abrir con la API.

enter image description here

+0

I no estoy 100% seguro y no tengo el código aquí, donde hice algo similar, pero creo que debe echarle un vistazo al Visual Studio SDK.Trataré de recordar echarle un vistazo a mi código anterior esta noche, si no obtuviste una respuesta hasta entonces. – Feroc

+0

@Feroc gracias, echaré un vistazo al SDK. – Christian

+0

+1: muy interesante. Agregué en una solución un archivo TXT simple que contenía su enlace 'http: // tfs: 8080/tfs/web/UI/Pages/Scc/ViewChangeset.aspx? Changeset = 123" '. Cuando lo abrí en el IDE , abrió el Changeset con CTRL + clic dentro de VS - al igual que necesita. ¿Es este su caso también? Si no, esto debe rastrearse en contexto VS-settings. – pantelif

Respuesta

14

Tome un vistazo a las siguientes publicaciones en el blog:

Esencialmente , necesita referencias a los siguientes conjuntos:

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

continuación, puede utilizar VersionControlExt.ViewChangesetDetails(int changesetId) para mostrar un conjunto de cambios específica de su complemento:

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

Esto muestra un cuadro de diálogo que muestra al usuario todos los detalles acerca de un conjunto de cambios en particular. (Es el mismo cuadro de diálogo que aparece si el usuario selecciona "Detalles ..." en el diálogo "Encuentra Cambios".)

+0

Muchas gracias por este buen ejemplo. ¡Funciona perfectamente bien! Gracias – Christian

0

En VS 2015 se puede utilizar el siguiente código tomado de here

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