Návod: Rozšíření Průzkumník serveru pro zobrazení webových částí

V Visual Studio můžete pomocí uzlu SharePoint připojení nástroje Průzkumník serveru zobrazit komponenty v SharePoint lokalitách. Průzkumník serveru ale ve výchozím nastavení nezobrazí některé součásti. V tomto názorném postupu rozšíříte Průzkumník serveru tak, aby na každém připojeném webu SharePoint části.

Tento názorný postup ukazuje následující úlohy:

  • Vytvoření Visual Studio, které rozšiřuje Průzkumník serveru následujícími způsoby:

    • Rozšíření přidá uzel Galerie webových částí pod každý uzel SharePoint lokality v Průzkumník serveru. Tento nový uzel obsahuje podřízené uzly, které představují jednotlivé webové části v galerii webových částí na webu.

    • Rozšíření definuje nový typ uzlu, který představuje instanci webové části. Tento nový typ uzlu je základem pro podřízené uzly pod novým uzlem Galerie webových částí. Nový typ uzlu Webová část zobrazí informace o webové části, kterou představuje, v okně Vlastnosti. Typ uzlu obsahuje také vlastní položku místní nabídky, kterou můžete použít jako výchozí bod pro provádění dalších úloh, které se týkají webové části.

  • Vytvořte dva vlastní SharePoint, které sestavení rozšíření volá. SharePoint příkazy jsou metody, které mohou být volány rozšiřujícími sestaveními pro použití rozhraní API v objektovém modelu serveru pro SharePoint. V tomto názorném postupu vytvoříte příkazy, které načítá informace o webové části z místního SharePoint na vývojovém počítači. Další informace najdete v tématu Volání do SharePoint objektů.

  • Sestavení balíčku Visual Studio rozšíření (VSIX) pro nasazení rozšíření.

  • Ladění a testování rozšíření

Poznámka

Alternativní verzi tohoto návodu, která používá objektový model klienta pro SharePoint místo serverového objektového modelu, najdete v tématu Návod:Volání do objektového modelu klienta SharePoint v rozšíření Průzkumník serveru .

Požadavky

K dokončení tohoto návodu potřebujete na vývojovém počítači následující komponenty:

Vytvoření projektů

Abyste tento názorný postup dokončili, musíte vytvořit tři projekty:

  • Projekt VSIX pro vytvoření balíčku VSIX pro nasazení rozšíření.

  • Projekt knihovny tříd, který implementuje rozšíření. Tento projekt musí cílit na .NET Framework 4.5.

  • Projekt knihovny tříd, který definuje vlastní SharePoint příkazů. Tento projekt musí být the.NET Framework 3.5.

    Spusťte názorný postup vytvořením projektů.

Vytvoření projektu VSIX

  1. Spusťte Visual Studio .

  2. V řádku nabídek zvolte Soubor > Nový > Project.

  3. V dialogovém Project nový název rozbalte uzel Visual C# nebo Visual Basic uzly a pak zvolte uzel Rozšiřitelnost.

    Poznámka

    Uzel Rozšiřitelnost je k dispozici pouze v případě, že instalujete Visual Studio SDK. Další informace najdete v části Požadavky výše v tomto tématu.

  4. V horní části dialogového okna zvolte .NET Framework 4.5 v seznamu verzí .NET Framework.

  5. Zvolte šablonu šablony VSIX Project název projektu WebPartNode a pak zvolte tlačítko OK.

    Visual Studio přidá projekt WebPartNode do Průzkumník řešení.

Vytvoření projektu rozšíření

  1. V Průzkumník řešení otevřete místní nabídku pro uzel řešení, zvolte Přidat a pak zvolte Nový Project.

  2. V dialogovém Project Nový uzel rozbalte uzel Visual C# nebo Visual Basic a potom zvolte Windows uzel.

  3. V horní části dialogového okna zvolte .NET Framework 4.5 v seznamu verzí .NET Framework.

  4. V seznamu šablon projektů zvolte Knihovna tříd, pojmenováte projekt WebPartNodeExtension a pak zvolte tlačítko OK.

    Visual Studio přidá projekt WebPartNodeExtension do řešení a otevře výchozí soubor kódu Class1.

  5. Odstraňte soubor kódu Class1 z projektu.

