Compartir a través de


Tutorial: Extender el Explorador de servidores para mostrar elementos web

En Visual Studio, puede utilizar el nodo Conexiones de SharePointExplorador de servidores para ver componentes en sitios de SharePoint.Sin embargo, Explorador de servidores no muestra algunos componentes de forma predeterminada.En este tutorial, ampliará Explorador de servidores de modo 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:

    • La extensión agrega un nodo Galería de elementos web bajo cada nodo de sitio de SharePoint en Explorador de servidores.Este nuevo nodo contiene nodos secundarios que representan cada elemento web en la galería de elementos web del sitio.

    • La extensión 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 para realizar otras tareas relacionadas con el elemento web.

  • Crear dos comandos de SharePoint personalizados que el ensamblado de la extensión llama.Los comandos de SharePoint son métodos que se pueden llamar a 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:

El conocimiento de los siguientes conceptos es útil, aunque no necesario, para completar el tutorial.

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,5.

  • 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

  1. Inicie Visual Studio.

  2. En la barra de menú, elija Archivo, Nuevo, Proyecto.

  3. En el cuadro de diálogo Nuevo proyecto , expanda los nodos Visual c# o Visual Basic y, a continuación el nodo Extensibilidad .

    [!NOTA]

    El nodo Extensibilidad solo está disponible si instala Visual Studio SDK.Para obtener más información, vea la sección Requisitos previos, anteriormente en este tema.

  4. En la parte superior del cuadro de diálogo, elija .NET Framework 4,5 en la lista de versiones de .NET Framework.

  5. Elija la plantilla Proyecto VSIX , asigne al proyecto WebPartNode, y elija el botón Aceptar .

    Visual Studio agrega el proyecto NodoElementoWeb al Explorador de soluciones.

Para crear la extensión de proyecto

  1. En Explorador de soluciones, abra el menú contextual para el nodo de la solución, elija Agregary, a continuación 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, Projects and Solutions, Options Dialog Box.

  2. En el cuadro de diálogo Nuevo proyecto , expanda el nodo Visual c# o el nodo Visual Basic , y el nodo Windows choose.

  3. En la parte superior del cuadro de diálogo, elija .NET Framework 4,5 en la lista de versiones de .NET Framework.

  4. En la lista de plantillas de proyecto, elija Biblioteca de clases, asigne al proyecto WebPartNodeExtension, y elija el botón Aceptar .

    Visual Studio agrega el proyecto ExtensiónNodoElementoWeb a la solución y abre el archivo de código predeterminado Class1.

  5. Elimine el archivo de código Class1 del proyecto.

Para crear el proyecto Comandos de SharePoint

  1. En Explorador de soluciones, abra el menú contextual para el nodo de la solución, elija Agregary, a continuación 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, Projects and Solutions, Options Dialog Box.

  2. En el cuadro de diálogo Nuevo proyecto , expanda el nodo Visual c# o el nodo Visual Basic y, a continuación el nodo Windows .

  3. En la parte superior del cuadro de diálogo, elija .NET Framework 3.5 en la lista de versiones de .NET Framework.

  4. En la lista de plantillas de proyecto, elija Biblioteca de clases, asigne al proyecto WebPartCommands, y elija el botón Aceptar .

    Visual Studio agrega el proyecto WebPartCommands a la solución y abre el archivo de clase predeterminado Class1.

  5. Elimine el archivo de código Class1 del proyecto.

Configurar los proyectos

Antes de escribir el código para crear la extensión, debe agregar los archivos de código y las referencias de ensamblado, y establece la configuración del proyecto.

