Compartilhar via


Passo a passo: Estendendo o Server Explorer para exibir Web Parts

Em o Visual Studio, você pode usar o nó de Conexões do SharePoint de Gerenciador de Servidores para exibir componentes em sites web do SharePoint.Em o entanto, Gerenciador de Servidores não exibe alguns componentes por padrão.Em essa explicação passo a passo, você estenderá Gerenciador de Servidores de modo que exibe a galeria de Web parts em cada site do SharePoint conectada.

Essa explicação passo a passo demonstra as seguintes tarefas:

  • Criando uma extensão do Visual Studio que estende Gerenciador de Servidores das seguintes maneiras:

    • A extensão adiciona um nó de Galeria de Web Parts em cada nó de site web do SharePoint em Gerenciador de Servidores.Esse novo nó contém os nós filhos representando cada Web parts em galeria de Web parts no site.

    • A extensão define um novo tipo de nó que representa uma instância de Web parts.Esse novo tipo de nó é a base para os nós filho no novo nó de Galeria de Web Parts .O novo tipo de nó de Web parts exibe informações na janela de Propriedades sobre Web parts que representa.O tipo de nó também inclui um item de menu de atalho personalizado que você pode usar como um ponto de partida para realizar outras tarefas relacionadas a Web parts.

  • Criando dois comandos personalizados do SharePoint que o assembly de extensão chama.Os comandos do SharePoint são métodos que podem ser chamados por assemblies de extensão para usar APIs no modelo de objeto do servidor para o SharePoint.Em essa explicação passo a passo, você cria os comandos que recuperam informações de Web parts de site web do SharePoint local no computador de desenvolvimento.Para obter mais informações, consulte A chamada para os modelos de objeto do SharePoint.

  • Criando um pacote de extensão (Visual Studio) VSIX para implantar a extensão.

  • Depuração e teste a extensão.

ObservaçãoObservação

Para uma versão alternativo de essa explicação passo a passo que usa o modelo de objeto de cliente para o SharePoint em vez de seu modelo de objeto de servidor, consulte Passo a passo: Chamando o modelo de objeto do cliente do SharePoint em uma extensão do Server Explorer.

Pré-requisitos

Você precisa dos seguintes componentes no computador de desenvolvimento de concluir este explicação passo a passo:

Conhecer os seguintes conceitos é útil, mas não necessário, concluir a explicação passo a passo:

Criando projetos

Para concluir esta explicação passo-a-passo, você deve criar três projetos:

  • Um projeto de VSIX criar o conjunto de VSIX para implantar a extensão.

  • Um projeto de biblioteca de classe que implementa a extensão.Este projeto deve selecionar o .NET Framework 4,5.

  • Um projeto de biblioteca de classe que define o SharePoint personalizado de comandos.Este projeto deve selecionar a estrutura do .NET framework 3,5.

Inicie o passo-a-passo criando projetos.

Para criar o projeto VSIX

  1. Inicie o Visual Studio

  2. Em a barra de menu, escolha Arquivo, Novo, Projeto.

  3. Em a caixa de diálogo de Novo Projeto , expanda os nós de Visual C# ou de Visual Basic , e então escolha o nó de Extensibilidade .

    ObservaçãoObservação

    O nó de Extensibilidade está disponível somente se você instalar o Visual Studio SDK.Para obter mais informações, consulte a seção de pré-requisito anteriormente em este tópico.

  4. Em a parte superior da caixa de diálogo, escolha o .NET Framework 4,5 na lista de versões do .NET Framework.

  5. Escolha o modelo de projeto de VSIX , nomeie o projeto WebPartNode, e então escolha o botão de OK .

    Visual Studio adiciona o projeto de WebPartNode a Gerenciador de Soluções.