Vytvoření projektu SharePoint příkazů

  1. V Průzkumník řešení otevřete místní nabídku pro uzel řešení, zvolte Přidat a pak zvolte Nový Project.

  2. V dialogovém okně Project nový uzel rozbalte uzel Visual C# nebo Visual Basic a pak zvolte uzel Windows.

  3. V horní části dialogového okna zvolte .NET Framework 3.5 v seznamu verzí .NET Framework.

  4. V seznamu šablon projektů zvolte Knihovna tříd, pojmenuje projekt WebPartCommands a pak zvolte tlačítko OK.

    Visual Studio přidá projekt WebPartCommands do řešení a otevře výchozí soubor kódu Class1.

  5. Odstraňte soubor kódu Class1 z projektu.

Konfigurace projektů

Než začnete psát kód pro vytvoření rozšíření, musíte přidat soubory kódu a odkazy na sestavení a nakonfigurovat nastavení projektu.

Konfigurace projektu WebPartNodeExtension

  1. Do projektu WebPartNodeExtension přidejte čtyři soubory kódu, které mají následující názvy:

    • SiteNodeExtension

    • WebPartNodeTypeProvider

    • Informace o uzlu WebPartNodeInfo

    • WebPartCommandIds

  2. Otevřete místní nabídku pro projekt WebPartNodeExtension a pak zvolte Přidat odkaz.

  3. V dialogovém okně Správce odkazů – WebPartNodeExtension zvolte kartu Rozhraní a zaškrtněte políčko pro každé z následujících sestavení:

    • System.ComponentModel.Composition

    • Systému. Windows. Formuláře

  4. Zvolte kartu Rozšíření a zaškrtněte políčko pro Microsoft.VisualStudio. SharePoint sestavení a pak zvolte tlačítko OK.

  5. V Průzkumník řešení otevřete místní nabídku pro uzel projektu WebPartNodeExtension a pak zvolte Vlastnosti.

    Otevře Project Návrháře sestav.

  6. Zvolte kartu Aplikace.

  7. Do pole Výchozí obor názvů (C#) nebo kořenový obor názvů ( ) zadejte Visual Basic ServerExplorer.SharePointConnections.WebPartNode.

Konfigurace projektu webpartcommands

  1. V projektu WebPartCommands přidejte soubor kódu s názvem WebPartCommands.

  2. V Průzkumník řešení otevřete místní nabídku pro uzel projektu WebPartCommands, zvolte Přidat a pak zvolte Existující položka.

  3. V dialogovém okně Přidat existující položku přejděte do složky, která obsahuje soubory kódu pro projekt WebPartNodeExtension, a pak zvolte soubory kódu WebPartNodeInfo a WebPartCommandIds.

  4. Zvolte šipku vedle tlačítka Přidat a pak v nabídce, která se zobrazí, zvolte Přidat jako odkaz.

    Visual Studio přidá soubory kódu do projektu WebPartCommands jako odkazy. V důsledku toho jsou soubory kódu umístěny v projektu WebPartNodeExtension, ale kód v souborech jsou také zkompilovány v projektu WebPartCommands.

  5. Znovu otevřete místní nabídku pro projekt WebPartCommands a zvolte Přidat odkaz.

  6. V dialogovém okně Správce odkazů – WebPartCommands zvolte kartu Rozšíření, zaškrtněte políčko pro každé z následujících sestavení a pak zvolte tlačítko OK:

    • Microsoft. SharePoint

    • Microsoft.VisualStudio. SharePoint. Příkazy

  7. V Průzkumník řešení otevřete místní nabídku pro projekt WebPartCommands znovu a pak zvolte Vlastnosti.

    Otevře Project Návrháře sestav.

  8. Zvolte kartu Aplikace.

  9. Do pole Výchozí obor názvů (C#) nebo kořenový obor názvů ( ) zadejte Visual Basic ServerExplorer.SharePointConnections.WebPartNode.

Vytváření ikon pro nové uzly

Vytvořte dvě ikony pro Průzkumník serveru: ikonu pro nový uzel Galerie webových částí a další ikonu pro každý podřízený uzel webové části pod uzlem Galerie webových částí. Později v tomto názorném postupu napíšete kód, který tyto ikony přidruží k uzlům.

Vytvoření ikon pro uzly

  1. V Průzkumník řešení otevřete místní nabídku pro projekt WebPartNodeExtension a pak zvolte Vlastnosti.

  2. Otevře Project Návrháře sestav.

  3. Zvolte kartu Resources (Prostředky) a pak zvolte This project does not contain a default resources file (Tento projekt neobsahuje výchozí soubor prostředků). Kliknutím sem vytvořte jeden odkaz.

    Visual Studio vytvoří soubor prostředků a otevře ho v návrháři.

  4. V horní části návrháře zvolte šipku vedle příkazu nabídky Přidat prostředek a pak v nabídce, která se zobrazí, zvolte Přidat novou ikonu.

  5. V dialogovém okně Přidat nový prostředek pojmete novou ikonu WebPartsNode a pak zvolte tlačítko Přidat.

    Nová ikona se otevře v Editoru obrázků.

  6. Upravte verzi ikony 16x16 tak, aby byla navržená tak, abyste ji snadno rozpoznali.

  7. Otevřete místní nabídku pro verzi ikony 32x32 a pak zvolte Odstranit typ obrázku.

  8. Opakováním kroků 5 až 8 přidejte k prostředkům projektu druhou ikonu a pojmnte ji WebPart.

  9. V Průzkumník řešení ve složce Prostředky pro projekt WebPartNodeExtension otevřete místní nabídku pro WebPartsNode.ico.

  10. V okně Vlastnosti zvolte šipku vedle možnosti Akce sestavení a pak v nabídce, která se zobrazí, zvolte Vložený prostředek.

  11. Zopakujte poslední dva kroky pro webovou část WebPart.ico.

Vytvořte třídu, která přidá nový uzel Galerie webových částí do každého uzlu SharePoint lokality. Pro přidání nového uzlu implementuje třída IExplorerNodeTypeExtension rozhraní . Toto rozhraní implementujte pokaždé, když chcete rozšířit chování existujícího uzlu v Průzkumník serveru, například přidání podřízeného uzlu do uzlu.

  1. V projektu WebPartNodeExtension otevřete soubor kódu SiteNodeExtension a vložte do něj následující kód.

    Poznámka

    Po přidání tohoto kódu bude mít projekt nějaké chyby kompilace, ale po přidání kódu v pozdějších krocích zmizí.

    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    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
        {
            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)
            {
                // 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 all of the individual Web Part nodes under the new Web Part Gallery node.
            private void CreateWebPartNodes(IExplorerNode parentNode)
            {
                // Call the custom SharePoint command to get items from the Web Part gallery.
                var webParts = parentNode.Context.SharePointConnection.ExecuteCommand<WebPartNodeInfo[]>(
                    WebPartCommandIds.GetWebParts);
    
                if (webParts != null)
                {
                    foreach (WebPartNodeInfo 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(WebPartNodeInfo), webPart } 
                        };
    
                        // Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId,
                            webPart.Name, annotations);
                    }
                }
            }
        }
    }
    
    Imports System.Collections.Generic
    Imports System.ComponentModel.Composition
    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.
        ' WebPartNodeTypeProvider class: Represents an extension of SharePoint site nodes in Server Explorer.
        <Export(GetType(IExplorerNodeTypeExtension))> _
        <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
        Friend Class SiteNodeExtension
            Implements IExplorerNodeTypeExtension
    
            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)
    
                ' 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 all of the individual Web Part nodes under the new Web Part Gallery node.
            Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode)
    
                ' Call the custom SharePoint command to get items from the Web Part gallery.
                Dim webParts = parentNode.Context.SharePointConnection.ExecuteCommand(Of WebPartNodeInfo())( _
                    WebPartCommandIds.GetWebParts)
                If webParts IsNot Nothing Then
                    For Each webPart As WebPartNodeInfo 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(WebPartNodeInfo), webPart)
    
                        ' Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _
                            webPart.Name, annotations)
                    Next
                End If
            End Sub
    
        End Class
    End Namespace
    

