Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части
В Visual Studio можно использовать узел Подключения SharePointОбозреватель серверов чтобы просмотреть компоненты на сайтах SharePoint.Однако Обозреватель серверов не отображается по умолчанию нескольких компонентов.В этом пошаговом руководстве, можно расширить функциональные Обозреватель серверов таким образом, чтобы он отображает коллекцию веб-части для каждого подключенном сайте SharePoint.
В этом пошаговом руководстве показано выполнение следующих задач.
Создание расширения Visual Studio, которое следующим образом расширяет Обозреватель серверов:
Расширение добавляет узел Коллекция веб-части под каждым узлом сайта SharePoint в Обозреватель серверов.Этот новый узел содержит дочерние узлы, представляющие каждую из веб-частей в коллекции веб-частей на сайте;
Расширение определяет новый тип узла, который представляет экземпляр веб-части.Этот новый узел является базовым для дочерних узлов нового узла Коллекция веб-частей.Новый тип узла веб-части в окне Свойства отображает сведения о веб-части, которую он представляет.Тип узла также включает пользовательский элемент контекстного меню, который можно использовать в качестве отправной точки для выполнения других задач, относящихся к веб-части.
Создание настраиваемых команд SharePoint 2, которая вызывает сборку модуля.Команды SharePoint методы, которые могут быть Вызываются сборок модуля для использования API объектной модели сервера для SharePoint.В этом пошаговом руководстве описывается создание команд, извлекающих сведения о веб-части из локального сайта SharePoint на компьютере разработчика.Дополнительные сведения см. в разделе Вызов объектных моделей SharePoint.
Построение пакета расширения Visual Studio (VSIX) для расширения.
Отладка и тестирование расширения.
![]() |
---|
Для другой версии данного пошагового руководства, использующего объектную модель " клиент " для SharePoint вместо его объектной модели сервера см. в разделе Пошаговое руководство. Вызов клиентской объектной модели SharePoint в расширении обозревателя серверов. |
Обязательные компоненты
Для выполнения данного пошагового руководства на компьютере разработчика должны быть установлены следующие компоненты:
Поддерживаемые выпуски Windows, SharePoint и Visual Studio.Дополнительные сведения см. в разделе Требования по разработке решений SharePoint.
Пакет SDK для Visual Studio.В этом пошаговом руководстве шаблон Проект VSIX из пакета SDK используется для создания пакета VSIX, который служит для развертывания элемента проекта.Дополнительные сведения см. в разделе Расширение средств SharePoint в Visual Studio.
Знание следующих подходов может оказаться полезным, но не требуется для выполнения пошагового руководства.
Использование объектной модели сервера для SharePoint.Дополнительные сведения см. в разделе Using the SharePoint Foundation Server-Side Object Model.
веб-части в решениях SharePoint.Дополнительные сведения см. в разделе Web Parts Overview.
Создание проектов
Чтобы выполнить это пошаговое руководство, необходимо создать project 3:
проект VSIX, который позволит создать пакет VSIX для развертывания расширения;
проект библиотеки классов, реализующий расширениеЭтот проект должен ПУСТО платформы .NET Framework 4,5.
проект библиотеки классов, определяющий пользовательские команды SharePoint(в этом проекте необходимо использовать .NET Framework 3.5).
Начните выполнение пошагового руководства с создания проектов.
Создание проекта VSIX
Запустите Visual Studio.
В строке меню выберите Файл, Создать, Проект.
В диалоговом окне Создать проект разверните узлы Visual C# или Visual Basic, а затем выберите узел Расширение среды.
Примечание
Узел Расширение среды доступен, только если установить пакет SDK для Visual Studio.Дополнительные сведения см. в параграфе предварительных требований ранее в этом разделе.
В верхней части диалогового окна, выберите платформа .NET Framework 4,5 в списке версий платформы .NET Framework.
Выберите шаблон Проект VSIX, назовите проект WebPartNode, а затем нажмите кнопку ОК.
Visual Studio добавит в Обозреватель решений проект WebPartNode.
Создание проекта расширения
В Обозреватель решений открыть контекстное меню для узла решения выберите Добавить, а затем выберите Создать проект.
Примечание
В проектах Visual Basic узел решения отображается в обозревателе решений, только если в диалоговом окне General, Projects and Solutions, Options Dialog Box установлен флажок Всегда показывать решение.
В диалоговом окне Создать проект разверните узел Visual C# или узел Visual Basic, а затем выбрать узел Окна.
В верхней части диалогового окна, выберите платформа .NET Framework 4,5 в списке версий платформы .NET Framework.
В списке шаблонов проектов выберите Библиотека классов, назовите проект WebPartNodeExtension, а затем нажмите кнопку ОК.
Visual Studio добавит проект WebPartNodeExtension в решение и откроет заданный по умолчанию файл с кодом Class1.
Удалите из проекта файл c кодом Class1.
Создание проекта команд SharePoint
В Обозреватель решений открыть контекстное меню для узла решения выберите Добавить, а затем выберите Создать проект.
Примечание
В проектах Visual Basic узел решения отображается в обозревателе решений, только если в диалоговом окне General, Projects and Solutions, Options Dialog Box установлен флажок Всегда показывать решение.
В диалоговом окне Создать проект разверните узел Visual C# или узел Visual Basic, а затем выберите узел Окна.
В верхней части диалогового окна, выберите .NET Framework 3.5 в списке версий платформы .NET Framework.
В списке шаблонов проектов выберите Библиотека классов, назовите проект WebPartCommands, а затем нажмите кнопку ОК.
Visual Studio добавит проект WebPartCommands в решение и откроет файл с кодом по умолчанию Class1.
Удалите из проекта файл c кодом Class1.
Настройка проектов
Перед разработкой кода для создания расширения, необходимо добавить ссылки на файлы с кодом и на сборки, а также настроить параметры проекта.
Настройка проекта WebPartNodeExtension
В проекте WebPartNodeExtension добавьте 4 файла с кодом, имеющие следующие имена:
SiteNodeExtension
WebPartNodeTypeProvider
WebPartNodeInfo
WebPartCommandIds
Открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Добавить ссылку.
В диалоговом окне Диспетчер ссылок – WebPartNodeExtension выберите вкладку Платформа, а затем установите флажок для каждой из следующих сборок:
System.ComponentModel.Composition
System.Windows.Forms
Выберите вкладку Расширения установите флажок для сборки Microsoft.VisualStudio.SharePoint, а затем нажмите кнопку ОК.
В Обозреватель решений открыть контекстное меню для узла проекта WebPartNodeExtension, а затем выберите Свойства.
Откроется Конструктор проектов.
Выберите вкладку Приложение.
В окне Пространство имен по умолчанию (C#) или в окне Корневое пространство имен (Visual Basic) введите ServerExplorer.SharePointConnections.WebPartNode.
Настройка проекта WebPartCommands
В проекте WebPartCommands добавьте файл кода с именем WebPartCommands.
В Обозреватель решений открыть контекстное меню для узла проекта WebPartCommands выберите Добавить, а затем выберите Существующий элемент.
В диалоговом окне Добавление существующего элемента перейдите к папке, содержащей файлы с кодом проекта WebPartNodeExtension, а затем выберите файлы с кодом WebPartNodeInfo и WebPartCommandIds.
Нажмите стрелку рядом с кнопкой Добавить, а затем выберите Добавить как связь в появившемся меню.
Visual Studio добавит файлы с кодом в проект WebPartCommands в виде ссылок.В результате файлы кода найдены в проекте WebPartNodeExtension, но код в файлах также компилироваться в проекте WebPartCommands.
Раскрывайте контекстное меню для проекта WebPartCommands еще раз и выберите Добавить ссылку.
В диалоговом окне Диспетчер ссылок – WebPartCommands выберите вкладку Расширения установите флажок для каждой из следующих сборок, а затем нажмите кнопку ОК:
Microsoft.SharePoint
Microsoft.VisualStudio.SharePoint.Commands
В Обозреватель решений, раскрывайте контекстное меню для проекта WebPartCommands, а затем выберите Свойства.
Откроется Конструктор проектов.
Выберите вкладку Приложение.
В окне Пространство имен по умолчанию (C#) или в окне Корневое пространство имен (Visual Basic) введите ServerExplorer.SharePointConnections.WebPartNode.
Создание значков для новых узлов
Создайте два значка для расширений обозревателя серверов: значок для нового узла Коллекция веб-частей и еще один значок для каждого дочернего узла веб-части внутри узла Коллекция веб-частей.Далее в этом пошаговом руководстве будет показано, как написать код, связывающий эти значки с узлами.
Создание значков для узлов
В Обозреватель решений открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Свойства.
Откроется Конструктор проектов.
Выберите вкладку ресурсов, а затем выберите этот проект не содержит файла ресурсов по умолчанию. Щелкните здесь, чтобы создать одну связь.
Visual Studio создает файл ресурсов и открытые в конструкторе.
В верхней части конструктора выберите стрелку рядом с командой меню Добавить ресурс, а затем выберите Добавить новый значок в появившемся меню.
В диалоговом окне Добавление нового ресурса, назовите новый значок WebPartsNode, а затем нажмите кнопку Добавить.
Новый значок будет отрыт в Редакторе изображений.
Правка версия значок 16x16, чтобы он будет содержать конструкцию, которую можно легко распознать.
Открыть контекстное меню для версии значка размером 32x32, а затем выберите Удалить тип изображений.
Повторяющиеся секции 5 до 8, чтобы добавить второй значок к ресурсам проект и назовите этот значок WebPart.
В Обозреватель решений в папке Ресурсы для проекта WebPartNodeExtension открыть контекстное меню для WebPartsNode.ico.
В окне Свойства нажмите стрелку рядом с Действие при построении, а затем выберите Внедренный ресурс в появившемся меню.
Повторите последние два шага для значка 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
В Обозреватель решений под проектом WebPartNode, откройте файл source.extension.vsixmanifest в редакторе манифестов.
Файл source.extension.vsixmanifest качестве основы для файла extension.vsixmanifest которого все пакеты VSIX.Дополнительные сведения об этом файле см. в разделе Справочник по схеме расширения VSIX.
В окне Название продукта введите Узел коллекции веб-части для обозревателя серверов.
В окне Автор введите Contoso.
В поле описание введите добавить пользовательский узел коллекции веб-части в узле подключения SharePoint в обозревателе сервера. Для вызова серверной объектной модели расширение использует настраиваемую команду SharePoint.
Выберите вкладку Активы редактор, а затем нажмите кнопку Создать.
Диалоговое окно Добавить новый актив.
В списке Тип выберите Microsoft.VisualStudio.MefComponent.
Примечание
Это значение соответствует элементу MefComponent, описанному в файле extension.vsixmanifest.Этот элемент задает имя сборки расширения в пакете VSIX.Дополнительные сведения см. в разделе MEFComponent Element.
В списке Источник выберите Проект в текущем решении.
В списке Проект выберите WebPartNodeExtension, а затем нажмите кнопку ОК.
В редакторе манифестов, нажмите кнопку Создать попытку.
Диалоговое окно Добавить новый актив.
В окне Тип введите SharePoint.Commands.v4.
Примечание
Этот элемент задает настраиваемое расширение, которое требуется включить в расширение Visual Studio.Дополнительные сведения см. в разделе элемент актива (схема VSX).
В списке Источник выберите элемент списка Проект в текущем решении.
В списке Проект выберите WebPartCommands, а затем нажмите кнопку ОК.
В строке меню выберите Построение, Построить решение и убедитесь, что решение будет компилироваться без ошибок.
Убедитесь, что в выходную папку построения для проекта WebPartNode теперь содержит файл WebPartNode.vsix.
По умолчанию выходной папкой построения является папка ..\bin\Debug, расположенная в папке, содержащей файл проекта.
Тестирование расширения
Теперь можно проверить новый узел Коллекция веб-части в Обозреватель серверов.Начните отладку расширения в экспериментальном экземпляре Visual Studio.Затем перейдите к новому зулу Веб-части в экспериментальном экземпляре Visual Studio.
Запуск отладки расширения
Перезапустите Visual Studio с учетными данными администратора, а затем откройте решение WebPartNode.
В проекте WebPartNodeExtension, откройте файл с кодом SiteNodeExtension, а затем добавьте точку останова на первой строке кода в методах NodeChildrenRequested и CreateWebPartNodes.
Выберите ключ F5, чтобы начать отладку.
Visual Studio устанавливает расширения до %UserProfile% \ AppData \ local \ Microsoft \ VisualStudio \ 11.0Exp \ extensions \ Contoso \ расширение узла коллекции веб-части для обозревателя серверов \ 1.0 и запускает экспериментальном экземпляре Visual Studio.После этого можно тестировать элемент проекта в открытом экземпляре Visual Studio.
Тестирование расширения
В экспериментальном экземпляре Visual Studio в строке меню выберите Вид, Обозреватель серверов.
Выполните следующие действия, если сайт SharePoint, который необходимо использовать для тестирования не отображается в узле Подключения SharePoint в Обозреватель серверов:
В Обозреватель серверов открыть контекстное меню для Подключения SharePoint, а затем выберите Добавить подключение.
В диалоговом окне Добавление подключения к SharePoint введите URL-адрес сайта SharePoint, к которому нужно подключиться, а затем нажмите кнопку ОК.
Чтобы указать сайт SharePoint на компьютере разработчика, введите https://localhost.
Разверните узел подключения сайта (который указывает URL-адрес вашего сайта), а затем разверните узел подчиненного сайта (например, сайт группы).
Убедитесь, что выполнение кода в другом экземпляре Visual Studio останавливается в точке останова установлено ранее в методе NodeChildrenRequested, а затем выбрать F5, чтобы продолжить отладку проекта.
В экспериментальном экземпляре Visual Studio, убедитесь, что новый узел с именем Коллекция веб-части отображается в узле сайта верхнего уровня, а затем разверните узел Коллекция веб-части.
Убедитесь, что выполнение кода в другом экземпляре Visual Studio прерывается на точке останова, которая имеет ранее в методе CreateWebPartNodes, а затем выбрать ключ F5, чтобы продолжить отладку проекта.
В экспериментальном экземпляре Visual Studio, убедитесь в том, что все веб-части на подключенном сайте отображаются в узле Коллекция веб-части в Обозреватель серверов.
В Обозреватель серверов открыть контекстное меню для одного из веб-частей и выберите Свойства.
В экземпляре Visual Studio, отладке, убедитесь, что сведения о веб-части отображаются в окне Свойства.
Удаление расширения из Visual Studio
После тестирования расширения удалите его из Visual Studio.
Удаление расширения
В экспериментальном экземпляре Visual Studio в строке меню выберите Сервис, Расширения и обновления.
Будет открыто диалоговое окно Расширения и обновления.
В списке расширений выберите Расширение узла коллекции веб-части для обозревателя серверов, а затем нажмите кнопку Удалить.
В появившемся диалоговом окне нажмите кнопку Да, чтобы подтвердить удаление расширения, а затем нажмите кнопку Перезагрузить сейчас для завершения удаления.
Закройте оба экземпляра Visual Studio (экспериментальном экземпляра и экземпляр Visual Studio, в котором открыто решение WebPartNode).
См. также
Задачи
Создание значка или другого изображения (редактор изображений для значков)
Ссылки
Редактор изображений для значков
Другие ресурсы
Расширение узла подключений SharePoint в обозревателе сервера