Практическое руководство. Добавление в обозреватель сервера пользовательского узла SharePoint
В узел Подключения SharePoint в Обозревателе сервера можно добавлять пользовательские узлы.Это бывает удобно, если требуется отображать дополнительные компоненты SharePoint, которые не отображаются в Обозревателе сервера по умолчанию.Дополнительные сведения см. в разделе Расширение узла подключений SharePoint в обозревателе сервера.
Чтобы добавить пользовательский узел, сначала создайте класс, определяющий новый узел.Затем создайте расширение, которое добавляет этот узел в качестве дочернего для имеющегося узла.
Определение нового узла
Создайте проект библиотеки классов.
Добавьте ссылки на следующие сборки:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
System.Drawing
Создайте класс, реализующий интерфейс IExplorerNodeTypeProvider.
Добавьте следующие атрибуты к классу:
System.ComponentModel.Composition.ExportAttribute.Этот атрибут позволяет Visual Studio находить и загружать пользовательскую реализацию IExplorerNodeTypeProvider.Передайте конструктору этого атрибута тип IExplorerNodeTypeProvider;
ExplorerNodeTypeAttribute.В определении узла этот атрибут задает идентификатор строки для нового узла.Чтобы все узлы имели уникальные идентификаторы, рекомендуется использовать формат название_компании.имя_узла.
В текущей реализации метода IExplorerNodeTypeProvider.InitializeType с помощью членов параметра typeDefinition настройте поведение нового узла.Этот параметр представляет собой объект IExplorerNodeTypeDefinition, который предоставляет доступ к событиям, определенным в интерфейсе IExplorerNodeEvents.
В следующем примере кода демонстрируется определение нового узла.В этом пример предполагается, что проект содержит в качестве внедренного ресурса значок с именем CustomChildNodeIcon.
<Export(GetType(IExplorerNodeTypeProvider))> _ <ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)> _ Friend Class ExampleNodeTypeProvider Implements IExplorerNodeTypeProvider Friend Const NodeTypeId As String = "Contoso.ServerExplorerNodeExample" Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _ Implements IExplorerNodeTypeProvider.InitializeType typeDefinition.DefaultIcon = _ My.Resources.CustomChildNodeIcon.ToBitmap() typeDefinition.IsAlwaysLeaf = True End Sub End Class
[Export(typeof(IExplorerNodeTypeProvider))] [ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)] internal class ExampleNodeTypeProvider : IExplorerNodeTypeProvider { internal const string NodeTypeId = "Contoso.ServerExplorerNodeExample"; public void InitializeType(IExplorerNodeTypeDefinition typeDefinition) { typeDefinition.DefaultIcon = Properties.Resources.CustomChildNodeIcon.ToBitmap(); typeDefinition.IsAlwaysLeaf = true; } }
Добавление нового узла в качестве дочернего для имеющегося узла
В проекте, содержащем определение нового узла, создайте класс, реализующий интерфейс IExplorerNodeTypeExtension.
Добавьте в класс атрибут System.ComponentModel.Composition.ExportAttribute.Этот атрибут позволяет Visual Studio находить и загружать пользовательскую реализацию класса IExplorerNodeTypeExtension.Передайте этому конструктору атрибута тип IExplorerNodeTypeExtension;
Добавьте в класс атрибут ExplorerNodeTypeAttribute.В расширении узла этот атрибут задает идентификатор строки для типа узла, который требуется расширить.
Чтобы указать предусмотренные в Visual Studio встроенные типы узлов, передайте одно из следующих значений перечисления конструктору атрибута.
ExplorerNodeTypes — эти значения позволяют задать узлы подключения сайтов (узлы, отображающие URL-адрес сайта), узлы сайтов и все другие родительские узлы в окне Обозреватель решений.
ExtensionNodeTypes – эти значения позволяют задать один из встроенных узлов, представляющих отдельный компонент на сайте SharePoint, например узел, представляющий список, поле или тип содержимого.
В реализации метода Initialize обработайте событие NodeChildrenRequested параметра IExplorerNodeType.
В обработчике событий NodeChildrenRequested добавьте новый узел в коллекцию дочерних узлов объекта Node, предоставляемого параметром аргументов события.
В следующем примере кода показано добавление нового узла в качестве дочернего узла сайта SharePoint в Обозревателе серверов.
<Export(GetType(IExplorerNodeTypeExtension))> _ <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _ Friend Class SiteNodeExtension Implements IExplorerNodeTypeExtension Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _ Implements IExplorerNodeTypeExtension.Initialize AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested End Sub Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs) e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId, _ "Custom Node", Nothing) End Sub End Class
[Export(typeof(IExplorerNodeTypeExtension))] [ExplorerNodeType(ExplorerNodeTypes.SiteNode)] internal class SiteNodeExtension : IExplorerNodeTypeExtension { public void Initialize(IExplorerNodeType nodeType) { nodeType.NodeChildrenRequested += NodeChildrenRequested; } private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e) { e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId, "Custom Node", null); } }
Полный пример
В следующем примере представлен полный код для определения простого узла и добавления его в качестве дочернего узла сайта SharePoint в Обозревателе серверов.
Imports System.ComponentModel.Composition
Imports Microsoft.VisualStudio.SharePoint
Imports Microsoft.VisualStudio.SharePoint.Explorer
Namespace Contoso.ServerExplorerExtension
<Export(GetType(IExplorerNodeTypeProvider))> _
<ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)> _
Friend Class ExampleNodeTypeProvider
Implements IExplorerNodeTypeProvider
Friend Const NodeTypeId As String = "Contoso.ServerExplorerNodeExample"
Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _
Implements IExplorerNodeTypeProvider.InitializeType
typeDefinition.DefaultIcon = _
My.Resources.CustomChildNodeIcon.ToBitmap()
typeDefinition.IsAlwaysLeaf = True
End Sub
End Class
<Export(GetType(IExplorerNodeTypeExtension))> _
<ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
Friend Class SiteNodeExtension
Implements IExplorerNodeTypeExtension
Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
Implements IExplorerNodeTypeExtension.Initialize
AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested
End Sub
Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs)
e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId, _
"Custom Node", Nothing)
End Sub
End Class
End Namespace
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.SharePoint;
using Microsoft.VisualStudio.SharePoint.Explorer;
namespace Contoso.ServerExplorerExtension
{
[Export(typeof(IExplorerNodeTypeProvider))]
[ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)]
internal class ExampleNodeTypeProvider : IExplorerNodeTypeProvider
{
internal const string NodeTypeId = "Contoso.ServerExplorerNodeExample";
public void InitializeType(IExplorerNodeTypeDefinition typeDefinition)
{
typeDefinition.DefaultIcon =
Properties.Resources.CustomChildNodeIcon.ToBitmap();
typeDefinition.IsAlwaysLeaf = true;
}
}
[Export(typeof(IExplorerNodeTypeExtension))]
[ExplorerNodeType(ExplorerNodeTypes.SiteNode)]
internal class SiteNodeExtension : IExplorerNodeTypeExtension
{
public void Initialize(IExplorerNodeType nodeType)
{
nodeType.NodeChildrenRequested += NodeChildrenRequested;
}
private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e)
{
e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId,
"Custom Node", null);
}
}
}
Компиляция кода
В этом пример предполагается, что проект содержит в качестве внедренного ресурса значок с именем CustomChildNodeIcon.Для этого примера также требуются ссылки на следующие сборки:
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
System.Drawing
Развертывание расширения
Чтобы развернуть расширение обозревателя сервера, создайте пакет расширения Visual Studio (VSIX) для сборки и всех остальных файлов, которые предположительно будут распространяться вместе с расширением.Дополнительные сведения см. в разделе Разработка расширений для средств SharePoint в Visual Studio.
См. также
Задачи
Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части
Основные понятия
Практическое руководство. Расширение узла SharePoint в обозревателе сервера
Другие ресурсы
Расширение узла подключений SharePoint в обозревателе сервера