Definování typu uzlu, který představuje webovou část

Vytvořte třídu, která definuje nový typ uzlu, který představuje webovou část. Visual Studio tento nový typ uzlu používá k zobrazení podřízených uzlů v uzlu Galerie webových částí. Každý podřízený uzel představuje jednu webovou část v SharePoint lokalitě.

K definování nového typu uzlu implementuje třída IExplorerNodeTypeProvider rozhraní . Toto rozhraní implementujte vždy, když chcete definovat nový typ uzlu v Průzkumník serveru.

Definování typu uzlu webové části

  1. V projektu WebPartNodeExtension otevřete soubor kódu WebPartNodeTypeProvder a vložte do něj následující kód.

    Imports System
    Imports System.Collections.Generic
    Imports System.Windows.Forms
    Imports System.ComponentModel.Composition
    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
            End Sub
    
            ' Retrieves properties that are displayed in the Properties window when
            ' a Web Part node is selected.
            Private Sub NodePropertiesRequested(ByVal Sernder As Object, _
                ByVal e As ExplorerNodePropertiesRequestedEventArgs)
    
                Dim nodeInfo = e.Node.Annotations.GetValue(Of WebPartNodeInfo)()
    
                ' Call the custom SharePoint command to get the Web Part properties.
                Dim properties As Dictionary(Of String, String) = _
                    e.Node.Context.SharePointConnection.ExecuteCommand( _
                    Of WebPartNodeInfo, Dictionary(Of String, String))(
                    WebPartCommandIds.GetWebPartProperties, nodeInfo)
                Dim propertySource As Object = e.Node.Context.CreatePropertySourceObject(properties)
                e.PropertySources.Add(propertySource)
            End Sub
    
        End Class
    End Namespace
    
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.ComponentModel.Composition;
    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;
            }
    
            // Retrieves properties that are displayed in the Properties window when
            // a Web Part node is selected.
            private void NodePropertiesRequested(object sender,
                ExplorerNodePropertiesRequestedEventArgs e)
            {
                var webPartNodeInfo = e.Node.Annotations.GetValue<WebPartNodeInfo>();
    
                // Call the custom SharePoint command to get the Web Part properties.
                Dictionary<string, string> properties =
                    e.Node.Context.SharePointConnection.ExecuteCommand<
                    WebPartNodeInfo, Dictionary<string, string>>(
                    WebPartCommandIds.GetWebPartProperties, webPartNodeInfo);
    
                object propertySource = e.Node.Context.CreatePropertySourceObject(properties);
                e.PropertySources.Add(propertySource);
            }
        }
    }
    