Para configurar el proyecto ExtensiónNodoElementoWeb

  1. En el proyecto extensiónnodoelementoweb, agregue cuatro archivos de código que tienen los nombres siguientes:

    • SiteNodeExtension

    • WebPartNodeTypeProvider

    • WebPartNodeInfo

    • WebPartCommandIds

  2. Abrir el menú contextual para el proyecto WebPartNodeExtension y, a continuación Agregar referencia.

  3. En el cuadro de diálogo Administrador de referencia – WebPartNodeExtension , elija la ficha Framework , y seleccione la casilla para cada uno de los siguientes ensamblados:

    • System.ComponentModel.Composition

    • System.Windows.Forms

  4. Elija la ficha Extensiones , active la casilla para el ensamblado Microsoft.VisualStudio.SharePoint, y después elija el botón Aceptar .

  5. En Explorador de soluciones, abra el menú contextual para el nodo del proyecto WebPartNodeExtension y, a continuación Propiedades.

    Se abrirá el Diseñador de proyectos.

  6. Elija la ficha Aplicación .

  7. En el cuadro Espacio de nombres predeterminado (C#) o el cuadro Espacio de nombres de la raíz (Visual Basic), escriba en ServerExplorer.SharePointConnections.WebPartNode.

Para configurar el proyecto WebPartCommands

  1. En el proyecto WebPartCommands, agregue un archivo de código denominado WebPartCommands.

  2. En Explorador de soluciones, abra el menú contextual para el nodo del proyecto WebPartCommands , elija Agregary, a continuación Elemento existente.

  3. En el cuadro de diálogo Agregar elemento existente , vaya a la carpeta que contiene los archivos de código del proyecto extensiónnodoelementoweb, elija y luego los archivos de código WebPartCommandIds y WebPartNodeInfo.

  4. Elija la flecha situada junto al botón Agregar , y elija Agregar como vínculo en el menú que aparece.

    Visual Studio agrega los archivos de código al proyecto WebPartCommands como vínculos.Como resultado, los archivos de código se encuentran en el proyecto extensiónnodoelementoweb, pero el código en los archivos también se compila en el proyecto WebPartCommands.

  5. Abrir el menú contextual para el proyecto WebPartCommands de nuevo, y elija Agregar referencia.

  6. En el cuadro de diálogo Administrador de referencia – WebPartCommands , elija la ficha Extensiones , active la casilla para cada uno de los siguientes ensamblados, y después elija el botón Aceptar :

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

  7. En Explorador de soluciones, abra el menú contextual para el proyecto WebPartCommands de nuevo y, a continuación Propiedades.

    Se abrirá el Diseñador de proyectos.

  8. Elija la ficha de Aplicación .

  9. En el cuadro Espacio de nombres predeterminado (C#) o el cuadro Espacio de nombres de la raíz (Visual Basic), escriba en ServerExplorer.SharePointConnections.WebPartNode.

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

  1. En Explorador de soluciones, abra el menú contextual para el proyecto WebPartNodeExtension y, a continuación Propiedades.

  2. Se abrirá el Diseñador de proyectos.

  3. Elija la ficha resources, y después elija el This que el proyecto no contiene un archivo de recursos predeterminado. Haga clic aquí para establecer una relaciones.

    Visual Studio crea un archivo de recursos y lo abre en el diseñador.

  4. En la parte superior del diseñador, elija la flecha situada junto al comando de menú Agregar recurso , y elija Agregar nuevo icono en el menú que aparece.

  5. En el cuadro de diálogo Agregar nuevo recurso , llame al nuevo icono WebPartsNode, y elija el botón Agregar .

    El nuevo icono se abre en el Editor de imágenes.

  6. Modifique la versión 16x16 del icono para que tenga un diseño que pueda fácilmente reconocer.

  7. Abrir el menú contextual para la versión 32x32 del icono y, a continuación Eliminar tipo de imagen.

  8. Repita los pasos 5 a 8 para agregar un segundo icono a los recursos del proyecto, y llame a este icono WebPart.

  9. En Explorador de soluciones, bajo la carpeta RECURSOS para el proyecto WebPartNodeExtension , abra el menú contextual para WebPartsNode.ico.

  10. En la ventana Propiedades , elija la flecha situada junto a Acción de compilación, y elija Recurso incrustado en el menú que aparece.

  11. 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 Explorador de servidores, como agregar un nodo secundario a un nodo.

Para agregar el nodo Galería de elementos web al Explorador de servidores

  • En el proyecto extensiónnodoelementoweb, abra el archivo de código SiteNodeExtension y, a continuación pegue el siguiente código en él.

    [!NOTA]

    Después de agregar este código, el proyecto tendrá algunos errores de compilación, pero 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 Namespace
    
    using 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 del nodo Galería de elementos web .Cada nodo secundario 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, abra el archivo de código WebPartNodeTypeProvder y, a continuación pegue el siguiente código en él.

    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 Namespace
    
    using 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 datos de cada elemento web del sitio y después asigne los datos a instancia de esta clase.

Para definir la clase Web Part Data

  • En el proyecto extensiónnodoelementoweb, abra el archivo de código WebPartNodeInfo y, a continuación pegue el siguiente código en él.

    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 Namespace
    
    using 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, abra el archivo de código WebPartCommandIds y, a continuación pegue el siguiente código en él.

    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        Public Class WebPartCommandIds
            Public Const GetWebParts As String = "WebPart.GetWebParts"
            Public Const GetWebPartProperties As String = "WebPart.GetProperties"
        End Class
    
    End Namespace
    
    namespace 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 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, abra el archivo de código WebPartCommands, y luego pegue el siguiente código en él.

    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 Namespace
    
    using 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 la barra de menú, elija Generar, Compilar solución.

    Nota de precauciónPrecaución

    En este punto, el proyecto nodoelementoweb puede tener un error de compilación porque el archivo de manifiesto VSIX no tiene un valor para el autor.Este error saldrá cuando se agrega un valor en pasos posteriores.

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 del proyecto VSIX.A continuación, cree el paquete VSIX compilando la solución.

Para configurar el paquete VSIX

  1. En Explorador de soluciones, bajo el proyecto nodoelementoweb, abra el archivo source.extension.vsixmanifest en el editor de manifiestos.

    El archivo source.extension.vsixmanifest es la base del archivo extension.vsixmanifest que todos los paquetes VSIX requieren.Para obtener más información sobre este archivo, vea Referencia de esquema de extensión VSIX.

  2. En el cuadro Nombre de producto , entre en Nodo galería de elementos web para el Explorador de servidores.

  3. En el cuadro Autor , entre en Contoso.

  4. En el cuadro de descripción, entre agrega un nodo galería de elementos web personalizado al 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.

  5. Elija la ficha Activos del editor, y elija el botón Nuevo .

    El cuadro de diálogo Agregar nuevo activo aparece.

  6. En la lista Tipo , elija Microsoft.VisualStudio.MefComponent.

    [!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.

  7. En la lista Origen , elija Un proyecto de la solución actual.

  8. En la lista Proyecto , elija WebPartNodeExtension y elija el botón Aceptar .

  9. En el editor de manifiestos, elija el botón Nuevo de nuevo.

    El cuadro de diálogo Agregar nuevo activo aparece.

  10. En el cuadro Tipo , entre en SharePoint.Commands.v4.

    [!NOTA]

    Este elemento especifica una extensión personalizada que desea incluir en la extensión de Visual Studio.Para obtener más información, vea Elemento de activo (esquema VSX).

  11. En la lista Origen , elija el elemento de lista Un proyecto de la solución actual .

  12. En la lista Proyecto , elija WebPartCommands, y elija el botón Aceptar .

  13. En la barra de menú, elija Generar, Compilar solución, y asegúrese de que la solución se compila sin errores.

  14. Asegúrese de que la carpeta de salida de la compilación del proyecto nodoelementoweb ahora 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 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

  1. Reinicie Visual Studio con credenciales administrativas, y vuelva a abrir la solución nodoelementoweb.

  2. En el proyecto extensiónnodoelementoweb, abra el archivo de código SiteNodeExtension, y después agregue un punto de interrupción a la primera línea de código en los métodos NodeChildrenRequested y CreateWebPartNodes .

  3. Elija la tecla F5 para iniciar la depuración.

    Visual Studio instala la extensión en %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Web Part Gallery Node Extension for Server Explorer\1.0 and starts an experimental instance of Visual Studio.Probará el elemento de proyecto en esta instancia de Visual Studio.

Para probar la extensión

  1. En la instancia experimental Visual Studio, en la barra de menú, elija Ver, Explorador de servidores.

  2. Realice los pasos siguientes si el sitio de SharePoint que desea utilizar para probar no aparece bajo el nodo Conexiones de SharePoint en Explorador de servidores:

    1. En Explorador de servidores, abra el menú contextual para Conexiones de SharePointy, a continuación Agregar conexión.

    2. En el cuadro de diálogo Agregar conexión a SharePoint , escriba la dirección URL para el sitio de SharePoint al que desea conectarse, y elija el botón Aceptar .

      Para especificar el sitio de SharePoint en el equipo de desarrollo, entre en https://localhost.

  3. Expanda el nodo de conexión del sitio (que muestra la dirección URL del sitio) y, a continuación expanda un nodo de sitio secundario (por ejemplo, Sitio del equipo).

  4. Compruebe que el código de la otra instancia Visual Studio detiene en el punto de interrupción que estableció anteriormente en el método NodeChildrenRequested , elija y luego F5 para continuar y depurar el proyecto.

  5. 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 nivel superior, y expanda el nodo Galería de elementos web .

  6. 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 , y elija la tecla F5 para continuar y depurar el proyecto.

  7. 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 Explorador de servidores.

  8. En Explorador de servidores, abra el menú contextual para uno de los elementos web y, a continuación Propiedades.

  9. En la instancia Visual Studio que está depurando, compruebe que los detalles sobre el 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

  1. En la instancia experimental Visual Studio, en la barra de menú, elija Herramientas, Extensiones y actualizaciones.

    El cuadro de diálogo Extensiones y actualizaciones abra.

  2. En la lista de extensiones, elija Extensión de Nodos de la galería de elementos web para el Explorador de servidores, y elija el botón Desinstalar .

  3. En el cuadro de diálogo que aparece, elija el botón para confirmar que desea desinstalar la extensión, y elija el botón Reiniciar ahora para completar la desinstalación.

  4. Cierre ambas instancias de Visual Studio (la instancia experimental y la instancia de Visual Studio en la que la solución nodoelementoweb está abierto).

Vea también

Tareas

Tutorial: Llamar al modelo de objetos de cliente de SharePoint en una extensión del Explorador de servidores

Crear un icono u otra imagen (Editor de imágenes para iconos)

Referencia

Editor de imágenes para iconos

Otros recursos

Extender el nodo Conexiones de SharePoint en el Explorador de servidores