Пошаговое руководство. Вызов клиентской объектной модели SharePoint в расширении обозревателя серверов
В этом пошаговом руководстве показано, как вызывать клиентскую объектную модель SharePoint из расширения узла Подключения SharePoint в обозревателе серверов.Дополнительные сведения об использовании клиентской объектной модели SharePoint см. в разделе Вызов объектных моделей SharePoint.
В этом пошаговом руководстве показано выполнение следующих задач.
Создание расширения Visual Studio, которое следующим образом расширяет узел Подключения SharePointобозревателя серверов:
Расширение добавляет узел Коллекция веб-части под каждым узлом сайта SharePoint в Обозреватель серверов.Этот новый узел содержит дочерние узлы, представляющие каждую из веб-частей в коллекции веб-частей на сайте;
Расширение определяет новый тип узла, который представляет экземпляр веб-части.Этот новый узел является базовым для дочерних узлов нового узла Коллекция веб-частей.Новый тип узла " веб-часть " отображает сведения в окне Свойства о веб-части, которое представляет узел.
Построение пакета расширения Visual Studio (VSIX) для расширения.
Отладка и тестирование расширения.
![]() |
---|
Расширение, который будет создан в этом пошаговом руководстве показано расширение, которое создается в Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части.Пошаговое руководство, использующего объектную модель сервера SharePoint, однако в этом пошаговом руководстве выполняет те же задачи с помощью клиентской объектной модели. |
Обязательные компоненты
Для выполнения данного пошагового руководства на компьютере разработчика должны быть установлены следующие компоненты:
Поддерживаемые выпуски Windows, SharePoint и Visual Studio.Дополнительные сведения см. в разделе Требования по разработке решений SharePoint.
Пакет SDK для Visual Studio.В этом пошаговом руководстве шаблон Проект VSIX из пакета SDK используется для создания пакета VSIX, который служит для развертывания расширения.Дополнительные сведения см. в разделе Расширение средств SharePoint в Visual Studio.
Знание следующих подходов может оказаться полезным, но не требуется для выполнения пошагового руководства.
использование клиентской объектной модели SharePoint.Дополнительные сведения см. в разделе Managed Client Object Model.
Веб-части SharePoint.Дополнительные сведения см. в разделе Web Parts Overview.
Создание проектов
Чтобы выполнить это пошаговое руководство, необходимо создать два проекта:
Проект VSIX, который позволит создать пакет VSIX для развертывания расширения Обозреватель серверов.
Проект библиотеки классов, средства расширения Обозреватель серверов.
Начните выполнение пошагового руководства с создания проектов.
Создание проекта VSIX
Запустите Visual Studio.
В строке меню выберите Файл, Создать, Проект.
В диалоговом окне Создать проект разверните узлы Visual C# или Visual Basic, а затем выберите Расширение среды.
Примечание
Узел Расширение среды доступен, только если установить пакет SDK для Visual Studio.Дополнительные сведения см. в параграфе предварительных требований ранее в этом разделе.
В верхней части диалогового окна, выберите платформа .NET Framework 4,5 в списке версий платформы .NET Framework.
Расширения средств SharePoint требуют функций в данной версии платформы .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.
Настройка проекта расширения
Перед разработкой кода для создания расширения, необходимо добавить ссылки на файлы с кодом и на сборки в проект, и необходимо обновить пространство имен по умолчанию.
Настройка проекта
В проекте добавьте WebPartNodeExtension 2 файла с кодом SiteNodeExtension, называются и WebPartNodeTypeProvider.
Открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Добавить ссылку.
В диалоговом окне Диспетчер ссылок – WebPartNodeExtension выберите узел Платформа, а затем установите флажки для сборок System.ComponentModel.Composition и System.Windows.Forms.
Выберите узел Расширения установите флажок для каждой из следующих сборок, а затем нажмите кнопку ОК:
Microsoft.SharePoint.Client
Microsoft.SharePoint.Client.Runtime
Microsoft.VisualStudio.SharePoint
Открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Свойства.
Откроется Конструктор проектов.
Выберите вкладку Приложение.
В окне Пространство имен по умолчанию (C#) или в окне Корневое пространство имен (Visual Basic) введите ServerExplorer.SharePointConnections.WebPartNode.
Создание значков для новых узлов
Создание значков для расширения Обозреватель серверов : 2 значок для нового узла Коллекция веб-части и другой значок для каждого узла " веб-часть " дочернего элемента под узлом Коллекция веб-части.Далее в этом пошаговом руководстве будет написан код, который связывает эти значки с узлами.
Создание значков для узлов
В Конструктор проектов для проекта WebPartNodeExtension, выберите вкладку Ресурсы.
Выберите ссылку на этот проект не содержит файла ресурсов по умолчанию. Щелкните эту ссылку для создания.
Visual Studio создает файл ресурсов и открытые в конструкторе.
В верхней части конструктора выберите стрелка на команде меню Добавить ресурс, а затем выберите Добавить новый значок.
Введите WebPartsNode для нового имени, значка и затем нажмите кнопку Добавить.
Новый значок будет отрыт в Редакторе изображений.
Правка версия значок 16x16, чтобы он будет содержать конструкцию, которую можно легко распознать.
Открыть контекстное меню для версии значка размером 32x32, а затем выберите Удалить тип изображений.
Повторяющиеся секции 3 до 7, чтобы добавить второй значок к ресурсам проект и назовите этот значок WebPart.
В Обозреватель решений в папке Ресурсы для проекта WebPartNodeExtension выберите WebPartsNode.ico.
В окне Свойства открыть список Действие при построении, а затем выберите Внедренный ресурс.
Повторите последние два шага для значка WebPart.ico.
Добавление узла коллекции веб-частей в обозреватель серверов
Создайте класс, который добавляет новый узел Коллекция веб-частей в узел каждого из сайтов SharePoint.Для добавления нового узла класс реализует интерфейс IExplorerNodeTypeExtension.Этот интерфейс следует реализовывать всякий раз, когда требуется расширить поведение имеющегося узла Обозреватель серверов, например добавить к узлу новый дочерний узел.
Добавление узла коллекции веб-частей в обозреватель серверов
Вставьте следующий код в файл кода SiteNodeExtension для проекта WebPartNodeExtension.
Примечание
После добавления этого кода, проект будет иметь некоторые компилировать ошибки.Эти ошибки исчезнут при добавлении кода на следующих шагах.
Imports System.Collections.Generic Imports System.ComponentModel.Composition Imports Microsoft.SharePoint.Client 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: Indicates that this class extends SharePoint site nodes in Server Explorer. ' SiteNodeExtension class: Represents an extension of SharePoint site nodes in Server Explorer. <Export(GetType(IExplorerNodeTypeExtension))> _ <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _ Friend Class SiteNodeExtension Implements IExplorerNodeTypeExtension Private siteUrl As System.Uri = Nothing 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) ' Get the site URL so that it can be used later to access the site ' by using the SharePoint client object model. siteUrl = e.Node.Context.SiteUrl ' 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 individual Web Part nodes under the new Web Part Gallery node. Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode) ' Use the SharePoint client object model to get items from the Web Part gallery. Dim Context As ClientContext = New ClientContext(siteUrl.AbsoluteUri) Dim WebPartsGallery As List = Context.Web.GetCatalog(CType(ListTemplateType.WebPartCatalog, Integer)) Dim WebParts As ListItemCollection = WebPartsGallery.GetItems(New CamlQuery()) ' Request the FieldValuesAsText property values with the Web Part items. Context.Load(WebParts, Function(listItems) listItems.Include(Function(i) i.FieldValuesAsText)) Context.ExecuteQuery() If WebParts IsNot Nothing Then For Each WebPart As ListItem 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(ListItem), WebPart) ' Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _ WebPart.FieldValuesAsText.FieldValues("Title"), Annotations) Next End If End Sub End Class End Namespace
using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; using Microsoft.VisualStudio.SharePoint; 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 { private System.Uri siteUrl = null; 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) { // Get the site URL so that it can be used later to access the site // by using the SharePoint client object model. siteUrl = e.Node.Context.SiteUrl; // 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 individual Web Part nodes under the new Web Part Gallery node. private void CreateWebPartNodes(IExplorerNode parentNode) { // Use the SharePoint client object model to get items from the Web Part gallery. ClientContext context = new ClientContext(siteUrl.AbsoluteUri); List webPartsGallery = context.Web.GetCatalog((int)ListTemplateType.WebPartCatalog); ListItemCollection webParts = webPartsGallery.GetItems(new CamlQuery()); // Request the FieldValuesAsText property values with the Web Part items. context.Load(webParts, listItems => listItems.Include(i => i.FieldValuesAsText)); context.ExecuteQuery(); if (webParts != null) { foreach (ListItem 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(ListItem), webPart } }; // Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, webPart.FieldValuesAsText.FieldValues["Title"], annotations); } } } } }
Определение типа узла, представляющего веб-часть
Создайте класс, который определяет новый тип узла, представляющий веб-часть.Visual Studio использует этот новый тип узла, чтобы отобразить дочерние узлы под узлом Коллекция веб-части.Каждый из этих дочерних узлов представляет отдельную веб-часть сайта SharePoint.
Для определения нового типа узла класс реализует интерфейс IExplorerNodeTypeProvider.Этот интерфейс следует реализовывать всякий раз, когда требуется определить новый тип узла в обозревателе серверов.
Определение типа узла веб-части
Вставьте следующий код в файл кода WebPartNodeTypeProvider для проекта WebPartNodeExtension.
Imports System Imports System.Collections.Generic Imports System.Windows.Forms Imports System.ComponentModel.Composition Imports Microsoft.SharePoint.Client 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 AddHandler typeDefinition.NodeMenuItemsRequested, AddressOf NodeMenuItemsRequested End Sub ' Retrieves properties that are displayed in the Properties window when ' a Web Part node is selected. Private Sub NodePropertiesRequested(ByVal Sender As Object, _ ByVal e As ExplorerNodePropertiesRequestedEventArgs) Dim webPart = e.Node.Annotations.GetValue(Of ListItem)() Dim propertySource = e.Node.Context.CreatePropertySourceObject( _ webPart.FieldValuesAsText.FieldValues) e.PropertySources.Add(propertySource) End Sub Private Sub NodeMenuItemsRequested(ByVal Sender As Object, _ ByVal e As ExplorerNodeMenuItemsRequestedEventArgs) Dim WebPartNodeMenuItem As IMenuItem = e.MenuItems.Add("Display Message") AddHandler WebPartNodeMenuItem.Click, AddressOf MenuItemClick End Sub Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs) Dim ParentNode As IExplorerNode = TryCast(e.Owner, IExplorerNode) If ParentNode IsNot Nothing Then Dim webPart = ParentNode.Annotations.GetValue(Of ListItem)() MessageBox.Show("You clicked the context menu for the following Web part: " & _ webPart.FieldValuesAsText.FieldValues("Title") + ".", "Web Part Menu Command") End If End Sub End Class End Namespace
using System; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; 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; typeDefinition.NodeMenuItemsRequested += NodeMenuItemsRequested; } // Retrieves properties that are displayed in the Properties window when // a Web Part node is selected. private void NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e) { var webPart = e.Node.Annotations.GetValue<ListItem>(); object propertySource = e.Node.Context.CreatePropertySourceObject( webPart.FieldValuesAsText.FieldValues); e.PropertySources.Add(propertySource); } private void NodeMenuItemsRequested( object sender, ExplorerNodeMenuItemsRequestedEventArgs e) { e.MenuItems.Add("Display Message").Click += MenuItemClick; } private void MenuItemClick(object sender, MenuItemEventArgs e) { IExplorerNode parentNode = e.Owner as IExplorerNode; if (parentNode != null) { var webPart = parentNode.Annotations.GetValue<ListItem>(); MessageBox.Show("You clicked the context menu for the following Web part: " + webPart.FieldValuesAsText.FieldValues["Title"] + ".", "Web Part Menu Command"); } } } }
Контрольная точка
На данный момент проект содержит весь код узла Коллекция веб-частей.Постройте проект WebPartNodeExtension убедиться, что он будет компилироваться без ошибок.
Построение проекта
- В Обозреватель решений открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Построение.
Создание пакета VSIX для развертывания расширения
Для развертывания расширения воспользуйтесь проектом VSIX в своем решении для создания пакета VSIX.Сначала настроить пакет VSIX, изменив файл source.extension.vsixmanifest, который включен в проект.Затем создайте пакет VSIX путем построения решения.
Настройка пакета VSIX
В Обозреватель решений в проекте WebPartNode, source.extension.vsixmanifest открыть файл в редакторе манифестов.
Файл source.extension.vsixmanifest качестве основы для файла extension.vsixmanifest которого все пакеты VSIX.Дополнительные сведения об этом файле см. в разделе Справочник по схеме расширения VSIX.
В окне Название продукта введите Узел коллекции веб-части для обозревателя серверов.
В окне Автор введите Contoso.
В окне Описание введите Добавляет пользовательский узел коллекции веб-части в узле подключения SharePoint в обозревателе сервера.
На вкладке Активы редактор выберите кнопку Создать.
В диалоговом окне Добавить новый актив в списке Тип выберите Microsoft.VisualStudio.MefComponent.
Примечание
Это значение соответствует элементу MefComponent, описанному в файле extension.vsixmanifest.Этот элемент задает имя сборки расширения в пакете VSIX.Дополнительные сведения см. в разделе MEFComponent Element.
В списке Источник выберите Проект в текущем решении.
В списке Проект выберите WebPartNodeExtension, а затем нажмите кнопку ОК.
В строке меню выберите Построение, Построить решение и убедитесь, что решение будет компилироваться без ошибок.
Убедитесь, что в выходную папку построения для проекта 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, в котором открыто решение WebPartNode).
См. также
Задачи
Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части
Создание значка или другого изображения (редактор изображений для значков)
Ссылки
Редактор изображений для значков
Основные понятия
Вызов объектных моделей SharePoint
Другие ресурсы
Расширение узла подключений SharePoint в обозревателе сервера