Para criar o projeto de extensão

  1. Em Gerenciador de Soluções, abra o menu de atalho para o nó da solução, escolha Adicionar, e então escolha Novo Projeto.

    ObservaçãoObservação

    Em projetos Visual Basic, o nó da solução aparece em Gerenciador de Soluções somente quando a caixa de seleção de Sempre mostrar solução está selecionada em General, Projects and Solutions, Options Dialog Box.

  2. Em a caixa de diálogo de Novo Projeto , expanda o nó de Visual C# ou o nó de Visual Basic , e no nó de Janelas escolha.

  3. Em a parte superior da caixa de diálogo, escolha o .NET Framework 4,5 na lista de versões do .NET Framework.

  4. Em a lista de modelos de projeto, escolha Biblioteca de Classes, nomeie o projeto WebPartNodeExtension, e então escolha o botão de OK .

    Visual Studio adiciona o projeto de WebPartNodeExtension a solução e abre o arquivo de código Class1 de opção.

  5. Exclua o arquivo de código Class1 do projeto.

Para criar o projeto dos comandos do SharePoint

  1. Em Gerenciador de Soluções, abra o menu de atalho para o nó da solução, escolha Adicionar, e então escolha Novo Projeto.

    ObservaçãoObservação

    Em projetos Visual Basic, o nó da solução aparece em Gerenciador de Soluções somente quando a caixa de seleção de Sempre mostrar solução está selecionada em General, Projects and Solutions, Options Dialog Box.

  2. Em a caixa de diálogo de Novo Projeto , expanda o nó de Visual C# ou o nó de Visual Basic , e então escolha o nó de Janelas .

  3. Em a parte superior da caixa de diálogo, escolha o .NET Framework 3,5 na lista de versões do .NET Framework.

  4. Em a lista de modelos de projeto, escolha Biblioteca de Classes, nomeie o projeto WebPartCommands, e então escolha o botão de OK .

    Visual Studio adiciona o projeto de WebPartCommands a solução e abre o arquivo de código Class1 de opção.

  5. Exclua o arquivo de código Class1 do projeto.

Configurando projetos

Antes que você escreva código para criar uma extensão, você deve adicionar arquivos de código e referências assembly, e configurar as configurações do projeto.