Definování datové třídy webové části

Definujte třídu, která obsahuje data o jedné webové části na SharePoint webu. Později v tomto názorném postupu vytvoříte vlastní příkaz SharePoint, který načte data o každé webové části na webu a pak tato data přiřadí k instancím této třídy.

Definování datové třídy webové části

  1. V projektu WebPartNodeExtension otevřete soubor kódu WebPartNodeInfo a vložte do něj následující kód.

    Imports System
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        ' Contains basic data about a single Web Part on the SharePoint site. This class is 
        ' serializable so that instances of it can be sent between the WebPartNode and 
        ' WebPartCommands assemblies.
        <Serializable()> _
        Public Class WebPartNodeInfo
    
            Private siteIdValue As Guid
            Public Property SiteId As Guid
                Get
                    Return siteIdValue
                End Get
                Set(ByVal value As Guid)
                    siteIdValue = value
                End Set
            End Property
    
            Private idValue As Integer
            Public Property Id As Integer
                Get
                    Return idValue
                End Get
                Set(ByVal value As Integer)
                    idValue = value
                End Set
            End Property
    
            Private uniqueIdValue As Guid
            Public Property UniqueId As Guid
                Get
                    Return uniqueIdValue
                End Get
                Set(ByVal value As Guid)
                    uniqueIdValue = value
                End Set
            End Property
    
            Private nameValue As String
            Public Property Name As String
                Get
                    Return nameValue
                End Get
                Set(ByVal value As String)
                    nameValue = value
                End Set
            End Property
    
            Private imageUrlValue As String
            Public Property ImageUrl As String
                Get
                    Return imageUrlValue
                End Get
                Set(ByVal value As String)
                    imageUrlValue = value
                End Set
            End Property
    
        End Class
    End Namespace
    
    using System;
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        // Contains basic data about a single Web Part on the SharePoint site. This class is 
        // serializable so that instances of it can be sent between the WebPartNode and 
        // WebPartCommands assemblies.
        [Serializable]
        public class WebPartNodeInfo
        {
            public Guid SiteId { get; set; }
            public int Id { get; set; }
            public Guid UniqueId { get; set; }
            public string Name { get; set; }
            public string ImageUrl { get; set; }
        }
    }
    

