Поделиться через


Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части

В Visual Studio можно использовать узел Подключения SharePointОбозреватель серверов чтобы просмотреть компоненты на сайтах SharePoint.Однако Обозреватель серверов не отображается по умолчанию нескольких компонентов.В этом пошаговом руководстве, можно расширить функциональные Обозреватель серверов таким образом, чтобы он отображает коллекцию веб-части для каждого подключенном сайте SharePoint.

В этом пошаговом руководстве показано выполнение следующих задач.

  • Создание расширения Visual Studio, которое следующим образом расширяет Обозреватель серверов:

    • Расширение добавляет узел Коллекция веб-части под каждым узлом сайта SharePoint в Обозреватель серверов.Этот новый узел содержит дочерние узлы, представляющие каждую из веб-частей в коллекции веб-частей на сайте;

    • Расширение определяет новый тип узла, который представляет экземпляр веб-части.Этот новый узел является базовым для дочерних узлов нового узла Коллекция веб-частей.Новый тип узла веб-части в окне Свойства отображает сведения о веб-части, которую он представляет.Тип узла также включает пользовательский элемент контекстного меню, который можно использовать в качестве отправной точки для выполнения других задач, относящихся к веб-части.

  • Создание настраиваемых команд SharePoint 2, которая вызывает сборку модуля.Команды SharePoint методы, которые могут быть Вызываются сборок модуля для использования API объектной модели сервера для SharePoint.В этом пошаговом руководстве описывается создание команд, извлекающих сведения о веб-части из локального сайта SharePoint на компьютере разработчика.Дополнительные сведения см. в разделе Вызов объектных моделей SharePoint.

  • Построение пакета расширения Visual Studio (VSIX) для расширения.

  • Отладка и тестирование расширения.

ПримечаниеПримечание

Для другой версии данного пошагового руководства, использующего объектную модель " клиент " для SharePoint вместо его объектной модели сервера см. в разделе Пошаговое руководство. Вызов клиентской объектной модели SharePoint в расширении обозревателя серверов.

Обязательные компоненты

Для выполнения данного пошагового руководства на компьютере разработчика должны быть установлены следующие компоненты:

Знание следующих подходов может оказаться полезным, но не требуется для выполнения пошагового руководства.

Создание проектов

Чтобы выполнить это пошаговое руководство, необходимо создать project 3:

  • проект VSIX, который позволит создать пакет VSIX для развертывания расширения;

  • проект библиотеки классов, реализующий расширениеЭтот проект должен ПУСТО платформы .NET Framework 4,5.

  • проект библиотеки классов, определяющий пользовательские команды SharePoint(в этом проекте необходимо использовать .NET Framework 3.5).

Начните выполнение пошагового руководства с создания проектов.

Создание проекта VSIX

  1. Запустите Visual Studio.

  2. В строке меню выберите Файл, Создать, Проект.

  3. В диалоговом окне Создать проект разверните узлы Visual C# или Visual Basic, а затем выберите узел Расширение среды.

    ПримечаниеПримечание

    Узел Расширение среды доступен, только если установить пакет SDK для Visual Studio.Дополнительные сведения см. в параграфе предварительных требований ранее в этом разделе.

  4. В верхней части диалогового окна, выберите платформа .NET Framework 4,5 в списке версий платформы .NET Framework.

  5. Выберите шаблон Проект VSIX, назовите проект WebPartNode, а затем нажмите кнопку ОК.

    Visual Studio добавит в Обозреватель решений проект WebPartNode.