para configurar o projeto de WebPartNodeExtension

  1. Em o projeto de WebPartNodeExtension, adicione quatro arquivos de código que possuem os seguintes nomes:

    • SiteNodeExtension

    • WebPartNodeTypeProvider

    • WebPartNodeInfo

    • WebPartCommandIds

  2. Abra o menu de atalho para o projeto de WebPartNodeExtension , e então escolha Adicionar Referência.

  3. Em a caixa de diálogo de Gerenciador de referência – WebPartNodeExtension , escolha a guia de estrutura , selecione a caixa de seleção para cada um dos seguintes conjuntos de módulos (assemblies):

    • System.ComponentModel.Composition

    • System.Windows.Forms

  4. Escolha a guia de Extensões , selecione a caixa de seleção para o assembly de Microsoft.VisualStudio.SharePoint, e então escolha o botão de OK .

  5. Em Gerenciador de Soluções, abra o menu de atalho para o nó de projeto de WebPartNodeExtension , e então escolha Propriedades.

    O Project Designer abre.

  6. Escolha a guia de Aplicativo .

  7. Em a caixa de Namespace padrão (C#) ou na caixa de Namespace raiz (Visual Basic), entre em ServerExplorer.SharePointConnections.WebPartNode.

para configurar o projeto de WebPartCommands

  1. Em o projeto de WebPartCommands, adicione um arquivo de código que é chamado WebPartCommands.

  2. Em Gerenciador de Soluções, abra o menu de atalho para o nó de projeto de WebPartCommandsAdicionar, escolha, e escolha Item Existente.

  3. Em a caixa de diálogo de Adicionar item existente , navegue até a pasta que contém os arquivos de código para o projeto de WebPartNodeExtension, e então escolha arquivos de código de WebPartNodeInfo e de WebPartCommandIds.

  4. Escolha a seta ao botão de Adicionar , e então escolha no menu Adicionar como vínculo que aparece.

    Visual Studio adiciona os arquivos de código para o projeto de WebPartCommands como links.Como resultado, os arquivos de código são localizados no projeto de WebPartNodeExtension, mas o código em arquivos também é criado no projeto de WebPartCommands.

  5. Abra o menu de atalho para o projeto de WebPartCommands novamente, e escolha Adicionar Referência.

  6. Em a caixa de diálogo de Gerenciador de referência – WebPartCommands , escolha a guia de Extensões , selecione a caixa de seleção para cada um dos seguintes conjuntos de módulos (assemblies), e depois escolha o botão de OK :

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

  7. Em Gerenciador de Soluções, abra o menu de atalho para o projeto de WebPartCommands novamente, e então escolha Propriedades.

    O Project Designer abre.

  8. Escolha a guia de Aplicativo .

  9. Em a caixa de Namespace padrão (C#) ou na caixa de Namespace raiz (Visual Basic), entre em ServerExplorer.SharePointConnections.WebPartNode.

Criando ícones para novos nós

crie dois ícones para a extensão de Gerenciador de Servidores : um ícone para o novo nó de Galeria de Web Parts , e outro ícone para cada nó filho de Web parts sob o nó de Galeria de Web Parts .Posteriormente em esta explicação passo a passo, você irá escrever o código que associa esses ícones com os nós.

Para criar ícones para nós

  1. Em Gerenciador de Soluções, abra o menu de atalho para o projeto de WebPartNodeExtension , e então escolha Propriedades.

  2. O Project Designer abre.

  3. Escolha o guia de recursos, e então escolha este projeto não contém um arquivo de recursos padrão. Clique aqui para criar um link.

    Visual Studio cria um arquivo de recurso e abre no designer.

  4. Em a parte superior do designer, escolha a seta próxima ao comando de menu de Adicionar Recurso , e então escolha no menu Adicionar Novo Ícone que aparece.

  5. Em a caixa de diálogo de Adicionar Novo Recurso , nomeie o novo ícone WebPartsNode, e então escolha o botão de Adicionar .

    o novo ícone abre em Editor de Imagem.

  6. Edite a versão 16x16 de ícone de modo que tenha um design que você pode facilmente reconhecer.

  7. Abra o menu de atalho para a versão 32x32 ícone, e então escolha Excluir Tipo de Imagem.

  8. Repita as etapas 5 a 8 para adicionar um segundo ícone aos recursos do projeto, e nomeie este ícone WebPart.

  9. Em Gerenciador de Soluções, na pasta de Recursos para o projeto de WebPartNodeExtension , abra o menu de atalho para WebPartsNode.ico.

  10. Em a janela de Propriedades , escolha a seta ao lado de Ação de Compilação, e então escolha no menu Recurso Incorporado que aparece.

  11. Repita as duas últimas etapas para WebPart.ico.

Adicionando o nó de galeria de Web parts ao server Explorer

Crie uma classe que adiciona o novo nó de Galeria de Web Parts a cada nó de site web do SharePoint.para adicionar o novo nó, a classe implementa a interface de IExplorerNodeTypeExtension .Implementar essa interface sempre que você deseja estender o comportamento de um nó existente em Gerenciador de Servidores, como adicionar um nó filho a um nó.

Para adicionar o nó de galeria de Web parts ao server Explorer

  • Em o projeto de WebPartNodeExtension, abra o arquivo de código de SiteNodeExtension, e então cole o seguinte código em ele.

    ObservaçãoObservação

    Após adicionar este código, compilar o projeto mandará alguns erros, mas partirão quando você adiciona o código em etapas 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);
                    }
                }
            }
        }
    }
    

Definindo um tipo de nó que representa a Web parts

Crie uma classe que define um novo tipo de nó que representa a Web parts.O Visual Studio usa esse novo tipo de nó para exibir nós filho no nó de Galeria de Web Parts .Cada nó filho representa único Web parts no site do SharePoint.

Para definir um novo tipo de nó, a classe implementa a interface de IExplorerNodeTypeProvider .Implementar essa interface sempre que você deseja definir um novo tipo de nó em Gerenciador de Servidores.

Para definir o tipo de nó de Web parts

  • Em o projeto de WebPartNodeExtension, abra o arquivo de código de WebPartNodeTypeProvder, e então cole o seguinte código em ele.

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

Definindo a classe de dados de Web parts

Defina uma classe que contém dados em um único Web parts no site do SharePoint.Posteriormente em esta explicação passo a passo, você criará um comando personalizado do SharePoint que recupera dados sobre cada parte Web no site e atribui os dados às instâncias da classe.

