Postupy: Rozšíření uzlu služby SharePoint v průzkumníku serveru
Můžete rozšířit uzly pod uzlem Připojení služby SharePoint v Průzkumníku serveru.To je užitečné v případě, kdy chcete přidat nové podřízené uzly, položky nabídky zástupců nebo vlastnosti do existujícího uzlu.Další informace naleznete v tématu Rozšíření uzlu připojení služby SharePoint v průzkumníku serveru.
Chcete-li rozšířit uzel služby SharePoint v Průzkumníku serveru
Vytvořte projekt knihovny tříd.
Přidejte odkazy do následujících sestavení:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
Vytvořte třídu, která implementuje rozhraní IExplorerNodeTypeExtension.
Třídě přidejte atribut ExportAttribute.Tento atribut umožňuje Visual Studiu zjišťovat a načítat vaši implementaci IExplorerNodeTypeExtension.Předejte typ IExplorerNodeTypeExtension do konstruktoru atributu.
Třídě přidejte atribut ExplorerNodeTypeAttribute.Tento atribut určuje řetězec identifikátoru pro typ uzlu, který chcete rozšířit.
Chcete-li určit typy vestavěných uzlů poskytované Visual Studiem, předejte jednu z následujících výčtových hodnot konstruktoru atributů:
ExplorerNodeTypes: Používají tyto hodnoty pro určení uzlů webových připojení (uzly, které zobrazují adresy URL), uzly stránek nebo všechny ostatní nadřazené uzly v Průzkumníku serveru.
ExtensionNodeTypes: Pomocí těchto hodnot určete jeden z vestavěných uzlů, který představuje jednotlivou součást na webu služby SharePoint, jako je například uzel, který představuje seznam, pole nebo typ obsahu.
Vaše implementace metody IExplorerNodeTypeExtension.Initialize užívá členy parametru nodeType pro přidání funkcí do uzlu.Tento parametr je objekt IExplorerNodeType, který poskytuje přístup k událostem definovaným v rozhraní IExplorerNodeEvents.Například lze zpracovávat následující události:
IExplorerNodeEvents.NodeChildrenRequested: Zpracování této události přidává nové podřízené uzly do uzlu.Další informace naleznete v tématu Postupy: Přidání vlastního uzlu služby SharePoint do průzkumníka serveru.
IExplorerNodeEvents.NodeMenuItemsRequested: Zpracujte tuto událost, chcete-li přidat vlastní položku nabídky zástupců k uzlu.
IExplorerNodeEvents.NodePropertiesRequested: Zpracujte tuto událost, chcete-li přidat vlastní vlastnosti do uzlu.Vlastnosti se zobrazí v okně Vlastnosti v případě, že je vybrán uzel.
Příklad
Následující příklad kódu ukazuje, jak vytvořit dva různé typy rozšíření uzlu:
Rozšíření, které přidá položku kontextové nabídky do uzlů serveru SharePoint.Když kliknete na položku nabídky, zobrazí se název uzlu, na který bylo kliknuto.
Rozšíření, které přidá vlastní vlastnost s názvem ContosoExampleProperty do každého uzlu, který představuje pole s názvem Body.
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);
}
}
}
}
}
Toto rozšíření přidá vlastnost upravitelného řetězce do uzlů.Můžete také vytvořit vlastní vlastnosti, které zobrazí jen data pro čtení ze serveru SharePoint.Příklad, jak to provést naleznete v části Návod: Rozšíření průzkumníka serveru pro zobrazení částí webu.
Probíhá kompilace kódu
Tento příklad vyžaduje odkazy na následující sestavení:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
System.Windows.Forms
Nasazování rozšíření
Chcete-li nasadit rozšíření Průzkumníka serveru vytvořte Visual Studio balíček rozšíření (VSIX) pro sestavení a všechny další soubory, které chcete distribuovat s rozšířením.Další informace naleznete v tématu Nasazování rozšíření pro nástroje služby SharePoint v aplikaci Visual Studio.
Viz také
Úkoly
Návod: Rozšíření průzkumníka serveru pro zobrazení částí webu
Koncepty
Postupy: Přidání vlastního uzlu služby SharePoint do průzkumníka serveru
Přidružení vlastních dat k rozšíření nástrojů služby SharePoint
Další zdroje
Rozšíření uzlu připojení služby SharePoint v průzkumníku serveru