Návod: Volání do SharePoint klientského objektového modelu v rozšíření Průzkumník serveru

Tento návod ukazuje, jak volat objektový model klienta SharePoint z rozšíření pro uzel připojení SharePoint v nástroji Průzkumník serveru. Další informace o tom, jak používat objektový model klienta SharePoint, najdete v tématu Volání do SharePoint objektů.

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

  • Vytvoření Visual Studio rozšíření, které rozšiřuje SharePoint připojení 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í v okně Vlastnosti informace o webové části, kterou uzel představuje.

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

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

Poznámka

Rozšíření, které vytvoříte v tomto názorném postupu, se podobá rozšíření, které vytvoříte v návodu:Rozšíření Průzkumník serveru pro zobrazení webových částí . Tento názorný postup SharePoint objektový model serveru, ale tento názorný postup provádí stejné úlohy pomocí objektového modelu klienta.

Požadavky

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

  • Podporované edice Windows, SharePoint a Visual Studio.

  • Sada Visual Studio SDK. Tento názorný postup používá Project VSIX v sadě SDK k vytvoření balíčku VSIX pro nasazení rozšíření. Další informace najdete v tématu Rozšíření nástrojů SharePoint v Visual Studio.

Znalost následujících konceptů je užitečná, ale nevyžaduje se k dokončení tohoto návodu:

Vytvoření projektů

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

  • Projekt VSIX pro vytvoření balíčku VSIX pro nasazení Průzkumník serveru rozšíření.

  • Projekt knihovny tříd, který implementuje Průzkumník serveru rozšíření.

    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 a pak zvolte Možnost rozšíření.

    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.

    SharePoint nástroje vyžadují funkce v této verzi .NET Framework.

  5. Zvolte šablonu šablony Project VSIX.

  6. Do pole Název zadejte 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ý název rozbalte uzel Visual C# nebo Visual Basic uzly a pak zvolte Windows.

  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.

  5. Do pole Název zadejte 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.

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

Konfigurace projektu rozšíření

Než začnete psát kód pro vytvoření rozšíření, musíte do projektu přidat soubory kódu a odkazy na sestavení a aktualizovat výchozí obor názvů.

