如何:向服务器资源管理器添加自定义 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 方法的实现中,处理 IExplorerNodeType 参数的 NodeChildrenRequested 事件。
在 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) 包。 有关更多信息,请参见在 Visual Studio 中部署 SharePoint 工具扩展。