Para definir a classe de dados de Web parts

  • Em o projeto de WebPartNodeExtension, abra o arquivo de código de WebPartNodeInfo, e então cole o seguinte código em ele.

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

Definindo as identificações para o comando do SharePoint

Definir várias cadeias de caracteres que identificam os comandos personalizados do SharePoint.Esses comandos você implementará posteriormente em este passo-a-passo.

Para definir as identificações de comando

  • Em o projeto de WebPartNodeExtension, abra o arquivo de código de WebPartCommandIds, e então cole o seguinte código em ele.

    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";
        }
    }
    

Criando comandos personalizados do SharePoint

Crie os comandos personalizados que chamam no modelo de objeto do servidor para o SharePoint para recuperar dados da Web Parts no site do SharePoint.Cada comando é um método que tem SharePointCommandAttribute aplicado a ele.

Para definir comandos do SharePoint

  • Em o projeto de WebPartCommands, abra o arquivo de código de WebPartCommands, e então cole o seguinte código em ele.

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

Ponto de Verificação

Em esse ponto do passo-a-passo, todo o código para o nó de Galeria de Web Parts e comandos do SharePoint agora estão em projetos.Crie a solução para certificar-se que ambos os projetos criados sem erros.

Para criar a solução

  • Em a barra de menu, escolha Compilar, Compilar solução.

    Observação de cuidadoCuidado

    Em este ponto, o projeto de WebPartNode pode ter um erro de compilação porque o arquivo de manifesto de VSIX não tem um valor para o autor.Este erro partirá quando você adiciona um valor em etapas posteriores.

Criando um conjunto de VSIX para implantar a extensão

Para implantar a extensão, use o projeto de VSIX em sua solução criar um conjunto de VSIX.Primeiro, configure o conjunto de VSIX modificando o arquivo de source.extension.vsixmanifest no projeto de VSIX.Em seguida, crie o conjunto de VSIX criando a solução.

Para configurar o conjunto de VSIX

  1. Em Gerenciador de Soluções, no projeto de WebPartNode, abra o arquivo de manifesto source.extension.vsixmanifest no editor.

    O arquivo de source.extension.vsixmanifest é a base para o arquivo de extension.vsixmanifest que quaisquer pacotes de VSIX exigem.Para obter mais informações sobre este arquivo, consulte Referência de esquema de extensão VSIX.

  2. Em a caixa de Nome do produto , entre em Nó de galeria de Web parts para o server Explorer.

  3. Em a caixa de Autor , entre em Contoso.

  4. Em a caixa de descrição, entre adiciona um nó personalizado de galeria de Web parts para o nó de conexões do SharePoint no server Explorer. Esta extensão usa um comando personalizado do SharePoint chamar no modelo de objeto do servidor.

  5. Escolha a guia de Ativos do editor, e então escolha o botão de Novo .

    a caixa de diálogo de adicionar o novo recurso aparece.

  6. Em a lista de Tipo , escolha Microsoft.VisualStudio.MefComponent.

    ObservaçãoObservação

    Esse valor corresponde ao elemento de MefComponent no arquivo de extension.vsixmanifest.Esse elemento especifica o nome de um assembly de extensão no conjunto de VSIX.Para obter mais informações, consulte MEFComponent Element.

  7. Em a lista de Origem , escolha Um projeto na solução atual.

  8. Em a lista de ProjetoWebPartNodeExtension , escolha e então escolha o botão de OK .

  9. Em o editor manifesto, escolha o botão de Novo novamente.

    a caixa de diálogo de adicionar o novo recurso aparece.

  10. Em a caixa de Tipo , entre em SharePoint.Commands.v4.

    ObservaçãoObservação

    Esse elemento especifica uma extensão personalizada que você deseja incluir na extensão do Visual Studio.Para obter mais informações, consulte Elemento de ativos (esquema VSX).

  11. Em a lista de Origem , escolha o item de lista de Um projeto na solução atual .

  12. Em a lista de Projeto , escolha, e escolha WebPartCommandsno botão de OK .

  13. Em a barra de menu, escolha Compilar, Compilar solução, e então certifique-se de que a solução compila sem erros.

  14. Certifique-se de que a pasta de saída de compilação para o projeto de WebPartNode agora contém o arquivo de WebPartNode.vsix.

    Por padrão, a pasta de saída de compilação é.\ bin \ debug de sob a pasta que contém o arquivo de projeto.

