Jak: rozszerzenie węzła programu SharePoint w programie Server Explorer
Można rozszerzyć węzły pod Połączeń SharePoint węzeł w Server Explorer.Jest to przydatne, gdy chcesz dodać nowe węzły podrzędne, elementy menu skrótów lub właściwości do istniejących węzła.Aby uzyskać więcej informacji, zobacz Rozszerzanie węzła połączenia programu SharePoint w programie Server Explorer.
Aby rozszerzyć węzła programu SharePoint w programie Server Explorer
Utwórz projekt biblioteki klas.
Dodaj odwołania do następujących zestawów:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
Tworzenie klasy implementującej IExplorerNodeTypeExtension interfejsu.
Dodaj System.ComponentModel.Composition.ExportAttribute atrybutu do klasy.Atrybut ten umożliwia wykrywanie i załadować do programu Visual Studio na IExplorerNodeTypeExtension wdrożenia.Przekazać IExplorerNodeTypeExtension typu Konstruktor atrybutu.
Dodaj ExplorerNodeTypeAttribute atrybutu do klasy.Ten atrybut określa identyfikator ciągu dla typu węzeł, który chcesz rozszerzyć.
Aby określić typy węzłów wbudowane, dostarczonym przez Visual Studio, przekazać jedną z następujących wartości wyliczenia Konstruktor atrybutu:
ExplorerNodeTypes: Użyj tych wartości, aby określić węzły połączenia witryny (węzłów, które są wyświetlane adresy URL witryny), witryny, węzły lub innych węzłów nadrzędnych w Server Explorer.
ExtensionNodeTypes: Użyj tych wartości, aby określić jeden z wbudowanych węzłów, które reprezentują poszczególnych składników w witrynie programu SharePoint, takich jak węzeł, który reprezentuje listy, pola lub typu zawartości.
W implementacji IExplorerNodeTypeExtension.Initialize metodę, użyj członków nodeType parametr, aby dodać funkcje do węzła.Ten parametr jest IExplorerNodeType obiekt, który zapewnia dostęp do zdarzenia zdefiniowane w IExplorerNodeEvents interfejsu.Na przykład można obsługiwać następujące zdarzenia:
IExplorerNodeEvents.NodeChildrenRequested: Obsługi tego zdarzenia, aby dodać nowe węzły podrzędne do węzła.Aby uzyskać więcej informacji, zobacz Jak: dodać niestandardowe węzeł SharePoint Server Explorer.
IExplorerNodeEvents.NodeMenuItemsRequested: Obsługi tego zdarzenia, aby dodać element menu skrótów niestandardowych do węzła.
IExplorerNodeEvents.NodePropertiesRequested: Obsługi tego zdarzenia, aby dodać właściwości niestandardowe do węzła.Właściwości są wyświetlane w Właściwości okno po wybraniu węzła.
Przykład
Poniższy przykład kodu pokazuje jak utworzyć dwa różne typy rozszerzeń węzła:
Rozszerzenie dodaje menu kontekstowego do węzłów witryny programu SharePoint.Kliknięcie elementu menu wyświetla nazwę węzła, który został kliknięty.
Rozszerzenie dodaje właściwość niestandardową o nazwie ContosoExampleProperty do każdego węzła, który reprezentuje pole o nazwie organ.
Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports System.Windows.Forms
Imports Microsoft.VisualStudio.SharePoint
Imports Microsoft.VisualStudio.SharePoint.Explorer
Imports Microsoft.VisualStudio.SharePoint.Explorer.Extensions
Namespace Contoso.ServerExplorerExtension
<Export(GetType(IExplorerNodeTypeExtension))> _
<ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
Friend Class SiteNodeExtensionWithContextMenu
Implements IExplorerNodeTypeExtension
Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
Implements IExplorerNodeTypeExtension.Initialize
AddHandler nodeType.NodeMenuItemsRequested, AddressOf NodeMenuItemsRequested
End Sub
Private Sub NodeMenuItemsRequested(ByVal Sender As Object, ByVal e As ExplorerNodeMenuItemsRequestedEventArgs)
Dim menuItem = e.MenuItems.Add("Display Message")
AddHandler menuItem.Click, AddressOf MenuItemClick
End Sub
Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs)
Dim node As IExplorerNode = CType(e.Owner, IExplorerNode)
MessageBox.Show(String.Format("Clicked the menu item for the '{0}' node.", node.Text))
End Sub
End Class
<Export(GetType(IExplorerNodeTypeExtension))> _
<ExplorerNodeType(ExtensionNodeTypes.FieldNode)> _
Friend Class FieldNodeExtensionWithProperty
Implements IExplorerNodeTypeExtension
Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
Implements IExplorerNodeTypeExtension.Initialize
AddHandler nodeType.NodePropertiesRequested, AddressOf NodePropertiesRequested
End Sub
Private Sub NodePropertiesRequested(ByVal Sender As Object, ByVal e As ExplorerNodePropertiesRequestedEventArgs)
Dim propertyObject As ExampleProperty = Nothing
' Only add the property to "Body" fields.
If e.Node.Text = "Body" Then
' If the properties object already exists for this node, get it from the node's annotations.
If False = e.Node.Annotations.TryGetValue(propertyObject) Then
' Otherwise, create a new properties object and add it to the annotations.
propertyObject = New ExampleProperty(e.Node)
e.Node.Annotations.Add(propertyObject)
End If
e.PropertySources.Add(propertyObject)
End If
End Sub
End Class
Friend Class ExampleProperty
Private node As IExplorerNode
Private Const propertyId As String = "Contoso.CustomActionTestProperty"
Private Const propertyDefaultValue As String = "This is a test value."
Friend Sub New(ByVal node As IExplorerNode)
Me.node = node
End Sub
' Gets or sets a simple string property.
<DisplayName("ContosoExampleProperty")> _
<DescriptionAttribute("This is an example property for field nodes.")> _
<DefaultValue(propertyDefaultValue)> _
Public Property TestProperty As String
Get
Dim propertyValue As String = Nothing
' Get the current property value if it already exists; otherwise, return a default value.
If False = node.Annotations.TryGetValue(propertyId, propertyValue) Then
propertyValue = propertyDefaultValue
End If
Return propertyValue
End Get
Set(ByVal value As String)
If value <> propertyDefaultValue Then
' Store the property value in the Annotations property of the node.
' Data in the Annotations property does not persist when Visual Studio exits.
node.Annotations(propertyId) = value
Else
' Do not save the default value.
node.Annotations.Values.Remove(propertyId)
End If
End Set
End Property
End Class
End Namespace
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Windows.Forms;
using Microsoft.VisualStudio.SharePoint;
using Microsoft.VisualStudio.SharePoint.Explorer;
using Microsoft.VisualStudio.SharePoint.Explorer.Extensions;
namespace Contoso.ServerExplorerExtension
{
[Export(typeof(IExplorerNodeTypeExtension))]
[ExplorerNodeType(ExplorerNodeTypes.SiteNode)]
internal class SiteNodeExtensionWithContextMenu : IExplorerNodeTypeExtension
{
public void Initialize(IExplorerNodeType nodeType)
{
nodeType.NodeMenuItemsRequested += nodeType_NodeMenuItemsRequested;
}
void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)
{
IMenuItem menuItem = e.MenuItems.Add("Display Message");
menuItem.Click += menuItem_Click;
}
void menuItem_Click(object sender, MenuItemEventArgs e)
{
IExplorerNode node = (IExplorerNode)e.Owner;
MessageBox.Show(string.Format("Clicked the menu item for the '{0}' node.", node.Text));
}
}
[Export(typeof(IExplorerNodeTypeExtension))]
[ExplorerNodeType(ExtensionNodeTypes.FieldNode)]
internal class FieldNodeExtensionWithProperty : IExplorerNodeTypeExtension
{
public void Initialize(IExplorerNodeType nodeType)
{
nodeType.NodePropertiesRequested += nodeType_NodePropertiesRequested;
}
void nodeType_NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e)
{
// Only add the property to "Body" fields.
if (e.Node.Text == "Body")
{
ExampleProperty propertyObject;
// If the properties object already exists for this node, get it from the node's annotations.
if (!e.Node.Annotations.TryGetValue(out propertyObject))
{
// Otherwise, create a new properties object and add it to the annotations.
propertyObject = new ExampleProperty(e.Node);
e.Node.Annotations.Add(propertyObject);
}
e.PropertySources.Add(propertyObject);
}
}
}
internal class ExampleProperty
{
private IExplorerNode node;
private const string propertyId = "Contoso.ExampleProperty";
private const string propertyDefaultValue = "This is an example property.";
internal ExampleProperty(IExplorerNode node)
{
this.node = node;
}
// Gets or sets a simple string property.
[DisplayName("ContosoExampleProperty")]
[DescriptionAttribute("This is an example property for field nodes.")]
[DefaultValue(propertyDefaultValue)]
public string TestProperty
{
get
{
string propertyValue;
// Get the current property value if it already exists; otherwise, return a default value.
if (!node.Annotations.TryGetValue(propertyId, out propertyValue))
{
propertyValue = propertyDefaultValue;
}
return propertyValue;
}
set
{
if (value != propertyDefaultValue)
{
// Store the property value in the Annotations property of the node.
// Data in the Annotations property does not persist when Visual Studio exits.
node.Annotations[propertyId] = value;
}
else
{
// Do not save the default value.
node.Annotations.Remove(propertyId);
}
}
}
}
}
Rozszerzenie to dodaje właściwość ciągu edytowalny do węzłów.Można również utworzyć niestandardowe właściwości, które wyświetlania tylko do odczytu danych z serwera programu SharePoint.Na przykład, który demonstruje, jak to zrobić, zobacz Instruktaż: Rozszerzanie Server Explorer do wyświetlania składników Web Part.
Kompilowanie kodu
W tym przykładzie wymaga odwołania do następujących zestawów:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
System.Windows.Forms
Wdrażanie rozszerzenia
Aby wdrożyć Server Explorer rozszerzenia, tworzenie Visual Studio extension (VSIX) pakiet Zgromadzenia i inne pliki, które chcesz dystrybuować z rozszerzeniem.Aby uzyskać więcej informacji, zobacz Wdrażanie rozszerzeń dla narzędzia programu SharePoint w programie Visual Studio.
Zobacz też
Zadania
Instruktaż: Rozszerzanie Server Explorer do wyświetlania składników Web Part
Koncepcje
Jak: dodać niestandardowe węzeł SharePoint Server Explorer
Kojarzenie danych niestandardowy z rozszerzeniami narzędzia programu SharePoint
Inne zasoby
Rozszerzanie węzła połączenia programu SharePoint w programie Server Explorer