Passo a passo: Chamando o modelo de objeto do cliente do SharePoint em uma extensão do Server Explorer
Essa explicação passo a passo demonstra como chamar o modelo de objeto de cliente do SharePoint de uma extensão para o nó de Conexões do SharePoint em Gerenciador de Servidores.Para obter mais informações sobre como usar o modelo de objeto de cliente do SharePoint, consulte A chamada para os modelos de objeto do SharePoint.
Essa explicação passo a passo demonstra as seguintes tarefas:
Criando uma extensão de Visual Studio que estende o nó de Conexões do SharePoint de Gerenciador de Servidores das seguintes maneiras:
A extensão adiciona um nó de Galeria de Web Parts em cada nó de site web do SharePoint em Gerenciador de Servidores.Esse novo nó contém os nós filhos representando cada Web parts em galeria de Web parts no site.
A extensão define um novo tipo de nó que representa uma instância de Web parts.Esse novo tipo de nó é a base para os nós filho no novo nó de Galeria de Web Parts .O novo tipo de nó de Web parts exibe informações na janela de Propriedades sobre Web parts que representa o nó.
Criando um pacote de extensão (Visual Studio) VSIX para implantar a extensão.
Depuração e teste a extensão.
Observação |
---|
A extensão que você criar em essa explicação passo a passo é semelhante à medida que você cria em Passo a passo: Estendendo o Server Explorer para exibir Web Parts.O explicação passo a passo usa o modelo de objeto de servidor do SharePoint, mas essa explicação passo a passo realiza as mesmas tarefas usando o modelo de objeto de cliente. |
Pré-requisitos
Você precisa dos seguintes componentes no computador de desenvolvimento de concluir este explicação passo a passo:
Edições suportadas do windows, do SharePoint, e do Visual Studio.Para obter mais informações, consulte Requisitos para o desenvolvimento de soluções do SharePoint.
O Visual Studio SDK.Essa explicação passo a passo usa o modelo de projeto de VSIX no SDK para criar um conjunto de VSIX para implantar a extensão.Para obter mais informações, consulte Estender as ferramentas do SharePoint em Visual Studio.
Conhecer os seguintes conceitos é útil, mas não necessário, concluir a explicação passo a passo:
Usando o modelo de objeto de cliente do SharePoint.Para obter mais informações, consulte Modelo de objeto gerenciado de cliente.
Partes da Web do SharePoint.Para obter mais informações, consulte visão geral de Web Parts.
Criando projetos
Para concluir esta explicação passo-a-passo, você deve criar dois projetos:
Um projeto de VSIX criar o conjunto de VSIX para implantar a extensão de Gerenciador de Servidores .
Um projeto de biblioteca de classe que implementa a extensão de Gerenciador de Servidores .
Inicie o passo-a-passo criando projetos.
Para criar o projeto VSIX
Inicie o Visual Studio
Em a barra de menu, escolha Arquivo, Novo, Projeto.
Em a caixa de diálogo de Novo Projeto , expanda os nós de Visual C# ou de Visual Basic , e então escolha Extensibilidade.
Observação O nó de Extensibilidade está disponível somente se você instalar o Visual Studio SDK.Para obter mais informações, consulte a seção de pré-requisito anteriormente em este tópico.
Em a parte superior da caixa de diálogo, escolha o .NET Framework 4,5 na lista de versões do .NET Framework.
As extensões de ferramentas do SharePoint exigem recursos em esta versão do.NET Framework.
Escolha o modelo de projeto de VSIX .
Em a caixa de Nome , o tipo WebPartNode, e clique no botão de OK .
Visual Studio adiciona o projeto de WebPartNode a Gerenciador de Soluções.
Para criar o projeto de extensão
Em Gerenciador de Soluções, abra o menu de atalho para o nó da solução, escolha Adicionar, e então escolha Novo Projeto.
Observação Em projetos Visual Basic, o nó da solução aparece em Gerenciador de Soluções somente quando a caixa de seleção de Sempre mostrar solução está selecionada em General, Projects and Solutions, Options Dialog Box.
Em a caixa de diálogo de Novo Projeto , expanda os nós de Visual C# ou de Visual Basic , e então escolha Janelas.
Em a parte superior da caixa de diálogo, escolha o .NET Framework 4,5 na lista de versões do .NET Framework.
Em a lista de modelos de projeto, escolha Biblioteca de Classes.
Em a caixa de Nome , entre em WebPartNodeExtension, e então escolha o botão de OK .
Visual Studio adiciona o projeto de WebPartNodeExtension a solução e abre o arquivo de código Class1 de opção.
Exclua o arquivo de código Class1 do projeto.
Configurando o projeto de extensão
Antes que você escreva código para criar uma extensão, você deve adicionar arquivos de código e referências assembly ao seu projeto, e você deve atualizar o namespace padrão.
para configurar o projeto
Em o projeto de WebPartNodeExtension , adicione dois arquivos de código que são nomeados SiteNodeExtension e WebPartNodeTypeProvider.
Abra o menu de atalho para o projeto de WebPartNodeExtension, e então escolha Adicionar Referência.
Em a caixa de diálogo de Gerenciador de referência – WebPartNodeExtension , escolha o nó de estrutura em seguida, marque as caixas de seleção para assemblies de System.ComponentModel.Composition e System.Windows.Forms.
Escolha o nó de Extensões , selecione a caixa de seleção para cada um dos seguintes conjuntos de módulos (assemblies), e depois escolha o botão de OK :
Microsoft.SharePoint.Client
Microsoft.SharePoint.Client.Runtime
Microsoft.VisualStudio.SharePoint
Abra o menu de atalho para o projeto de WebPartNodeExtension , e então escolha Propriedades.
O Project Designer abre.
Escolha a guia de Aplicativo .
Em a caixa de Namespace padrão (C#) ou na caixa de Namespace raiz (Visual Basic), entre em ServerExplorer.SharePointConnections.WebPartNode.
Criando ícones para novos nós
crie dois ícones para a extensão de Gerenciador de Servidores : um ícone para o novo nó de Galeria de Web Parts e outro ícone para cada nó filho de Web parts sob o nó de Galeria de Web Parts .Posteriormente em esta explicação passo a passo, você irá escrever o código que associa esses ícones com os nós.
Para criar ícones para nós
Em Designer de Projeto para o projeto de WebPartNodeExtension, escolha a guia de Recursos .
Escolha o link que este projeto não contém um arquivo de recursos padrão. Clique aqui para criar um.
O Visual Studio cria um arquivo de recurso e abre no designer.
Em a parte superior do designer, escolha a seta no comando de menu de Adicionar Recurso , e então escolha Adicionar Novo Ícone.
Entre em WebPartsNode para o novo nome ícone, e então escolha o botão de Adicionar .
o novo ícone abre em Editor de Imagem.
Edite a versão 16x16 de ícone de modo que tenha um design que você pode facilmente reconhecer.
Abra o menu de atalho para a versão 32x32 ícone, e então escolha Excluir Tipo de Imagem.
Repita as etapas 3 a 7 para adicionar um segundo ícone aos recursos do projeto, e nomeie este ícone WebPart.
Em Gerenciador de Soluções, na pasta de Recursos para o projeto de WebPartNodeExtension , escolha WebPartsNode.ico.
Em a janela de Propriedades , abra a lista de Ação de Compilação , e então escolha Recurso Incorporado.
Repita as duas últimas etapas para WebPart.ico.
Adicionando o nó de galeria de Web parts ao server Explorer
Crie uma classe que adiciona o novo nó de Galeria de Web Parts a cada nó de site web do SharePoint.para adicionar o novo nó, a classe implementa a interface de IExplorerNodeTypeExtension .Implementar essa interface sempre que você deseja estender o comportamento de um nó existente em Gerenciador de Servidores, como adicionar um novo nó filho a um nó.
Para adicionar o nó de galeria de Web parts ao server Explorer
Cole o seguinte código no arquivo de código de SiteNodeExtension para o projeto de WebPartNodeExtension .
Observação Após adicionar este código, compilar o projeto mandará alguns erros.Esses erros partirão quando você adiciona o código em etapas posteriores.
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
using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; using Microsoft.VisualStudio.SharePoint; 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 { private System.Uri siteUrl = null; 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) { // 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", Properties.Resources.WebPartsNode.ToBitmap(), CreateWebPartNodes); } // Creates individual Web Part nodes under the new Web Part Gallery node. private void CreateWebPartNodes(IExplorerNode parentNode) { // Use the SharePoint client object model to get items from the Web Part gallery. ClientContext context = new ClientContext(siteUrl.AbsoluteUri); List webPartsGallery = context.Web.GetCatalog((int)ListTemplateType.WebPartCatalog); ListItemCollection webParts = webPartsGallery.GetItems(new CamlQuery()); // Request the FieldValuesAsText property values with the Web Part items. context.Load(webParts, listItems => listItems.Include(i => i.FieldValuesAsText)); context.ExecuteQuery(); if (webParts != null) { foreach (ListItem 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(ListItem), webPart } }; // Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, webPart.FieldValuesAsText.FieldValues["Title"], annotations); } } } } }
Definindo um tipo de nó que representa a Web parts
Crie uma classe que define um novo tipo de nó que representa a Web parts.O Visual Studio usa esse novo tipo de nó para exibir nós filho no nó de Galeria de Web Parts .Cada um de esses nós filho representa único Web parts no site do SharePoint.
Para definir um novo tipo de nó, a classe implementa a interface de IExplorerNodeTypeProvider .Implementar essa interface sempre que você deseja definir um novo tipo de nó em Gerenciador de Servidores.
Para definir o tipo de nó de Web parts
Cole o seguinte código no arquivo de código de WebPartNodeTypeProvider para o projeto de WebPartNodeExtension .
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
using System; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; 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; typeDefinition.NodeMenuItemsRequested += NodeMenuItemsRequested; } // Retrieves properties that are displayed in the Properties window when // a Web Part node is selected. private void NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e) { var webPart = e.Node.Annotations.GetValue<ListItem>(); object propertySource = e.Node.Context.CreatePropertySourceObject( webPart.FieldValuesAsText.FieldValues); e.PropertySources.Add(propertySource); } private void NodeMenuItemsRequested( object sender, ExplorerNodeMenuItemsRequestedEventArgs e) { e.MenuItems.Add("Display Message").Click += MenuItemClick; } private void MenuItemClick(object sender, MenuItemEventArgs e) { IExplorerNode parentNode = e.Owner as IExplorerNode; if (parentNode != null) { var webPart = parentNode.Annotations.GetValue<ListItem>(); MessageBox.Show("You clicked the context menu for the following Web part: " + webPart.FieldValuesAsText.FieldValues["Title"] + ".", "Web Part Menu Command"); } } } }
Ponto de Verificação
Em esse ponto do passo-a-passo, todo o código para o nó de Galeria de Web Parts agora está no projeto.Compile o projeto de WebPartNodeExtension certificar-se que compila sem erros.
Para criar o projeto
- Em Gerenciador de Soluções, abra o menu de atalho para o projeto de WebPartNodeExtension , e então escolha Compilar.
Criando um conjunto de VSIX para implantar a extensão
Para implantar a extensão, use o projeto de VSIX em sua solução criar um conjunto de VSIX.Primeiro, configure o conjunto de VSIX modificando o arquivo de source.extension.vsixmanifest que está incluído no projeto.Crie o conjunto de VSIX criando a solução.
Para configurar o conjunto de VSIX
Em Gerenciador de Soluções, no projeto de WebPartNode , arquivo aberto no editor de source.extension.vsixmanifest manifesto.
O arquivo de source.extension.vsixmanifest é a base para o arquivo de extension.vsixmanifest que quaisquer pacotes de VSIX exigem.Para obter mais informações sobre este arquivo, consulte Referência de esquema de extensão VSIX.
Em a caixa de Nome do produto , entre em Nó de galeria de Web parts para o server Explorer.
Em a caixa de Autor , entre em Contoso.
Em a caixa de Descrição , entre em Adiciona um nó personalizado de galeria de Web parts para o nó de conexões do SharePoint no server Explorer.
Em a guia de Ativos do editor, escolha o botão de Novo .
Em a caixa de diálogo de adicionar o novo recurso , na lista de Tipo , escolha Microsoft.VisualStudio.MefComponent.
Observação Esse valor corresponde ao elemento de MefComponent no arquivo de extension.vsixmanifest.Esse elemento especifica o nome de um assembly de extensão no conjunto de VSIX.Para obter mais informações, consulte MEFComponent Element.
Em a lista de Origem , escolha Um projeto na solução atual.
Em a lista de Projeto , escolha, e escolha WebPartNodeExtensionno botão de OK .
Em a barra de menu, escolha Compilar, Compilar solução, e então certifique-se de que a solução compila sem erros.
Certifique-se de que a pasta de saída de compilação para o projeto de WebPartNode agora contém o arquivo de WebPartNode.vsix.
Por padrão, a pasta de saída de compilação é.\ bin \ debug de sob a pasta que contém o arquivo de projeto.
testando a extensão
Você agora está pronto para testar o novo nó de Galeria de Web Parts em Gerenciador de Servidores.Primeiro, início para depurar o projeto de extensão em uma instância de avaliação do Visual Studio.Use o novo nó de Web Parts na instância de avaliação do Visual Studio.
Para iniciar a depuração da extensão
Reinicie o Visual Studio com credenciais administrativas, e abra a solução de WebPartNode .
Em o projeto de WebPartNodeExtension, abra o arquivo de código de SiteNodeExtension , e adicione um ponto de interrupção as primeiras linhas de código em métodos de NodeChildrenRequested e de CreateWebPartNodes .
Escolha a tecla F5 para iniciar a depuração.
O Visual Studio instala a extensão em %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Web Part Gallery Node Extension for Server Explorer\1.0 e inicia uma instância de avaliação do Visual Studio.Você irá testar o item de projeto em esse caso do Visual Studio.
para testar a extensão
Em a instância de avaliação do Visual Studio, na barra de menu, escolha Modo de Visualização, Gerenciador de Servidores.
Verifique se o site da web do SharePoint que você deseja usar para testar aparece sob o nó de Conexões do SharePoint em Gerenciador de Servidores.Se não estiver listada, siga estas etapas:
Abra o menu de atalho para Conexões do SharePoint, e então escolha Adicionar Conexão.
Em a caixa de diálogo de Adicione a conexão do SharePoint , digite o URL do site da web do SharePoint para o qual você deseja se conectar, e então escolha o botão de OK .
Para especificar o site da web do SharePoint no seu computador de desenvolvimento, digite https://localhost.
Expanda o nó de conexão do site (que exibe o URL do seu site) em seguida, expanda o nó de site filho (por exemplo, Site da Equipe).
Verifique se o código em outra instância do Visual Studio pára no ponto de interrupção que você definiu anteriormente no método de NodeChildrenRequested , e então escolha a tecla F5 para continuar a depuração o projeto.
Em a instância de avaliação do Visual Studio, expanda o nó de Galeria de Web Parts , que aparece sob o nó do site de nível superior.
Verifique se o código em outra instância do Visual Studio pára no ponto de interrupção que você definiu anteriormente no método de CreateWebPartNodes , e então escolha a tecla F5 para continuar a depuração o projeto.
Em a instância de avaliação do Visual Studio, verifique se todas as Web Parts no site conectada aparece sob o nó de Galeria de Web Parts em Gerenciador de Servidores.
Abra o menu de atalho para Web parts, e então escolha Propriedades.
Em a janela de Propriedades , verifique se os detalhes sobre Web parts aparecerem.
Em Gerenciador de Servidores, abra o menu de atalho para mesmo Web parts, e então escolha Exibir mensagem.
Em a caixa de mensagem que aparece, escolha o botão de OK .
Desinstalar a extensão do Visual Studio
Depois que você concluir testar a extensão, desinstalar-la do Visual Studio.
para desinstalar a extensão
Em a instância de avaliação do Visual Studio, na barra de menu, escolha Ferramentas, Extensões e Atualizações.
a caixa de diálogo de Extensões e Atualizações abre.
Em a lista de extensões Nó de galeria de Web parts para o server Explorer, escolha, e escolha no botão de Desinstalar .
Em a caixa de diálogo que aparece, escolha o botão de Sim .
Escolha o botão de Reiniciar Agora para concluir a desinstalação.
O item de projeto também é desinstalado.
Feche as duas instâncias do Visual Studio (a instância de avaliação e instância do Visual Studio em que a solução de WebPartNode estiver aberta.)
Consulte também
Tarefas
Passo a passo: Estendendo o Server Explorer para exibir Web Parts
Criar um ícone ou outra imagem (Editor de imagens para ícones)
Referência
Conceitos
A chamada para os modelos de objeto do SharePoint
Outros recursos
Estendendo o nó de conexões do SharePoint no Server Explorer