Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Visual Studio 2010, puede utilizar el nodo Conexiones de SharePoint del Explorador de servidores para ver componentes en sitios de SharePoint. Sin embargo, hay componentes que el Explorador de servidores no muestra de forma predeterminada. En este tutorial, ampliará el Explorador de servidores de forma que muestre la galería de elementos web en cada sitio de SharePoint conectado.
En este tutorial se muestran las siguientes tareas:
Crear una extensión de Visual Studio que extiende el Explorador de servidores de las maneras siguientes:
Agrega un nuevo nodo Galería de elementos web bajo cada nodo de sitio de SharePoint en el Explorador de servidores. Este nuevo nodo contiene nodos secundarios que representan cada elemento web en la galería de elementos web del sitio.
Define un nuevo tipo de nodo que representa una instancia del elemento web. Este nuevo tipo de nodo es la base de los nodos secundarios bajo el nuevo nodo Galería de elementos web. El nuevo tipo de nodo Elemento web muestra información en la ventana Propiedades sobre el elemento web que representa. El tipo de nodo también incluye un elemento de menú contextual personalizado que puede utilizar como punto de partida de otras tareas relacionadas con el elemento web.
Crear dos comandos de SharePoint personalizados a los que llama el ensamblado de la extensión. Los comandos de SharePoint son métodos a los que pueden llamar los ensamblados de la extensión para utilizar las API del modelo de objetos de servidor de SharePoint. En este tutorial, creará comandos que recuperan información del elemento web del sitio de SharePoint local en el equipo de desarrollo. Para obtener más información, vea Llamar a los modelos de objetos de SharePoint.
Compilar un paquete de extensión de Visual Studio (VSIX) para implementar la extensión.
Depurar y probar la extensión.
Nota
Para obtener una versión alternativa de este tutorial que utiliza el modelo de objetos de cliente de SharePoint en lugar del modelo de objetos de servidor, vea Tutorial: Llamar al modelo de objetos de cliente de SharePoint en una extensión del Explorador de servidores.
Requisitos previos
Necesitará los componentes siguientes en el equipo de desarrollo para completar este tutorial:
Ediciones compatibles de Microsoft Windows, SharePoint y Visual Studio. Para obtener más información, vea Requisitos para desarrollar soluciones de SharePoint.
Visual Studio 2010 SDK. En este tutorial se utiliza la plantilla Proyecto VSIX del SDK para crear un paquete VSIX e implementar el elemento. Para obtener más información, vea Extender la Herramientas de SharePoint en Visual Studio.
El conocimiento de los siguientes conceptos es útil, aunque no necesario, para completar el tutorial.
Utilizar el modelo de objetos de servidor de SharePoint. Para obtener más información, vea Utilizar el modelo de objetos de servidor de SharePoint Foundation.
Elementos web en soluciones de SharePoint. Para obtener más información, vea Información general sobre elementos web.
Crear los proyectos
Para completar este tutorial, debe crear tres proyectos:
Un proyecto VSIX para crear el paquete VSIX e implementar la extensión.
Un proyecto de biblioteca de clases que implemente la extensión. Este proyecto debe tener como destino .NET Framework 4.
Un proyecto de biblioteca de clases que define los comandos de SharePoint personalizados. Este proyecto debe tener como destino .NET Framework 3.5.
Comience el tutorial creando ambos proyectos.
Para crear el proyecto VSIX
Inicie Visual Studio.
En el menú Archivo, elija Nuevo y haga clic en Proyecto.
En el cuadro de diálogo Nuevo proyecto, expanda el nodo Visual Basic o Visual C# y, a continuación, seleccione el nodo Extensibilidad.
Nota
El nodo Extensibilidad solo está disponible si instala Visual Studio 2010 SDK. Para obtener más información, vea la sección anterior sobre los requisitos previos.
En el cuadro combinado de la parte superior del cuadro de diálogo, seleccione .NET Framework 4.
Seleccione la plantilla Proyecto VSIX.
En el cuadro Nombre, escriba NodoElementoWeb.
Haga clic en Aceptar.
Visual Studio agrega el proyecto NodoElementoWeb al Explorador de soluciones.
Para crear la extensión de proyecto
En el Explorador de soluciones, haga clic con el botón secundario en el nodo de la solución, después haga clic en Agregar y, a continuación, en Nuevo proyecto.
Nota
En los proyectos de Visual Basic, el nodo de la solución aparece en el Explorador de soluciones solo cuando se activa la casilla Mostrar solución siempre en General, Proyectos y soluciones, Opciones (Cuadro de diálogo).
En el cuadro de diálogo Nuevo proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.
En el cuadro combinado de la parte superior del cuadro de diálogo, seleccione .NET Framework 4.
Seleccione la plantilla de proyecto Biblioteca de clases.
En el cuadro Nombre, escriba ExtensiónNodoElementoWeb.
Haga clic en Aceptar.
Visual Studio agrega el proyecto ExtensiónNodoElementoWeb a la solución y abre el archivo de código predeterminado Class1.
Elimine el archivo de código Class1 del proyecto.
Para crear el proyecto Comandos de SharePoint
En el Explorador de soluciones, haga clic con el botón secundario en el nodo de la solución, después haga clic en Agregar y, a continuación, en Nuevo proyecto.
Nota
En los proyectos de Visual Basic, el nodo de la solución aparece en el Explorador de soluciones solo cuando se activa la casilla Mostrar solución siempre en General, Proyectos y soluciones, Opciones (Cuadro de diálogo).
En el cuadro de diálogo Nuevo proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.
En el cuadro combinado de la parte superior del cuadro de diálogo, seleccione .NET Framework 3.5.
Seleccione la plantilla de proyecto Biblioteca de clases.
En el cuadro Nombre, escriba WebPartCommands.
Haga clic en Aceptar.
Visual Studio agrega el proyecto WebPartCommands a la solución y abre el archivo de clase predeterminado Class1.
Elimine el archivo de código Class1 del proyecto.
Configurar los proyectos
Antes de escribir el código para crear la extensión, tiene que agregar los archivos de código y las referencias de ensamblado al proyecto y configurar los valores del proyecto.
Para configurar el proyecto ExtensiónNodoElementoWeb
En el proyecto ExtensiónNodoElementoWeb, agregue cuatro archivos de código con los nombres siguientes:
SiteNodeExtension
WebPartNodeTypeProvider
WebPartNodeInfo
WebPartCommandIds
Haga clic en la opción Agregar referencia del menú Proyecto.
En la pestaña .NET, presione CTRL y seleccione los ensamblados siguientes y, a continuación, haga clic en Aceptar:
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
System.Windows.Forms
En el Explorador de soluciones, haga clic con el botón secundario en el nodo del proyecto ExtensiónNodoElementoWeb y, a continuación, haga clic en Propiedades.
Se abrirá el Diseñador de proyectos.
Haga clic en la pestaña Aplicación.
En el cuadro (C#) Espacio de nombres predeterminado o Espacio de nombres de la raíz (Visual Basic), escriba ServerExplorer.SharePointConnections.NodoElementoWeb.
Para configurar el proyecto WebPartCommands
En el proyecto WebPartCommands, agregue un archivo de código denominado WebPartCommands.
En el Explorador de soluciones, seleccione el nodo del proyecto WebPartCommands.
En el menú Proyecto, seleccione Agregar elemento existente.
En el cuadro de diálogo Agregar elemento existente, vaya a la carpeta que contiene los archivos de código del proyecto ExtensiónNodoElementoWeb.
Seleccione los archivos de código WebPartCommandIds y WebPartNodeInfo.
Haga clic en el menú desplegable del botón Agregar y seleccione Agregar como vínculo.
Visual Studio agrega los archivos de código al proyecto WebPartCommands como vínculos. Esto significa que los archivos de código se encuentran en el proyecto ExtensiónNodoElementoWeb, pero el código de los archivos también se compila en el proyecto WebPartCommands.
Haga clic en la opción Agregar referencia del menú Proyecto.
En la pestaña .NET, presione CTRL y seleccione los ensamblados siguientes y, a continuación, haga clic en Aceptar:
Microsoft.SharePoint
Microsoft.VisualStudio.SharePoint.Commands
En el Explorador de soluciones, haga clic con el botón secundario en el nodo del proyecto WebPartCommands y, a continuación, haga clic en Propiedades.
Se abrirá el Diseñador de proyectos.
Haga clic en la pestaña Aplicación.
En el cuadro (C#) Espacio de nombres predeterminado o Espacio de nombres de la raíz (Visual Basic), escriba ServerExplorer.SharePointConnections.NodoElementoWeb.
Crear iconos para los nuevos nodos
Cree dos iconos para la extensión Explorador de servidores: uno para el nuevo nodo Galería de elementos web y otro para cada nodo secundario bajo el nodo Galería de elementos web. Más adelante en este tutorial, escribirá código que asocie estos iconos a los nodos.
Para crear iconos para los nodos
En el Explorador de soluciones, haga clic con el botón secundario en el nodo del proyecto ExtensiónNodoElementoWeb y, a continuación, haga clic en Propiedades.
En el menú Proyecto, seleccione Propiedades de ExtensiónNodoElementoWeb.
Se abrirá el Diseñador de proyectos.
Haga clic en la pestaña Recursos.
Haga clic Este proyecto no contiene ningún archivo de configuración predeterminado. Haga clic aquí para crear uno.
Visual Studio crea un archivo de recursos y lo abre en el diseñador.
En la parte superior del diseñador, haga clic en la flecha de lista desplegable del botón Agregar y haga clic en Agregar nuevo icono.
Escriba NodoElementoWeb como nombre del nuevo icono y haga clic en Agregar.
El nuevo icono se abre en el Editor de imágenes.
Modifique la versión 16x16 del icono para que tenga un diseño que se reconozca con facilidad.
Seleccione la versión 32x32 del icono.
En el menú Imagen, haga clic en Eliminar tipo de imagen.
Repita los pasos 5 a 9 para agregar un segundo icono a los recursos del proyecto. Denomine este icono Elemento web.
En el Explorador de soluciones, bajo la carpeta Recursos del proyecto ExtensiónNodoElementoWeb, seleccione NodoElementoWeb.ico.
En la ventana Propiedades, seleccione la lista desplegable situada junto a Acción de compilación y, a continuación, cambie el valor por Recurso incrustado.
Repita los últimos dos pasos con ElementoWeb.ico.
Agregar el nodo Galería de elementos web al Explorador de servidores
Cree una clase que agregue el nuevo nodo Galería de elementos web a cada nodo del sitio de SharePoint. Para agregarlo, la clase implementa la interfaz IExplorerNodeTypeExtension. Implemente esta interfaz para extender el comportamiento de un nodo existente en el Explorador de servidores, como agregar un nuevo nodo secundario a un nodo.
Para agregar el nodo Galería de elementos web al Explorador de servidores
En el proyecto ExtensiónNodoElementoWeb, haga doble clic en el archivo de código SiteNodeExtension.
Pegue el código siguiente en este archivo.
Nota
Tras agregar este código, el proyecto tendrá algunos errores de compilación. Estos errores desaparecerán al agregar código en pasos posteriores.
Imports System.Collections.Generic Imports System.ComponentModel.Composition Imports Microsoft.VisualStudio.SharePoint.Explorer Namespace ServerExplorer.SharePointConnections.WebPartNode ' Export attribute: Enables Visual Studio to discover and load this extension. ' ExplorerNodeType attribute: Indicates that this class extends SharePoint site nodes in Server Explorer. ' WebPartNodeTypeProvider class: Represents an extension of SharePoint site nodes in Server Explorer. <Export(GetType(IExplorerNodeTypeExtension))> _ <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _ Friend Class SiteNodeExtension Implements IExplorerNodeTypeExtension Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _ Implements IExplorerNodeTypeExtension.Initialize ' The NodeChildrenRequested event is raised when the user expands the ' SharePoint site node in Server Explorer. AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested End Sub ' Creates the new Web Part Gallery node with the specified icon. Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs) ' The CreateWebPartNodes argument is a delegate that Visual Studio calls ' to create the child nodes under the Web Part Gallery node. e.Node.ChildNodes.AddFolder("Web Part Gallery", My.Resources.WebPartsNode.ToBitmap(), _ AddressOf CreateWebPartNodes) End Sub ' Creates all of the individual Web Part nodes under the new Web Part Gallery node. Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode) ' Call the custom SharePoint command to get items from the Web Part gallery. Dim webParts = parentNode.Context.SharePointConnection.ExecuteCommand(Of WebPartNodeInfo())( _ WebPartCommandIds.GetWebParts) If webParts IsNot Nothing Then For Each webPart As WebPartNodeInfo In webParts ' Create a new annotation object to store the current Web Part item with the new node. Dim annotations = New Dictionary(Of Object, Object)() annotations.Add(GetType(WebPartNodeInfo), webPart) ' Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _ webPart.Name, annotations) Next End If End Sub End Class End Namespaceusing System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.VisualStudio.SharePoint.Explorer; namespace ServerExplorer.SharePointConnections.WebPartNode { // Enables Visual Studio to discover and load this extension. [Export(typeof(IExplorerNodeTypeExtension))] // Indicates that this class extends SharePoint site nodes in Server Explorer. [ExplorerNodeType(ExplorerNodeTypes.SiteNode)] // Represents an extension of SharePoint site nodes in Server Explorer. internal class SiteNodeExtension : IExplorerNodeTypeExtension { public void Initialize(IExplorerNodeType nodeType) { // The NodeChildrenRequested event is raised when the user expands the // SharePoint site node in Server Explorer. nodeType.NodeChildrenRequested += NodeChildrenRequested; } // Creates the new Web Part Gallery node with the specified icon. private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e) { // The CreateWebPartNodes argument is a delegate that Visual Studio calls // to create the child nodes under the Web Part Gallery node. e.Node.ChildNodes.AddFolder("Web Part Gallery", Properties.Resources.WebPartsNode.ToBitmap(), CreateWebPartNodes); } // Creates all of the individual Web Part nodes under the new Web Part Gallery node. private void CreateWebPartNodes(IExplorerNode parentNode) { // Call the custom SharePoint command to get items from the Web Part gallery. var webParts = parentNode.Context.SharePointConnection.ExecuteCommand<WebPartNodeInfo[]>( WebPartCommandIds.GetWebParts); if (webParts != null) { foreach (WebPartNodeInfo webPart in webParts) { // Create a new annotation object to store the current Web Part item with the new node. var annotations = new Dictionary<object, object>() { { typeof(WebPartNodeInfo), webPart } }; // Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, webPart.Name, annotations); } } } } }
Definir un tipo de nodo que represente un elemento web
Cree una clase que defina un nuevo tipo de nodo que represente un elemento web. Visual Studio utiliza este nuevo tipo de nodo para mostrar los nodos secundarios bajo el nodo Galería de elementos web. Cada uno de estos nodos secundarios representa un elemento web único en el sitio de SharePoint.
Para definir el nuevo tipo de nodo, la clase implementa la interfaz IExplorerNodeTypeProvider. Implemente esta interfaz para definir un nuevo tipo de nodo en el Explorador de servidores todas las veces que desee.
Para definir el tipo de nodo Elemento web
En el proyecto ExtensiónNodoElementoWeb, haga doble clic en el archivo de código WebPartNodeTypeProvder.
Pegue el código siguiente en este archivo.
Imports System Imports System.Collections.Generic Imports System.Windows.Forms Imports System.ComponentModel.Composition Imports Microsoft.VisualStudio.SharePoint Imports Microsoft.VisualStudio.SharePoint.Explorer Namespace ServerExplorer.SharePointConnections.WebPartNode ' Export attribute: Enables Visual Studio to discover and load this extension. ' ExplorerNodeType attribute: Specifies the ID for this new node type. ' WebPartNodeTypeProvider class: Defines a new node type that represents a Web Part on a SharePoint site. <Export(GetType(IExplorerNodeTypeProvider))> _ <ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)> _ Friend Class WebPartNodeTypeProvider Implements IExplorerNodeTypeProvider Friend Const WebPartNodeTypeId As String = "Contoso.WebPart" Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _ Implements IExplorerNodeTypeProvider.InitializeType typeDefinition.DefaultIcon = My.Resources.WebPart.ToBitmap() typeDefinition.IsAlwaysLeaf = True AddHandler typeDefinition.NodePropertiesRequested, AddressOf NodePropertiesRequested End Sub ' Retrieves properties that are displayed in the Properties window when ' a Web Part node is selected. Private Sub NodePropertiesRequested(ByVal Sernder As Object, _ ByVal e As ExplorerNodePropertiesRequestedEventArgs) Dim nodeInfo = e.Node.Annotations.GetValue(Of WebPartNodeInfo)() ' Call the custom SharePoint command to get the Web Part properties. Dim properties As Dictionary(Of String, String) = _ e.Node.Context.SharePointConnection.ExecuteCommand( _ Of WebPartNodeInfo, Dictionary(Of String, String))( WebPartCommandIds.GetWebPartProperties, nodeInfo) Dim propertySource As Object = e.Node.Context.CreatePropertySourceObject(properties) e.PropertySources.Add(propertySource) End Sub End Class End Namespaceusing System; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel.Composition; using Microsoft.VisualStudio.SharePoint; using Microsoft.VisualStudio.SharePoint.Explorer; namespace ServerExplorer.SharePointConnections.WebPartNode { // Enables Visual Studio to discover and load this extension. [Export(typeof(IExplorerNodeTypeProvider))] // Specifies the ID for this new node type. [ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)] // Defines a new node type that represents a Web Part on a SharePoint site. internal class WebPartNodeTypeProvider : IExplorerNodeTypeProvider { internal const string WebPartNodeTypeId = "Contoso.WebPart"; public void InitializeType(IExplorerNodeTypeDefinition typeDefinition) { typeDefinition.DefaultIcon = Properties.Resources.WebPart.ToBitmap(); typeDefinition.IsAlwaysLeaf = true; typeDefinition.NodePropertiesRequested += NodePropertiesRequested; } // Retrieves properties that are displayed in the Properties window when // a Web Part node is selected. private void NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e) { var webPartNodeInfo = e.Node.Annotations.GetValue<WebPartNodeInfo>(); // Call the custom SharePoint command to get the Web Part properties. Dictionary<string, string> properties = e.Node.Context.SharePointConnection.ExecuteCommand< WebPartNodeInfo, Dictionary<string, string>>( WebPartCommandIds.GetWebPartProperties, webPartNodeInfo); object propertySource = e.Node.Context.CreatePropertySourceObject(properties); e.PropertySources.Add(propertySource); } } }
Definir la clase Web Part Data
Defina una clase que contenga los datos de un elemento web único del sitio de SharePoint. Más adelante en este tutorial, creará un comando de SharePoint personalizado que recupera los datos de cada elemento web del sitio y después asignará los datos a instancias de esta clase.
Para definir la clase Web Part Data
En el proyecto NodoElementoWeb, haga doble clic en el archivo de código WebPartNodeInfo.
Pegue el código siguiente en este archivo.
Imports System Namespace ServerExplorer.SharePointConnections.WebPartNode ' Contains basic data about a single Web Part on the SharePoint site. This class is ' serializable so that instances of it can be sent between the WebPartNode and ' WebPartCommands assemblies. <Serializable()> _ Public Class WebPartNodeInfo Private siteIdValue As Guid Public Property SiteId As Guid Get Return siteIdValue End Get Set(ByVal value As Guid) siteIdValue = value End Set End Property Private idValue As Integer Public Property Id As Integer Get Return idValue End Get Set(ByVal value As Integer) idValue = value End Set End Property Private uniqueIdValue As Guid Public Property UniqueId As Guid Get Return uniqueIdValue End Get Set(ByVal value As Guid) uniqueIdValue = value End Set End Property Private nameValue As String Public Property Name As String Get Return nameValue End Get Set(ByVal value As String) nameValue = value End Set End Property Private imageUrlValue As String Public Property ImageUrl As String Get Return imageUrlValue End Get Set(ByVal value As String) imageUrlValue = value End Set End Property End Class End Namespaceusing System; namespace ServerExplorer.SharePointConnections.WebPartNode { // Contains basic data about a single Web Part on the SharePoint site. This class is // serializable so that instances of it can be sent between the WebPartNode and // WebPartCommands assemblies. [Serializable] public class WebPartNodeInfo { public Guid SiteId { get; set; } public int Id { get; set; } public Guid UniqueId { get; set; } public string Name { get; set; } public string ImageUrl { get; set; } } }
Definir los identificadores del comando de SharePoint
Defina varias cadenas que identifican los comandos de SharePoint personalizados. Implementará estos comandos más adelante en este tutorial.
Para definir los identificadores de comando
En el proyecto ExtensiónNodoElementoWeb, haga doble clic en el archivo de código WebPartCommandIds.
Pegue el código siguiente en este archivo.
Namespace ServerExplorer.SharePointConnections.WebPartNode Public Class WebPartCommandIds Public Const GetWebParts As String = "WebPart.GetWebParts" Public Const GetWebPartProperties As String = "WebPart.GetProperties" End Class End Namespacenamespace ServerExplorer.SharePointConnections.WebPartNode { public static class WebPartCommandIds { public const string GetWebParts = "WebPart.GetWebParts"; public const string GetWebPartProperties = "WebPart.GetProperties"; } }
Crear los comandos de SharePoint personalizados
Cree comandos personalizados que llamen al modelo de objetos de servidor de SharePoint para recuperar los datos de los elementos web del sitio de SharePoint. Cada comando es un método que tiene el SharePointCommandAttribute aplicado.
Para definir los comandos de SharePoint
En el proyecto WebPartCommands, haga doble clic en el archivo de código de WebPartCommands.
Pegue el código siguiente en este archivo.
Imports System.Collections.Generic Imports Microsoft.SharePoint Imports Microsoft.VisualStudio.SharePoint.Commands Namespace ServerExplorer.SharePointConnections.WebPartNode Friend Class WebPartsCommands ' Gets data for each Web Part on the SharePoint site, and returns an array of ' serializable objects that contain the data. <SharePointCommand(WebPartCommandIds.GetWebParts)> _ Private Shared Function GetWebParts(ByVal context As ISharePointCommandContext) As WebPartNodeInfo() Dim nodeInfos = New List(Of WebPartNodeInfo)() Dim webParts As SPListItemCollection = context.Site.GetCatalog( _ SPListTemplateType.WebPartCatalog).Items For Each webPart As SPListItem In webParts Dim nodeInfo As WebPartNodeInfo = New WebPartNodeInfo() With nodeInfo .Id = webPart.ID .SiteId = webPart.ParentList.ParentWeb.ID .Name = webPart.Title .UniqueId = webPart.UniqueId .ImageUrl = webPart.ParentList.ImageUrl End With nodeInfos.Add(nodeInfo) Next Return nodeInfos.ToArray() End Function ' Gets additional property data for a specific Web Part. <SharePointCommand(WebPartCommandIds.GetWebPartProperties)> _ Private Shared Function GetWebPartProperties(ByVal context As ISharePointCommandContext, _ ByVal webPartNodeInfo As WebPartNodeInfo) As Dictionary(Of String, String) Dim webParts As SPList = context.Site.GetCatalog(SPListTemplateType.WebPartCatalog) Dim webPart As SPListItem = webParts.Items(webPartNodeInfo.UniqueId) Return SharePointCommandServices.GetProperties(webPart) End Function End Class End Namespaceusing System.Collections.Generic; using Microsoft.SharePoint; using Microsoft.VisualStudio.SharePoint.Commands; namespace ServerExplorer.SharePointConnections.WebPartNode { internal class WebPartsCommands { // Gets data for each Web Part on the SharePoint site, and returns an array of // serializable objects that contain the data. [SharePointCommand(WebPartCommandIds.GetWebParts)] private static WebPartNodeInfo[] GetWebParts(ISharePointCommandContext context) { var nodeInfos = new List<WebPartNodeInfo>(); SPListItemCollection webParts = context.Site.GetCatalog( SPListTemplateType.WebPartCatalog).Items; foreach (SPListItem webPart in webParts) { WebPartNodeInfo nodeInfo = new WebPartNodeInfo { Id = webPart.ID, SiteId = webPart.ParentList.ParentWeb.ID, Name = webPart.Title, UniqueId = webPart.UniqueId, ImageUrl = webPart.ParentList.ImageUrl }; nodeInfos.Add(nodeInfo); } return nodeInfos.ToArray(); } // Gets additional property data for a specific Web Part. [SharePointCommand(WebPartCommandIds.GetWebPartProperties)] private static Dictionary<string, string> GetWebPartProperties(ISharePointCommandContext context, WebPartNodeInfo nodeInfo) { SPList webParts = context.Site.GetCatalog(SPListTemplateType.WebPartCatalog); SPListItem webPart = webParts.Items[nodeInfo.UniqueId]; return SharePointCommandServices.GetProperties(webPart); } } }
Punto de control
En este punto del tutorial, todo el código del nodo Galería de elementos web y los comandos de SharePoint es en los proyectos. Compile la solución para asegurarse de que ambos proyectos se compilan sin errores.
Para compilar la solución
- En el menú Generar, seleccione Generar solución.
Crear un paquete VSIX para implementar la extensión
Para implementar la extensión, utilice el proyecto VSIX en la solución para crear un paquete VSIX. Primero, configure el paquete VSIX modificando el archivo source.extension.vsixmanifest incluido en el proyecto VSIX. A continuación, cree el paquete VSIX compilando la solución.
Para configurar el paquete VSIX
En el Explorador de soluciones, bajo el proyecto NodoElementoWeb, haga doble clic en el archivo source.extension.vsixmanifest.
Visual Studio abre el archivo en el editor de manifiestos. El archivo source.extension.vsixmanifest es la base del archivo extension.vsixmanifest que es requerido por todos los paquetes VSIX. Para obtener más información sobre este archivo, vea VSIX Extension Schema Reference.
En el cuadro Nombre de producto, escriba Nodo Galería de elementos web para Explorador de servidores.
En el cuadro Autor, escriba Contoso.
En el cuadro Descripción, escriba Agrega un nodo Galería de elementos web personalizado a un nodo Conexiones de SharePoint en el Explorador de servidores. Esta extensión utiliza un comando de SharePoint personalizado para llamar al modelo de objetos de servidor.
En la sección Contenido del editor, haga clic en el botón Agregar contenido.
En el cuadro de diálogo Agregar contenido, en el cuadro de lista Seleccione un tipo de contenido, elija MEF Component.
Nota
Este valor corresponde al elemento MefComponent del archivo extension.vsixmanifest. Este elemento especifica el nombre de un ensamblado de extensión en el paquete VSIX. Para obtener más información, vea MEFComponent Element (VSX Schema).
En Seleccione un origen, haga clic en el botón de radio Proyecto y seleccione WebPartNodeExtension en el cuadro de lista situado al lado.
Haga clic en Aceptar.
En el editor de manifiestos, haga clic de nuevo en el botón Agregar contenido.
En el cuadro de diálogo Agregar contenido, en el cuadro de lista Seleccione un tipo de contenido, seleccione Tipo de extensión personalizada.
Nota
Este valor corresponde al elemento CustomExtension del archivo extension.vsixmanifest. Este elemento especifica una extensión personalizada que desea incluir en la extensión de Visual Studio. Para obtener más información, vea CustomExtension Element (VSX Schema).
En el cuadro de texto Tipo, escriba SharePoint.Commands.v4.
Nota
Este valor corresponde al atributo Type del elemento CustomExtension del archivo extension.vsixmanifest. El valor Sharepoint.Commands.v4 se requiere para todos los ensamblados de la extensión personalizada que contengan comandos de SharePoint personalizados.
En Seleccione un origen, haga clic en el botón de radio Proyecto, y seleccione WebPartCommands en el cuadro de lista situado al lado.
Haga clic en Aceptar.
En el menú Generar, haga clic en Generar solución. Asegúrese de que la solución se compila sin errores.
Abra la carpeta de salida de compilación del proyecto NodoElementoWeb. Asegúrese de que la carpeta contiene el archivo NodoElementoWeb.vsix.
De forma predeterminada, la carpeta de resultado de compilación es .. \bin\Debug, que se encuentra bajo la carpeta que contiene el archivo de proyecto.
Probar la extensión
Ya puede probar el nuevo nodo Galería de elementos web en el Explorador de servidores. Primero, empiece a depurar la extensión en una instancia experimental de Visual Studio. A continuación, utilice el nuevo nodo Elementos web en la instancia experimental de Visual Studio.
Para comenzar a depurar la extensión
Reinicie Visual Studio con privilegios de administrador y abra la solución NodoElementoWeb.
En el proyecto ExtensiónNodoElementoWeb, abra el archivo de código SiteNodeExtension y agregue un punto de interrupción a la primera línea de código en los métodos NodeChildrenRequested y CreateWebPartNodes.
Presione F5 para iniciar la depuración.
Visual Studio instala la extensión en %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Extensión Nodo Galería de elementos web para Explorador de servidores\1.0 e inicia una instancia experimental de Visual Studio. Probará el elemento de proyecto en esta instancia de Visual Studio.
Para probar la extensión
En la instancia experimental de Visual Studio, en el menú Ver, haga clic en Explorador de servidores.
Compruebe que el sitio de SharePoint que desea utilizar para probar aparece bajo el nodo Conexiones de SharePoint en el Explorador de servidores. Si no aparece, siga estos pasos:
Haga clic con el botón secundario en Conexiones de SharePoint y después haga clic en Agregar conexión.
En el cuadro de diálogo Agregar conexión de SharePoint, escriba la dirección URL del sitio de SharePoint al que desea conectarse. Para especificar el sitio de SharePoint en el equipo de desarrollo, tipo https://localhost.
Haga clic en Aceptar.
Expanda el nodo de conexión del sitio (el nodo en el que aparece la dirección URL del sitio) y, a continuación, expanda un nodo de sitio secundario (por ejemplo, Sitio de grupo).
Compruebe que el código de la otra instancia de Visual Studio se detiene en el punto de interrupción que estableció anteriormente en el método NodeChildrenRequested. Presione F5 para continuar y depurar el proyecto.
En la instancia experimental de Visual Studio, compruebe que un nuevo nodo denominado Galería de elementos web aparece bajo el nodo del sitio de primer nivel. Expanda el nodo Galería de elementos web.
Compruebe que el código de la otra instancia de Visual Studio se detiene en el punto de interrupción que estableció anteriormente en el método CreateWebPartNodes. Presione F5 para continuar y depurar el proyecto.
En la instancia experimental de Visual Studio, compruebe que todos los elementos web del sitio conectado aparecen bajo el nodo Galería de elementos web en el Explorador de servidores.
Haga clic con el botón secundario en uno de los elementos web y haga clic en Propiedades.
En la instancia de Visual Studio que está depurando, compruebe que los detalles del elemento web aparecen en la ventana Propiedades.
Desinstalar la extensión de Visual Studio
Después de terminar de probar la extensión, desinstale la extensión de Visual Studio.
Para desinstalar la extensión
En la instancia experimental de Visual Studio, en el menú Herramientas, haga clic en Administrador de extensiones.
Se abre el cuadro de diálogo Administrador de extensiones.
En la lista de extensiones, seleccione Extensión Nodo Galería de elementos web para Explorador de servidores y, a continuación, haga clic en Desinstalar.
En el cuadro de diálogo que aparece, haga clic en Sí para confirmar que desea desinstalar la extensión.
Haga clic en Reiniciar ahora para completar la desinstalación.
Cierre ambas instancias de Visual Studio (la instancia experimental y la instancia de Visual Studio que tiene abierta la solución NodoElementoWeb).
Vea también
Tareas
Crear un nuevo mapa de bits u otra imagen
Referencia
Otros recursos
Extender el nodo Conexiones de SharePoint en el Explorador de servidores