testando a extensão

Você agora está pronto para testar o novo nó de Galeria de Web Parts em Gerenciador de Servidores.Primeiro, iniciar a depuração a extensão em uma instância de avaliação do Visual Studio.Em seguida, use o novo nó de Web Parts na instância de avaliação de Visual Studio.

Para iniciar a depuração da extensão

  1. Reinicie Visual Studio com credenciais administrativas, e abra a solução de WebPartNode.

  2. Em o projeto de WebPartNodeExtension, abra o arquivo de código de SiteNodeExtension, e adicione um ponto de interrupção na primeira linha de código em métodos de NodeChildrenRequested e de CreateWebPartNodes .

  3. Escolha a tecla F5 para iniciar a depuração.

    O Visual Studio instala a extensão em %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Web Part Gallery Node Extension for Server Explorer\1.0 e inicia uma instância de avaliação do Visual Studio.Você irá testar o item de projeto em esse caso do Visual Studio.

para testar a extensão

  1. Em a instância de avaliação de Visual Studio, na barra de menu, escolha Modo de Visualização, Gerenciador de Servidores.

  2. Execute as seguintes etapas se a página web do SharePoint que você deseja usar para testar não aparece sob o nó de Conexões do SharePoint em Gerenciador de Servidores:

    1. Em Gerenciador de Servidores, abra o menu de atalho para Conexões do SharePoint, e então escolha Adicionar Conexão.

    2. Em a caixa de diálogo de Adicione a conexão do SharePoint , digite o URL do site da web do SharePoint para o qual você deseja se conectar, e então escolha o botão de OK .

      Para especificar o site da web do SharePoint no seu computador de desenvolvimento, entre em https://localhost.

  3. Expanda o nó de conexão do site (que exibe o URL do seu site) em seguida, expanda o nó de site filho (por exemplo, Site da Equipe).

  4. Verifique se o código em outra instância de Visual Studio pára no ponto de interrupção que você definiu anteriormente no método de NodeChildrenRequested , e então escolha F5 para continuar a depuração o projeto.

  5. Em a instância de avaliação do Visual Studio, verifique se um novo nó chamado Galeria de Web Parts aparece sob o nó do site de nível superior e em seguida, expanda o nó de Galeria de Web Parts .

  6. Verifique se o código em outra instância do Visual Studio pára no ponto de interrupção que você definiu anteriormente no método de CreateWebPartNodes , e então escolha a tecla F5 para continuar a depuração o projeto.

  7. Em a instância de avaliação do Visual Studio, verifique se todas as Web Parts no site conectada aparece sob o nó de Galeria de Web Parts em Gerenciador de Servidores.

  8. Em Gerenciador de Servidores, abra o menu de atalho para um Web Parts, e então escolha Propriedades.

  9. Em a instância de Visual Studio que você está depurando, verifique se os detalhes sobre Web parts apareçam na janela de Propriedades .

Desinstalar a extensão do Visual Studio

Depois que você concluir testar a extensão, desinstalar a extensão do Visual Studio.

para desinstalar a extensão

  1. Em a instância de avaliação de Visual Studio, na barra de menu, escolha Ferramentas, Extensões e Atualizações.

    a caixa de diálogo de Extensões e Atualizações abre.

  2. Em a lista de extensões Extensão do nó de galeria de Web parts para o server Explorer, escolha, e escolha no botão de Desinstalar .

  3. Em a caixa de diálogo que aparece, escolha o botão de Sim para confirmar que você deseja desinstalar a extensão, e então escolha o botão de Reiniciar Agora para concluir a desinstalação.

  4. Feche as duas instâncias do Visual Studio (a instância de avaliação e instância do Visual Studio em que a solução de WebPartNode estiver aberta.)

Consulte também

Tarefas

Passo a passo: Chamando o modelo de objeto do cliente do SharePoint em uma extensão do Server Explorer

Criar um ícone ou outra imagem (Editor de imagens para ícones)

Referência

Editor de imagens para ícones

Outros recursos

Estendendo o nó de conexões do SharePoint no Server Explorer