Konfigurace projektu

  1. V projektu WebPartNodeExtension přidejte dva soubory kódu s názvem SiteNodeExtension a WebPartNodeTypeProvider.

  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 uzel Framework a zaškrtněte políčka pro System.ComponentModel.Composition a System. Windows. Sestavení formulářů.

  4. Zvolte uzel Rozšíření, zaškrtněte políčko pro každé z následujících sestavení a pak zvolte tlačítko OK:

    • Microsoft. SharePoint. Klienta

    • Microsoft. SharePoint. Client.Runtime

    • Microsoft.VisualStudio. SharePoint

  5. Otevřete místní nabídku pro projekt WebPartNodeExtension a pak zvolte Vlastnosti.

    Otevře se Project Designer pro aplikace.

  6. Zvolte kartu Aplikace.

  7. Do pole Výchozí obor názvů (C#) nebo kořenový obor názvů (Visual Basic) zadejte 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 Project Designer pro projekt WebPartNodeExtension zvolte kartu Prostředky.

  2. Zvolte odkaz Tento projekt neobsahuje výchozí soubor prostředků. Kliknutím sem ho vytvořte.

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

  3. V horní části návrháře zvolte šipku v příkazu nabídky Přidat prostředek a pak zvolte Přidat novou ikonu.

  4. Jako název nové ikony zadejte WebPartsNode a pak zvolte tlačítko Přidat.

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

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

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

  7. Opakováním kroků 3 až 7 přidejte k prostředkům projektu druhou ikonu a pojmete ji WebPart.

  8. V Průzkumník řešení ve složce Prostředky pro projekt WebPartNodeExtension zvolte WebPartsNode.ico.

  9. V okně Vlastnosti otevřete seznam Akce sestavení a pak zvolte Vložený prostředek.

  10. 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í nového podřízeného uzlu do uzlu.

  1. Do souboru kódu SiteNodeExtension pro projekt WebPartNodeExtension vložte následující kód.

    Poznámka

    Po přidání tohoto kódu bude mít projekt několik chyb kompilace. Tyto chyby zmizí, až v pozdějších krocích přidáte kód.

    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.SharePoint.Client
    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: Indicates that this class extends SharePoint site nodes in Server Explorer.
        ' SiteNodeExtension class: Represents an extension of SharePoint site nodes in Server Explorer.
        <Export(GetType(IExplorerNodeTypeExtension))> _
        <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
        Friend Class SiteNodeExtension
            Implements IExplorerNodeTypeExtension
    
            Private siteUrl As System.Uri = Nothing
    
            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)
    
                ' Get the site URL so that it can be used later to access the site
                ' by using the SharePoint client object model.
                siteUrl = e.Node.Context.SiteUrl
    
                ' 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 individual Web Part nodes under the new Web Part Gallery node.
            Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode)
    
                ' Use the SharePoint client object model to get items from the Web Part gallery.
                Dim Context As ClientContext = New ClientContext(siteUrl.AbsoluteUri)
                Dim WebPartsGallery As List = Context.Web.GetCatalog(CType(ListTemplateType.WebPartCatalog, Integer))
                Dim WebParts As ListItemCollection = WebPartsGallery.GetItems(New CamlQuery())
    
                ' Request the FieldValuesAsText property values with the Web Part items.
                Context.Load(WebParts, Function(listItems) listItems.Include(Function(i) i.FieldValuesAsText))
                Context.ExecuteQuery()
    
                If WebParts IsNot Nothing Then
                    For Each WebPart As ListItem 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(ListItem), WebPart)
    
                        ' Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _
                            WebPart.FieldValuesAsText.FieldValues("Title"), 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ý z těchto podřízených uzlů 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. Do souboru kódu WebPartNodeTypeProvider pro projekt WebPartNodeExtension vložte následující kód.

    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);
            }
        }
    }
    
    Imports System
    Imports System.Collections.Generic
    Imports System.Windows.Forms
    Imports System.ComponentModel.Composition
    Imports Microsoft.SharePoint.Client
    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
                AddHandler typeDefinition.NodeMenuItemsRequested, AddressOf NodeMenuItemsRequested
            End Sub
    
            ' Retrieves properties that are displayed in the Properties window when
            ' a Web Part node is selected.
            Private Sub NodePropertiesRequested(ByVal Sender As Object, _
                ByVal e As ExplorerNodePropertiesRequestedEventArgs)
    
                Dim webPart = e.Node.Annotations.GetValue(Of ListItem)()
                Dim propertySource = e.Node.Context.CreatePropertySourceObject( _
                    webPart.FieldValuesAsText.FieldValues)
                e.PropertySources.Add(propertySource)
            End Sub
    
            Private Sub NodeMenuItemsRequested(ByVal Sender As Object, _
                ByVal e As ExplorerNodeMenuItemsRequestedEventArgs)
                Dim WebPartNodeMenuItem As IMenuItem = e.MenuItems.Add("Display Message")
                AddHandler WebPartNodeMenuItem.Click, AddressOf MenuItemClick
            End Sub
    
            Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs)
                Dim ParentNode As IExplorerNode = TryCast(e.Owner, IExplorerNode)
                If ParentNode IsNot Nothing Then
                    Dim webPart = ParentNode.Annotations.GetValue(Of ListItem)()
                    MessageBox.Show("You clicked the context menu for the following Web part: " & _
                        webPart.FieldValuesAsText.FieldValues("Title") + ".", "Web Part Menu Command")
                End If
            End Sub
        End Class
    End Namespace
    

CheckPoint

V tomto bodě návodu je teď veškerý kód uzlu Galerie webových částí v projektu . Sestavte projekt WebPartNodeExtension, abyste se ujistili, že se zkompiluje bez chyb.

Sestavení projektu

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

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, který je součástí projektu. 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 open 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.

  5. Na kartě Assety v editoru zvolte tlačítko Nový.

  6. V dialogovém okně Přidat nový prostředek 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 Project vyberte WebPartNodeExtension a pak zvolte tlačítko OK.

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

  10. 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 začněte ladit projekt rozšíření v experimentální instanci Visual Studio. Pak použijte nový Webové části v experimentální instanci Visual Studio.

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

  1. Restartujte Visual Studio 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í řádky 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 Visual Studio na řádku nabídek zvolte Zobrazit Průzkumník serveru > .

  2. Ověřte, že SharePoint, kterou chcete použít pro testování, se zobrazí v uzlu připojení SharePoint v nástroji Průzkumník serveru. Pokud není uvedený, postupujte následovně:

    1. 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 Visual Studio zastaví na zarážce, kterou jste nastavili dříve v metodě, a potom stiskněte klávesu F5 a pokračujte v ladění NodeChildrenRequested projektu.

  5. V experimentální instanci Visual Studio rozbalte uzel Galerie webových částí, který se zobrazí pod uzlem lokality nejvyšší úrovně.

  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 stiskněte klávesu F5 a 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. Otevřete místní nabídku webové části a pak zvolte Vlastnosti.

  9. V okně Vlastnosti ověřte, že se zobrazí podrobnosti o webové části.

  10. V Průzkumník serveru otevřete místní nabídku pro stejnou webovou část a pak zvolte Zobrazit zprávu.

    V okně se zprávou, které se zobrazí, zvolte tlačítko OK.

Odinstalujte rozšíření z Visual Studio

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

Odinstalace rozšíření

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

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

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

  3. V dialogovém okně, které se zobrazí, zvolte tlačítko Ano.

  4. Výběrem tlačítka Restartovat dokončete odinstalaci.

    Položka projektu se také odinstaluje.

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

Viz také