Создание проекта расширения

  1. В Обозреватель решений открыть контекстное меню для узла решения выберите Добавить, а затем выберите Создать проект.

    ПримечаниеПримечание

    В проектах Visual Basic узел решения отображается в обозревателе решений, только если в диалоговом окне General, Projects and Solutions, Options Dialog Box установлен флажок Всегда показывать решение.

  2. В диалоговом окне Создать проект разверните узел Visual C# или узел Visual Basic, а затем выбрать узел Окна.

  3. В верхней части диалогового окна, выберите платформа .NET Framework 4,5 в списке версий платформы .NET Framework.

  4. В списке шаблонов проектов выберите Библиотека классов, назовите проект WebPartNodeExtension, а затем нажмите кнопку ОК.

    Visual Studio добавит проект WebPartNodeExtension в решение и откроет заданный по умолчанию файл с кодом Class1.

  5. Удалите из проекта файл c кодом Class1.

Создание проекта команд SharePoint

  1. В Обозреватель решений открыть контекстное меню для узла решения выберите Добавить, а затем выберите Создать проект.

    ПримечаниеПримечание

    В проектах Visual Basic узел решения отображается в обозревателе решений, только если в диалоговом окне General, Projects and Solutions, Options Dialog Box установлен флажок Всегда показывать решение.

  2. В диалоговом окне Создать проект разверните узел Visual C# или узел Visual Basic, а затем выберите узел Окна.

  3. В верхней части диалогового окна, выберите .NET Framework 3.5 в списке версий платформы .NET Framework.

  4. В списке шаблонов проектов выберите Библиотека классов, назовите проект WebPartCommands, а затем нажмите кнопку ОК.

    Visual Studio добавит проект WebPartCommands в решение и откроет файл с кодом по умолчанию Class1.

  5. Удалите из проекта файл c кодом Class1.

Настройка проектов

Перед разработкой кода для создания расширения, необходимо добавить ссылки на файлы с кодом и на сборки, а также настроить параметры проекта.