Definování ID pro SharePoint příkazy

Definujte několik řetězců, které identifikují vlastní SharePoint příkazy. Tyto příkazy budete implementovat později v tomto názorném postupu.

Definování ID příkazů

  1. V projektu WebPartNodeExtension otevřete soubor kódu WebPartCommandIds a vložte do něj následující kód.

    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        public static class WebPartCommandIds
        {
            public const string GetWebParts = "WebPart.GetWebParts";
            public const string GetWebPartProperties = "WebPart.GetProperties";
        }
    }
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        Public Class WebPartCommandIds
            Public Const GetWebParts As String = "WebPart.GetWebParts"
            Public Const GetWebPartProperties As String = "WebPart.GetProperties"
        End Class
    
    End Namespace
    

Vytvoření vlastních SharePoint příkazů

Vytvořte vlastní příkazy, které volají objektový model serveru pro SharePoint k načtení dat o Webové části v SharePoint lokalitě. Každý příkaz je metoda, u které SharePointCommandAttribute je použit parametr .

Definování příkazů SharePoint

  1. V projektu WebPartCommands otevřete soubor kódu WebPartCommands a vložte do něj následující kód.

    using System.Collections.Generic;
    using Microsoft.SharePoint;
    using Microsoft.VisualStudio.SharePoint.Commands;
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        internal class WebPartsCommands
        {
            // Gets data for each Web Part on the SharePoint site, and returns an array of 
            // serializable objects that contain the data.
            [SharePointCommand(WebPartCommandIds.GetWebParts)]
            private static WebPartNodeInfo[] GetWebParts(ISharePointCommandContext context)
            {
                var nodeInfos = new List<WebPartNodeInfo>();
                SPListItemCollection webParts = context.Site.GetCatalog(
                    SPListTemplateType.WebPartCatalog).Items;
    
                foreach (SPListItem webPart in webParts)
                {
                    WebPartNodeInfo nodeInfo = new WebPartNodeInfo
                    {
                        Id = webPart.ID,
                        SiteId = webPart.ParentList.ParentWeb.ID,
                        Name = webPart.Title,
                        UniqueId = webPart.UniqueId,
                        ImageUrl = webPart.ParentList.ImageUrl
                    };
                    nodeInfos.Add(nodeInfo);
                }
    
                return nodeInfos.ToArray();
            }
    
            // Gets additional property data for a specific Web Part.
            [SharePointCommand(WebPartCommandIds.GetWebPartProperties)]
            private static Dictionary<string, string> GetWebPartProperties(ISharePointCommandContext context, 
                WebPartNodeInfo nodeInfo)
            {
                SPList webParts = context.Site.GetCatalog(SPListTemplateType.WebPartCatalog);
                SPListItem webPart = webParts.Items[nodeInfo.UniqueId];
    
                return SharePointCommandServices.GetProperties(webPart);
            }
        }
    }
    
    Imports System.Collections.Generic
    Imports Microsoft.SharePoint
    Imports Microsoft.VisualStudio.SharePoint.Commands
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        Friend Class WebPartsCommands
    
            ' Gets data for each Web Part on the SharePoint site, and returns an array of 
            ' serializable objects that contain the data.
            <SharePointCommand(WebPartCommandIds.GetWebParts)> _
            Private Shared Function GetWebParts(ByVal context As ISharePointCommandContext) As WebPartNodeInfo()
    
                Dim nodeInfos = New List(Of WebPartNodeInfo)()
                Dim webParts As SPListItemCollection = context.Site.GetCatalog( _
                    SPListTemplateType.WebPartCatalog).Items
    
                For Each webPart As SPListItem In webParts
                    Dim nodeInfo As WebPartNodeInfo = New WebPartNodeInfo()
                    With nodeInfo
                        .Id = webPart.ID
                        .SiteId = webPart.ParentList.ParentWeb.ID
                        .Name = webPart.Title
                        .UniqueId = webPart.UniqueId
                        .ImageUrl = webPart.ParentList.ImageUrl
                    End With
                    nodeInfos.Add(nodeInfo)
                Next
                Return nodeInfos.ToArray()
            End Function
    
            ' Gets additional property data for a specific Web Part.
            <SharePointCommand(WebPartCommandIds.GetWebPartProperties)> _
            Private Shared Function GetWebPartProperties(ByVal context As ISharePointCommandContext, _
                ByVal webPartNodeInfo As WebPartNodeInfo) As Dictionary(Of String, String)
    
                Dim webParts As SPList = context.Site.GetCatalog(SPListTemplateType.WebPartCatalog)
                Dim webPart As SPListItem = webParts.Items(webPartNodeInfo.UniqueId)
                Return SharePointCommandServices.GetProperties(webPart)
            End Function
        End Class
    End Namespace
    