Настройка проекта WebPartNodeExtension

  1. В проекте WebPartNodeExtension добавьте 4 файла с кодом, имеющие следующие имена:

    • SiteNodeExtension

    • WebPartNodeTypeProvider

    • WebPartNodeInfo

    • WebPartCommandIds

  2. Открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Добавить ссылку.

  3. В диалоговом окне Диспетчер ссылок – WebPartNodeExtension выберите вкладку Платформа, а затем установите флажок для каждой из следующих сборок:

    • System.ComponentModel.Composition

    • System.Windows.Forms

  4. Выберите вкладку Расширения установите флажок для сборки Microsoft.VisualStudio.SharePoint, а затем нажмите кнопку ОК.

  5. В Обозреватель решений открыть контекстное меню для узла проекта WebPartNodeExtension, а затем выберите Свойства.

    Откроется Конструктор проектов.

  6. Выберите вкладку Приложение.

  7. В окне Пространство имен по умолчанию (C#) или в окне Корневое пространство имен (Visual Basic) введите ServerExplorer.SharePointConnections.WebPartNode.

Настройка проекта WebPartCommands

  1. В проекте WebPartCommands добавьте файл кода с именем WebPartCommands.

  2. В Обозреватель решений открыть контекстное меню для узла проекта WebPartCommands выберите Добавить, а затем выберите Существующий элемент.

  3. В диалоговом окне Добавление существующего элемента перейдите к папке, содержащей файлы с кодом проекта WebPartNodeExtension, а затем выберите файлы с кодом WebPartNodeInfo и WebPartCommandIds.

  4. Нажмите стрелку рядом с кнопкой Добавить, а затем выберите Добавить как связь в появившемся меню.

    Visual Studio добавит файлы с кодом в проект WebPartCommands в виде ссылок.В результате файлы кода найдены в проекте WebPartNodeExtension, но код в файлах также компилироваться в проекте WebPartCommands.

  5. Раскрывайте контекстное меню для проекта WebPartCommands еще раз и выберите Добавить ссылку.

  6. В диалоговом окне Диспетчер ссылок – WebPartCommands выберите вкладку Расширения установите флажок для каждой из следующих сборок, а затем нажмите кнопку ОК:

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

  7. В Обозреватель решений, раскрывайте контекстное меню для проекта WebPartCommands, а затем выберите Свойства.

    Откроется Конструктор проектов.

  8. Выберите вкладку Приложение.

  9. В окне Пространство имен по умолчанию (C#) или в окне Корневое пространство имен (Visual Basic) введите ServerExplorer.SharePointConnections.WebPartNode.

Создание значков для новых узлов

Создайте два значка для расширений обозревателя серверов: значок для нового узла Коллекция веб-частей и еще один значок для каждого дочернего узла веб-части внутри узла Коллекция веб-частей.Далее в этом пошаговом руководстве будет показано, как написать код, связывающий эти значки с узлами.

Создание значков для узлов

  1. В Обозреватель решений открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Свойства.

  2. Откроется Конструктор проектов.

  3. Выберите вкладку ресурсов, а затем выберите этот проект не содержит файла ресурсов по умолчанию. Щелкните здесь, чтобы создать одну связь.

    Visual Studio создает файл ресурсов и открытые в конструкторе.

  4. В верхней части конструктора выберите стрелку рядом с командой меню Добавить ресурс, а затем выберите Добавить новый значок в появившемся меню.

  5. В диалоговом окне Добавление нового ресурса, назовите новый значок WebPartsNode, а затем нажмите кнопку Добавить.

    Новый значок будет отрыт в Редакторе изображений.

  6. Правка версия значок 16x16, чтобы он будет содержать конструкцию, которую можно легко распознать.

  7. Открыть контекстное меню для версии значка размером 32x32, а затем выберите Удалить тип изображений.

  8. Повторяющиеся секции 5 до 8, чтобы добавить второй значок к ресурсам проект и назовите этот значок WebPart.

  9. В Обозреватель решений в папке Ресурсы для проекта WebPartNodeExtension открыть контекстное меню для WebPartsNode.ico.

  10. В окне Свойства нажмите стрелку рядом с Действие при построении, а затем выберите Внедренный ресурс в появившемся меню.

  11. Повторите последние два шага для значка WebPart.ico.

Добавление узла коллекции веб-частей в обозреватель серверов

Создайте класс, который добавляет новый узел Коллекция веб-частей в узел каждого из сайтов SharePoint.Для добавления нового узла класс реализует интерфейс IExplorerNodeTypeExtension.Этот интерфейс следует реализовывать всякий раз, когда требуется расширить поведение существующего узла в Обозреватель серверов, как добавить дочерний узел к узлу.

Добавление узла коллекции веб-частей в обозреватель серверов

  • В проекте WebPartNodeExtension, откройте файл с кодом SiteNodeExtension, а затем вставьте в нее следующий код.

    ПримечаниеПримечание

    После добавления этого кода, проект будет иметь некоторые компилировать ошибок, но они пойдут прочь при добавлении кода в последующих шагах.

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

Определение типа узла, представляющего веб-часть

Создайте класс, который определяет новый тип узла, представляющий веб-часть.Visual Studio использует этот новый тип узла, чтобы отобразить дочерние узлы под узлом Коллекция веб-части.Каждый дочерний узел представляет отдельный " веб-часть " на сайте SharePoint.

Для определения нового типа узла класс реализует интерфейс IExplorerNodeTypeProvider.Этот интерфейс следует реализовывать всякий раз, когда требуется определить новый тип узла в обозревателе серверов.

Определение типа узла веб-части

  • В проекте WebPartNodeExtension, откройте файл кода WebPartNodeTypeProvder, а затем вставьте в нее следующий код.

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

Определение класса данных веб-части

Определите класс, содержащий сведения об отдельной веб-части сайта SharePoint.Далее в этом пошаговом руководстве показано создание пользовательской команды SharePoint, которая получает данные о каждом веб-части на сайте, а затем присвоить данные в экземпляры этого класса.

Определение класса данных веб-части

  • В проекте WebPartNodeExtension, откройте файл с кодом WebPartNodeInfo и вставьте в нее следующий код.

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

Определение идентификаторов для команды SharePoint

Определите несколько строк, идентифицирующих настраиваемые команды SharePoint.Эти команды будут реализованы далее в данном пошаговом руководстве.

Определение идентификаторов команд

  • В проекте WebPartNodeExtension, откройте файл с кодом WebPartCommandIds, а затем вставьте в нее следующий код.

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

Создание настраиваемых команд SharePoint

Создание пользовательских команд, осуществляющих вызовы в объектную модель сервера SharePoint для получения данных о веб-части на сайте SharePoint.Каждая из команд представляет собой метод, к которому применяется атрибут SharePointCommandAttribute.

Определение команд SharePoint

  • В проекте WebPartCommands откройте файл с кодом WebPartCommands, а затем вставьте в нее следующий код.

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

Контрольная точка

На данный момент проекты содержат весь код узла Коллекция веб-частей и команд SharePoint.Выполните построение решения, чтобы убедиться, что компиляция обоих проектов выполняется без ошибок.

Построение решения

  • В строке меню выберите Построение, Построить решение.

    Предупреждающее замечаниеВнимание

    На этом этапе проекта WebPartNode может иметь ошибку построения, поскольку файл манифеста VSIX не имеет значения для автора.Эта ошибка будет направлена прочь при добавлении значение в последующих шагах.

Создание пакета VSIX для развертывания расширения

Для развертывания расширения воспользуйтесь проектом VSIX в своем решении для создания пакета VSIX.Сначала настроить пакет VSIX, изменив файл source.extension.vsixmanifest в проекте VSIX.Затем создайте пакет VSIX, выполнив построение решения.

Настройка пакета VSIX

  1. В Обозреватель решений под проектом WebPartNode, откройте файл source.extension.vsixmanifest в редакторе манифестов.

    Файл source.extension.vsixmanifest качестве основы для файла extension.vsixmanifest которого все пакеты VSIX.Дополнительные сведения об этом файле см. в разделе Справочник по схеме расширения VSIX.

  2. В окне Название продукта введите Узел коллекции веб-части для обозревателя серверов.

  3. В окне Автор введите Contoso.

  4. В поле описание введите добавить пользовательский узел коллекции веб-части в узле подключения SharePoint в обозревателе сервера. Для вызова серверной объектной модели расширение использует настраиваемую команду SharePoint.

  5. Выберите вкладку Активы редактор, а затем нажмите кнопку Создать.

    Диалоговое окно Добавить новый актив.

  6. В списке Тип выберите Microsoft.VisualStudio.MefComponent.

    ПримечаниеПримечание

    Это значение соответствует элементу MefComponent, описанному в файле extension.vsixmanifest.Этот элемент задает имя сборки расширения в пакете VSIX.Дополнительные сведения см. в разделе MEFComponent Element.

  7. В списке Источник выберите Проект в текущем решении.

  8. В списке Проект выберите WebPartNodeExtension, а затем нажмите кнопку ОК.

  9. В редакторе манифестов, нажмите кнопку Создать попытку.

    Диалоговое окно Добавить новый актив.

  10. В окне Тип введите SharePoint.Commands.v4.

    ПримечаниеПримечание

    Этот элемент задает настраиваемое расширение, которое требуется включить в расширение Visual Studio.Дополнительные сведения см. в разделе элемент актива (схема VSX).

  11. В списке Источник выберите элемент списка Проект в текущем решении.

  12. В списке Проект выберите WebPartCommands, а затем нажмите кнопку ОК.

  13. В строке меню выберите Построение, Построить решение и убедитесь, что решение будет компилироваться без ошибок.

  14. Убедитесь, что в выходную папку построения для проекта WebPartNode теперь содержит файл WebPartNode.vsix.

    По умолчанию выходной папкой построения является папка ..\bin\Debug, расположенная в папке, содержащей файл проекта.

Тестирование расширения

Теперь можно проверить новый узел Коллекция веб-части в Обозреватель серверов.Начните отладку расширения в экспериментальном экземпляре Visual Studio.Затем перейдите к новому зулу Веб-части в экспериментальном экземпляре Visual Studio.

Запуск отладки расширения

  1. Перезапустите Visual Studio с учетными данными администратора, а затем откройте решение WebPartNode.

  2. В проекте WebPartNodeExtension, откройте файл с кодом SiteNodeExtension, а затем добавьте точку останова на первой строке кода в методах NodeChildrenRequested и CreateWebPartNodes.

  3. Выберите ключ F5, чтобы начать отладку.

    Visual Studio устанавливает расширения до %UserProfile% \ AppData \ local \ Microsoft \ VisualStudio \ 11.0Exp \ extensions \ Contoso \ расширение узла коллекции веб-части для обозревателя серверов \ 1.0 и запускает экспериментальном экземпляре Visual Studio.После этого можно тестировать элемент проекта в открытом экземпляре Visual Studio.

Тестирование расширения

  1. В экспериментальном экземпляре Visual Studio в строке меню выберите Вид, Обозреватель серверов.

  2. Выполните следующие действия, если сайт SharePoint, который необходимо использовать для тестирования не отображается в узле Подключения SharePoint в Обозреватель серверов:

    1. В Обозреватель серверов открыть контекстное меню для Подключения SharePoint, а затем выберите Добавить подключение.

    2. В диалоговом окне Добавление подключения к SharePoint введите URL-адрес сайта SharePoint, к которому нужно подключиться, а затем нажмите кнопку ОК.

      Чтобы указать сайт SharePoint на компьютере разработчика, введите https://localhost.

  3. Разверните узел подключения сайта (который указывает URL-адрес вашего сайта), а затем разверните узел подчиненного сайта (например, сайт группы).

  4. Убедитесь, что выполнение кода в другом экземпляре Visual Studio останавливается в точке останова установлено ранее в методе NodeChildrenRequested, а затем выбрать F5, чтобы продолжить отладку проекта.

  5. В экспериментальном экземпляре Visual Studio, убедитесь, что новый узел с именем Коллекция веб-части отображается в узле сайта верхнего уровня, а затем разверните узел Коллекция веб-части.

  6. Убедитесь, что выполнение кода в другом экземпляре Visual Studio прерывается на точке останова, которая имеет ранее в методе CreateWebPartNodes, а затем выбрать ключ F5, чтобы продолжить отладку проекта.

  7. В экспериментальном экземпляре Visual Studio, убедитесь в том, что все веб-части на подключенном сайте отображаются в узле Коллекция веб-части в Обозреватель серверов.

  8. В Обозреватель серверов открыть контекстное меню для одного из веб-частей и выберите Свойства.

  9. В экземпляре Visual Studio, отладке, убедитесь, что сведения о веб-части отображаются в окне Свойства.

Удаление расширения из Visual Studio

После тестирования расширения удалите его из Visual Studio.

Удаление расширения

  1. В экспериментальном экземпляре Visual Studio в строке меню выберите Сервис, Расширения и обновления.

    Будет открыто диалоговое окно Расширения и обновления.

  2. В списке расширений выберите Расширение узла коллекции веб-части для обозревателя серверов, а затем нажмите кнопку Удалить.

  3. В появившемся диалоговом окне нажмите кнопку Да, чтобы подтвердить удаление расширения, а затем нажмите кнопку Перезагрузить сейчас для завершения удаления.

  4. Закройте оба экземпляра Visual Studio (экспериментальном экземпляра и экземпляр Visual Studio, в котором открыто решение WebPartNode).

См. также

Задачи

Пошаговое руководство. Вызов клиентской объектной модели SharePoint в расширении обозревателя серверов

Создание значка или другого изображения (редактор изображений для значков)

Ссылки

Редактор изображений для значков

Другие ресурсы

Расширение узла подключений SharePoint в обозревателе сервера