CheckPoint

V tomto okamžiku návodu se teď veškerý kód pro uzel Galerie webových částí a SharePoint uzlu nachází v projektech. Sestavte řešení, abyste měli jistotu, že se oba projekty zkompilují bez chyb.

Sestavení řešení

  1. Na řádku nabídek zvolte Sestavit > řešení sestavení.

    Upozornění

    V tomto okamžiku může mít projekt WebPartNode chybu sestavení, protože soubor manifestu VSIX nemá hodnotu Pro autora. Tato chyba zmizí, když v pozdějších krocích přidáte hodnotu.

Vytvoření balíčku VSIX pro nasazení rozšíření

K nasazení rozšíření použijte projekt VSIX ve vašem řešení a vytvořte balíček VSIX. Nejprve nakonfigurujte balíček VSIX úpravou souboru source.extension.vsixmanifest v projektu VSIX. Pak vytvořte balíček VSIX sestavením řešení.

Konfigurace balíčku VSIX

  1. V Průzkumník řešení projektu WebPartNode otevřete soubor source.extension.vsixmanifest v editoru manifestu.

    Soubor source.extension.vsixmanifest je základem souboru extension.vsixmanifest, který vyžadují všechny balíčky VSIX. Další informace o tomto souboru najdete v referenčních informacích k rozšíření VSIX Schema 1.0.

  2. Do pole Název produktu zadejte Uzel galerie webových částí pro Průzkumník serveru.

  3. Do pole Autor zadejte Contoso.

  4. Do pole Popis zadejte Přidá vlastní uzel Galerie webových částí do uzlu SharePoint Připojení v Průzkumník serveru. Toto rozšíření používá vlastní příkaz SharePoint k volání do objektového modelu serveru.

  5. V editoru zvolte kartu Assety a pak zvolte tlačítko Nový.

    Zobrazí se dialogové okno Přidat nový prostředek.

  6. V seznamu Typ zvolte Microsoft.VisualStudio.MefComponent.

    Poznámka

    Tato hodnota odpovídá MefComponent elementu v souboru extension.vsixmanifest. Tento element určuje název sestavení rozšíření v balíčku VSIX. Další informace najdete v tématu MEFComponent – element (schéma VSX).

  7. V seznamu Zdroj zvolte Projekt v aktuálním řešení.

  8. V seznamu Project zvolte WebPartNodeExtension a pak zvolte tlačítko OK.

  9. V editoru manifestu znovu zvolte tlačítko Nový.

    Zobrazí se dialogové okno Přidat nový prostředek.

  10. Do pole Typ zadejte SharePoint. Commands.v4.

    Poznámka

    Tento element určuje vlastní rozšíření, které chcete zahrnout do Visual Studio rozšíření. Další informace najdete v tématu Asset – element (schéma VSX).

  11. V seznamu Zdroj zvolte položku seznamu Projekt v aktuálním řešení.

  12. V Project vyberte WebPartCommands a pak zvolte tlačítko OK.

  13. Na řádku nabídek zvolte Sestavit řešení sestavení a ujistěte se, že se řešení > kompiluje bez chyb.

  14. Ujistěte se, že výstupní složka sestavení pro projekt WebPartNode teď obsahuje soubor WebPartNode.vsix.

    Ve výchozím nastavení je výstupní složka sestavení .. Složka \bin\Debug ve složce, která obsahuje soubor projektu.

Otestování rozšíření

Teď jste připraveni otestovat nový uzel Galerie webových částí v Průzkumník serveru. Nejprve spusťte ladění rozšíření v experimentální instanci Visual Studio. Pak použijte nový uzel Webové části v experimentální instanci Visual Studio .

Spuštění ladění rozšíření

  1. Restartujte Visual Studio s přihlašovacími údaji správce a pak otevřete řešení WebPartNode.

  2. V projektu WebPartNodeExtension otevřete soubor kódu SiteNodeExtension a pak přidejte zarážku na první řádek kódu v NodeChildrenRequested metodách CreateWebPartNodes a .

  3. Výběrem klávesy F5 spusťte ladění.

    Visual Studio nainstaluje rozšíření do složky %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Web Part Gallery Extension for Průzkumník serveru\1.0 a spustí experimentální instanci Visual Studio. Otestujte položku projektu v této instanci Visual Studio.

Otestování rozšíření

  1. V experimentální instanci v Visual Studio řádku nabídek zvolte Zobrazit Průzkumník serveru > .

  2. Proveďte následující kroky, pokud se SharePoint, kterou chcete použít pro testování, v uzlu Připojení SharePoint v nástroji Průzkumník serveru:

    1. V Průzkumník serveru otevřete místní nabídku pro připojení SharePoint a pak zvolte Přidat připojení.

    2. V dialogovém okně SharePoint připojení zadejte adresu URL webu SharePoint, ke kterému se chcete připojit, a pak zvolte tlačítko OK.

      Pokud chcete zadat SharePoint na vývojovém počítači, zadejte http://localhost .

  3. Rozbalte uzel připojení k lokalitě (který zobrazuje adresu URL vaší lokality) a potom rozbalte podřízený uzel lokality (například Týmová stránka).

  4. Ověřte, že se kód v druhé instanci zastaví na zarážce, kterou jste nastavili dříve v metodě, a potom zvolte Visual Studio NodeChildrenRequested F5, abyste mohli pokračovat v ladění projektu.

  5. V experimentální instanci Visual Studio ověřte, že se pod uzlem lokality nejvyšší úrovně zobrazuje nový uzel s názvem Galerie webových částí, a potom rozbalte uzel Galerie webových částí.

  6. Ověřte, že se kód v druhé instanci Visual Studio zastaví na zarážce, kterou jste nastavili dříve v metodě, a potom pomocí klávesy F5 pokračujte v ladění CreateWebPartNodes projektu.

  7. V experimentální instanci služby Visual Studio ověřte, že se všechny Webové části připojené lokalitě zobrazí pod uzlem Galerie webových částí v Průzkumník serveru.

  8. V Průzkumník serveru otevřete místní nabídku pro jednu z Webové části a pak zvolte Vlastnosti.

  9. V případě, Visual Studio že ladíte, ověřte, že se v okně Vlastnosti zobrazují podrobnosti o webové části.

Odinstalujte rozšíření z Visual Studio

Po dokončení testování rozšíření odinstalujte rozšíření z Visual Studio.

Odinstalace rozšíření

  1. V experimentální instanci v řádku nabídek zvolte Nástroje Rozšíření a Visual Studio > aktualizace.

    Otevře se dialogové okno Rozšíření a aktualizace.

  2. V seznamu rozšíření zvolte rozšíření uzlu Galerie webových částí pro Průzkumník serveru a pak zvolte tlačítko Odinstalovat.

  3. V dialogovém okně, které se zobrazí, potvrďte výběrem tlačítka Ano, že chcete rozšíření odinstalovat, a potom výběrem tlačítka Restartovat dokončete odinstalaci.

  4. Zavřete obě instance Visual Studio (experimentální instanci a instanci Visual Studio, ve které je řešení WebPartNode otevřené).

Viz také