Partilhar via


Passo a passo: Criando um Item de projeto de ação personalizada com um modelo de Item, parte 2

Após você definir um tipo personalizado de item de projeto do SharePoint e o associa com um modelo de item no Visual Studio, também convém fornecer um assistente para o modelo.Você pode usar o assistente para coletar informações de usuários quando usam o modelo para adicionar uma nova instância de item de projeto a um projeto.Informações que você reunir pode ser usada para inicializar o item de projeto.

Em essa explicação passo a passo, você adicionará um assistente para o item de projeto personalizado de ação que é demonstrado em Passo a passo: Criando um Item de projeto de ação personalizada com um modelo de Item, parte 1.Quando um usuário adiciona um item de projeto personalizado de ação para um projeto do SharePoint, o assistente coleta informações sobre a ação personalizada (como o local e o URL para navegar quando um usuário final o escolher) e adiciona essa informação para o arquivo de Elements.xml no novo item de projeto.

Essa explicação passo a passo demonstra as seguintes tarefas:

  • Criando um assistente personalizado para o SharePoint projeta o tipo de item que está associado com um modelo de item.

  • Definindo um assistente interface do usuário personalizada que se assemelha aos assistentes internas para itens de projeto do SharePoint no Visual Studio.

  • Usando parâmetros substituível para inicializar arquivos de projeto do SharePoint com dados que você reunir no assistente.

  • Depuração e teste o assistente.

ObservaçãoObservação

Você pode baixar um exemplo que contém os projetos terminado, o código, e outros arquivos para essa explicação passo a passo de seguinte local: Arquivos de projeto para passo a passo de extensibilidade de ferramentas do SharePoint.

Pré-requisitos

Para executar esta explicação passo a passo, você deve primeiro criar a solução de CustomActionProjectItem completando Passo a passo: Criando um Item de projeto de ação personalizada com um modelo de Item, parte 1.

Você também precisa dos seguintes componentes no computador de desenvolvimento de concluir este explicação passo a passo:

Conhecer os seguintes conceitos é útil, mas não necessário, concluir a explicação passo a passo:

Criando o projeto do assistente

Para concluir esta explicação passo-a-passo, você deve adicionar um projeto à solução de CustomActionProjectItem que você criou em Passo a passo: Criando um Item de projeto de ação personalizada com um modelo de Item, parte 1.Você irá implementar a interface de IWizard e o assistente interface do usuário no projeto.

Para criar o projeto do assistente

  1. Em o Visual Studio, abra a solução de CustomActionProjectItem

  2. 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çãoObservaçã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.

  3. Em a caixa de diálogo de Novo Projeto , expanda os nós de Visual C# ou de Visual Basic , e então escolha o nó de Janelas .

  4. Em a parte superior da caixa de diálogo de Novo Projeto , certifique-se de que o .NET Framework 4,5 é escolhido na lista de versões do .NET Framework.

  5. Escolha o modelo de projeto de Biblioteca de Controle de Usuário do WPF , nomeie o projeto ItemTemplateWizard, e então escolha o botão de OK .

    Visual Studio adiciona o projeto de ItemTemplateWizard à solução.

  6. Excluir o item page1.xaml do projeto.

Configurando o projeto do assistente

Antes de criar o assistente, você deve adicionar uma janela do Windows Presentation Foundation (WPF), um arquivo de código, e referências assembly para o projeto.

Para configurar o projeto do assistente

  1. Em Gerenciador de Soluções, abra o menu de atalho do nó de projeto de ItemTemplateWizard , e então escolha Propriedades.

  2. Em Designer de Projeto, certifique-se de que a estrutura de destino é definida para o.NET Framework 4,5.

    Para projetos visual C#, você pode definir esse valor na guia de Aplicativo .Para projetos Visual Basic, você pode definir esse valor na guia de Compilar .Para obter mais informações, consulte Como: usar uma versão do.NET Framework.

  3. Em o projeto de ItemTemplateWizard , adicione um item de janela (WPF) ao projeto, e nomeie o item WizardWindow.

  4. Adicione dois arquivos de código que são nomeados CustomActionWizard e cadeias de caracteres.

  5. Abra o menu de atalho para o projeto de ItemTemplateWizard , e então escolha Adicionar Referência.

  6. Em a caixa de diálogo de Gerenciador de referência - ItemTemplateWizard , sob o nó de Assemblies , escolha o nó de Extensões .

  7. Marque as caixas de seleção ao lado dos seguintes conjuntos de módulos (assemblies), e depois escolha o botão de OK :

    • EnvDTE

    • Microsoft.VisualStudio.Shell.11.0

    • Microsoft.VisualStudio.TemplateWizardInterface

  8. Em Gerenciador de Soluções, na pasta de Referências para o projeto de ItemTemplateWizard, escolha a referência de EnvDTE .

    ObservaçãoObservação

    Em projetos Visual Basic, a pasta de Referências aparece somente quando a caixa de seleção de Sempre mostrar solução está selecionada em General, Projects and Solutions, Options Dialog Box.

  9. Em a janela de Propriedades , altere o valor da propriedade de Inserir Tipos Interop a False.

Definindo o local padrão e as cadeias de caracteres de identificação de ações personalizadas

Cada ação personalizada tem um local e uma identificação que é especificado em atributos de GroupID e de Location do elemento de CustomAction no arquivo de Elements.xml.Em esta etapa, você define algumas das cadeias de caracteres válidos para esses atributos no projeto de ItemTemplateWizard.Quando você concluir essa explicação passo a passo, essas cadeias de caracteres são escritas no arquivo de Elements.xml no item de projeto personalizado de ação quando os usuários especifiquem um local e uma identificação no assistente.

Para simplificar, este exemplo oferece suporte somente um subconjunto de locais padrão e os IDs disponíveis.Para obter uma lista completa, consulte Locais padrão e personalizados IDs de ação.

Para definir o local padrão e as cadeias de caracteres de identificação

  1. aberto.

  2. Em o projeto de ItemTemplateWizard , substitua o código no arquivo de código de cadeias de caracteres com o código a seguir.

    ' This sample only supports several custom action locations and their group IDs. 
    Friend Class CustomActionLocations
        Friend Const ListEdit As String = "Microsoft.SharePoint.ListEdit"
        Friend Const StandardMenu As String = "Microsoft.SharePoint.StandardMenu"
    End Class
    
    Friend Class StandardMenuGroupIds
        Friend Const Actions As String = "ActionsMenu"
        Friend Const ActionsSurvey As String = "ActionsMenuForSurvey"
        Friend Const NewMenu As String = "NewMenu"
        Friend Const Settings As String = "SettingsMenu"
        Friend Const SettingsSurvey As String = "SettingsMenuForSurvey"
        Friend Const SiteActions As String = "SiteActions"
        Friend Const Upload As String = "UploadMenu"
        Friend Const ViewSelector As String = "ViewSelectorMenu"
    End Class
    
    Friend Class ListEditGroupIds
        Friend Const Communications As String = "Communications"
        Friend Const GeneralSettings As String = "GeneralSettings"
        Friend Const Permissions As String = "Permissions"
    End Class
    
    Friend Class DefaultTextBoxStrings
        Friend Const TitleText As String = "Replace this with your title"
        Friend Const DescriptionText As String = "Replace this with your description"
        Friend Const UrlText As String = "~site/Lists/Tasks/AllItems.aspx"
    End Class
    
    
    namespace ItemTemplateWizard
    {
        // This sample only supports several custom action locations and their group IDs. 
        internal class CustomActionLocations
        {
            internal const string ListEdit = "Microsoft.SharePoint.ListEdit";
            internal const string StandardMenu = "Microsoft.SharePoint.StandardMenu";
        }
    
        internal class StandardMenuGroupIds
        {
            internal const string Actions = "ActionsMenu";
            internal const string ActionsSurvey = "ActionsMenuForSurvey";
            internal const string NewMenu = "NewMenu";
            internal const string Settings = "SettingsMenu";
            internal const string SettingsSurvey = "SettingsMenuForSurvey";
            internal const string SiteActions = "SiteActions";
            internal const string Upload = "UploadMenu";
            internal const string ViewSelector = "ViewSelectorMenu";
        }
    
        internal class ListEditGroupIds
        {
            internal const string Communications = "Communications";
            internal const string GeneralSettings = "GeneralSettings";
            internal const string Permissions = "Permissions";
        }
    
        internal class DefaultTextBoxStrings
        {
            internal const string TitleText = "Replace this with your title";
            internal const string DescriptionText = "Replace this with your description";
            internal const string UrlText = "~site/Lists/Tasks/AllItems.aspx";
        }
    }
    

Criando o assistente interface de usuário

Adicione XAML para definir a interface do usuário assistente, e adicione um código para associar qualquer um dos controles no assistente para cadeias de caracteres de identificação.O assistente que você cria lembra o assistente interno para projetos do SharePoint no Visual Studio.

Para criar o assistente interface de usuário

  1. Em o projeto de ItemTemplateWizard , abra o menu de atalho para o arquivo de WizardWindow.xaml , e então escolha Abrir para abrir a janela no designer.

  2. Em o modo de exibição XAML, substitua a atual XAML com o seguinte XAML.O XAML define uma interface do usuário que inclui um título, controles para especificar o comportamento de ação personalizada, e botões de navegação na parte inferior da janela.

    ObservaçãoObservação

    Seu projeto mandará criar alguns erros depois de adicionar este código.Esses erros partirão quando você adiciona o código em etapas posteriores.

    <ui:DialogWindow x:Class="ItemTemplateWizard.WizardWindow"
                     xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:ui="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.11.0"        
                     xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
                     Title="SharePoint Customization Wizard" Height="500" Width="700" ResizeMode="NoResize" 
                     Loaded="Window_Loaded" TextOptions.TextFormattingMode="Display">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="75*" />
                <RowDefinition Height="364*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="60*" />
            </Grid.RowDefinitions>
            <Grid Grid.Row="0" Name="headingGrid" Background="White">
                <Label Grid.Row="0" Content="Configure the Custom Action" Name="pageHeaderLabel" HorizontalAlignment="Left" 
                       VerticalAlignment="Center" Margin="18,0,0,0" FontWeight="ExtraBold" />
            </Grid>
            <Grid Grid.Row="1" Name="mainGrid">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="20*" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="400*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Vertical">
                    <Label Margin="0,20,0,0" Content="Location:" Name="locationLabel" FontWeight="Bold" />
                    <RadioButton Content="_List Edit" Margin="5,0,0,0" Name="listEditRadioButton" 
                                 Checked="listEditRadioButton_Checked" FontWeight="Normal"  />
                    <RadioButton Content="_Standard Menu" Margin="5,5,0,0" Name="standardMenuRadioButton" 
                                 Checked="standardMenuRadioButton_Checked" FontWeight="Normal" />
                </StackPanel>
                <Label Grid.Row="1" Grid.Column="1" Margin="0,15,0,0" Content="_Group ID:" Name="groupIdLabel" 
                       FontWeight="Bold" Target="{Binding ElementName=idComboBox}" />
                <ComboBox Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" 
                          Width="253" Name="idComboBox" IsEditable="False" IsSynchronizedWithCurrentItem="True" />
                <Label Grid.Row="2" Grid.Column="1" Margin="0,15,0,0" Content="_Title:" Name="titleLabel" 
                       FontWeight="Bold" Target="{Binding ElementName=titleTextBox}" />
                <TextBox Grid.Row="2" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" 
                         Name="titleTextBox" Width="410" Text="" />
                <Label Grid.Row="3" Grid.Column="1" Margin="0,15,0,0" Content="_Description:" Name="descriptionLabel" 
                       FontWeight="Bold" Target="{Binding ElementName=descriptionTextBox}" />
                <TextBox Grid.Row="3" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" 
                         Name="descriptionTextBox" Width="410" Text="" />
                <Label Grid.Row="4" Grid.Column="1" Margin="0,15,0,0" Content="_URL:" Height="28" Name="urlLabel" 
                       FontWeight="Bold" Target="{Binding ElementName=urlTextBox}" />
                <TextBox Grid.Row="4" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" 
                         Name="urlTextBox" Width="410" Text="" />
            </Grid>
            <Rectangle Grid.Row="2" Name="separatorRectangle" Fill="White"  />
            <StackPanel Grid.Row="3" Name="navigationPanel" Orientation="Horizontal">
                <Button Content="_Finish" Margin="500,0,0,0" Height="25" Name="finishButton" Width="85" 
                        Click="finishButton_Click" IsDefault="True" />
                <Button Content="Cancel" Margin="10,0,0,0" Height="25" Name="cancelButton" Width="85" IsCancel="True" />
            </StackPanel>
        </Grid>
    </ui:DialogWindow>
    
    ObservaçãoObservação

    A janela que é criada em este XAML é derivada da classe base de DialogWindow .Quando você adiciona uma caixa de diálogo personalizado WPF em Visual Studio, recomendamos que você derivado a caixa de diálogo de esta classe para ter o estilo consistente com as outras caixas de diálogo no Visual Studio e para evitar problemas que podem ocorrer de outra forma com caixas de diálogo modais.Para obter mais informações, consulte Como: criar e gerenciar caixas de diálogo.

  3. Se você estiver desenvolvendo um projeto Visual Basic, remova o namespace de ItemTemplateWizard o nome da classe de WizardWindow no atributo de x:Class do elemento de Window .Este elemento está na primeira linha do XAML.Quando você terminar, a primeira linha deve se parecer com o seguinte código:

    <Window x:Class="WizardWindow"
    
  4. Em o arquivo code-behind para o arquivo de WizardWindow.xaml, substitua o código atual com o código a seguir.

    Public Class WizardWindow
        Private standardMenuGroups As List(Of String)
        Private listEditGroups As List(Of String)
        Private standardMenuGroupIdBinding As Binding
        Private listEditGroupIdBinding As Binding
        Private standardMenuGroupIdBindingView As ListCollectionView
        Private listEditGroupIdBindingView As ListCollectionView
    
        Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            standardMenuGroups = New List(Of String) From {
                StandardMenuGroupIds.Actions,
                StandardMenuGroupIds.ActionsSurvey,
                StandardMenuGroupIds.NewMenu,
                StandardMenuGroupIds.Settings,
                StandardMenuGroupIds.SettingsSurvey,
                StandardMenuGroupIds.SiteActions,
                StandardMenuGroupIds.Upload,
                StandardMenuGroupIds.ViewSelector}
            listEditGroups = New List(Of String) From {
                ListEditGroupIds.Communications,
                ListEditGroupIds.GeneralSettings,
                ListEditGroupIds.Permissions}
    
            standardMenuGroupIdBinding = New Binding()
            standardMenuGroupIdBinding.Source = standardMenuGroups
            listEditGroupIdBinding = New Binding()
            listEditGroupIdBinding.Source = listEditGroups
    
            standardMenuGroupIdBindingView = CType(CollectionViewSource.GetDefaultView(standardMenuGroups), ListCollectionView)
            listEditGroupIdBindingView = CType(CollectionViewSource.GetDefaultView(listEditGroups), ListCollectionView)
    
            standardMenuRadioButton.IsChecked = True
        End Sub
    
        Private Sub standardMenuRadioButton_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
            BindingOperations.ClearBinding(idComboBox, ComboBox.ItemsSourceProperty)
            idComboBox.SetBinding(ComboBox.ItemsSourceProperty, standardMenuGroupIdBinding)
            standardMenuGroupIdBindingView.MoveCurrentToFirst()
        End Sub
    
        Private Sub listEditRadioButton_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
            BindingOperations.ClearBinding(idComboBox, ComboBox.ItemsSourceProperty)
            idComboBox.SetBinding(ComboBox.ItemsSourceProperty, listEditGroupIdBinding)
            listEditGroupIdBindingView.MoveCurrentToFirst()
        End Sub
    
        Private Sub finishButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Me.DialogResult = True
            Me.Close()
        End Sub
    End Class
    
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using Microsoft.VisualStudio.PlatformUI;
    
    namespace ItemTemplateWizard
    {
        public partial class WizardWindow : DialogWindow
        {
            private List<string> standardMenuGroups;
            private List<string> listEditGroups;
            private Binding standardMenuGroupIdBinding;
            private Binding listEditGroupIdBinding;
            private ListCollectionView standardMenuGroupIdBindingView;
            private ListCollectionView listEditGroupIdBindingView;
    
            public WizardWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                standardMenuGroups = new List<string>() { 
                    StandardMenuGroupIds.Actions,
                    StandardMenuGroupIds.ActionsSurvey,
                    StandardMenuGroupIds.NewMenu, 
                    StandardMenuGroupIds.Settings, 
                    StandardMenuGroupIds.SettingsSurvey,
                    StandardMenuGroupIds.SiteActions, 
                    StandardMenuGroupIds.Upload, 
                    StandardMenuGroupIds.ViewSelector };
                listEditGroups = new List<string>() { 
                    ListEditGroupIds.Communications, 
                    ListEditGroupIds.GeneralSettings,
                    ListEditGroupIds.Permissions };
    
                standardMenuGroupIdBinding = new Binding();
                standardMenuGroupIdBinding.Source = standardMenuGroups;
                listEditGroupIdBinding = new Binding();
                listEditGroupIdBinding.Source = listEditGroups;
    
                standardMenuGroupIdBindingView = (ListCollectionView)CollectionViewSource.GetDefaultView(standardMenuGroups);
                listEditGroupIdBindingView = (ListCollectionView)CollectionViewSource.GetDefaultView(listEditGroups);
    
                standardMenuRadioButton.IsChecked = true;
            }
    
            private void standardMenuRadioButton_Checked(object sender, RoutedEventArgs e)
            {
                BindingOperations.ClearBinding(idComboBox, ComboBox.ItemsSourceProperty);
                idComboBox.SetBinding(ComboBox.ItemsSourceProperty, standardMenuGroupIdBinding);
                standardMenuGroupIdBindingView.MoveCurrentToFirst();
            }
    
            private void listEditRadioButton_Checked(object sender, RoutedEventArgs e)
            {
                BindingOperations.ClearBinding(idComboBox, ComboBox.ItemsSourceProperty);
                idComboBox.SetBinding(ComboBox.ItemsSourceProperty, listEditGroupIdBinding);
                listEditGroupIdBindingView.MoveCurrentToFirst();
            }
    
            private void finishButton_Click(object sender, RoutedEventArgs e)
            {
                this.DialogResult = true;
                this.Close();
            }
        }
    }
    

implementando o assistente

Define a funcionalidade do assistente implementando a interface de IWizard .

para implementar o assistente

  • Em o projeto de ItemTemplateWizard , abra o arquivo de código de CustomActionWizard , e substitua o código atual em este arquivo com o código a seguir:

    Imports EnvDTE
    Imports Microsoft.VisualStudio.TemplateWizard
    Imports System
    Imports System.Collections.Generic
    
    Public Class CustomActionWizard
        Implements IWizard
    
        Private wizardPage As WizardWindow
    
    #Region "IWizard Methods"
    
        Public Sub RunStarted(ByVal automationObject As Object, ByVal replacementsDictionary As Dictionary(Of String, String), _
            ByVal runKind As WizardRunKind, ByVal customParams() As Object) Implements IWizard.RunStarted
            wizardPage = New WizardWindow()
            Dim dialogCompleted? As Boolean = wizardPage.ShowModal()
    
            If (dialogCompleted = True) Then
                PopulateReplacementDictionary(replacementsDictionary)
            Else
                Throw New WizardCancelledException()
            End If
        End Sub
    
        ' Always return true; this IWizard implementation throws a WizardCancelledException
        ' that is handled by Visual Studio if the user cancels the wizard.
        Public Function ShouldAddProjectItem(ByVal filePath As String) As Boolean _
            Implements IWizard.ShouldAddProjectItem
            Return True
        End Function
    
        ' The following IWizard methods are not implemented in this example.
        Public Sub BeforeOpeningFile(ByVal projectItem As ProjectItem) _
            Implements IWizard.BeforeOpeningFile
        End Sub
    
        Public Sub ProjectFinishedGenerating(ByVal project As Project) _
            Implements IWizard.ProjectFinishedGenerating
        End Sub
    
        Public Sub ProjectItemFinishedGenerating(ByVal projectItem As ProjectItem) _
            Implements IWizard.ProjectItemFinishedGenerating
        End Sub
    
        Public Sub RunFinished() Implements IWizard.RunFinished
        End Sub
    
    #End Region
    
        Private Sub PopulateReplacementDictionary(ByVal replacementsDictionary As Dictionary(Of String, String))
    
            ' Fill in the replacement values from the UI selections on the wizard page. These values are automatically inserted
            ' into the Elements.xml file for the custom action.
            Dim locationValue As String = If(wizardPage.standardMenuRadioButton.IsChecked,
                    CustomActionLocations.StandardMenu, CustomActionLocations.ListEdit)
            replacementsDictionary.Add("$LocationValue$", locationValue)
            replacementsDictionary.Add("$GroupIdValue$", CType(wizardPage.idComboBox.SelectedItem, String))
            replacementsDictionary.Add("$IdValue$", Guid.NewGuid().ToString())
    
            Dim titleText As String = DefaultTextBoxStrings.TitleText
            If False = String.IsNullOrEmpty(wizardPage.titleTextBox.Text) Then
                titleText = wizardPage.titleTextBox.Text
            End If
    
            Dim descriptionText As String = DefaultTextBoxStrings.DescriptionText
            If False = String.IsNullOrEmpty(wizardPage.descriptionTextBox.Text) Then
                descriptionText = wizardPage.descriptionTextBox.Text
            End If
    
            Dim urlText As String = DefaultTextBoxStrings.UrlText
            If False = String.IsNullOrEmpty(wizardPage.urlTextBox.Text) Then
                urlText = wizardPage.urlTextBox.Text
            End If
    
            replacementsDictionary.Add("$TitleValue$", titleText)
            replacementsDictionary.Add("$DescriptionValue$", descriptionText)
            replacementsDictionary.Add("$UrlValue$", urlText)
        End Sub
    End Class
    
    using EnvDTE;
    using Microsoft.VisualStudio.TemplateWizard;
    using System;
    using System.Collections.Generic;
    
    namespace ItemTemplateWizard
    {
        public class CustomActionWizard : IWizard
        {
            private WizardWindow wizardPage;
    
            public CustomActionWizard()
            {
            }
    
            #region IWizard Methods
    
            public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, 
                WizardRunKind runKind, object[] customParams)
            {
                wizardPage = new WizardWindow();
                Nullable<bool> dialogCompleted = wizardPage.ShowModal();
    
                if (dialogCompleted == true)
                {
                    PopulateReplacementDictionary(replacementsDictionary);
                }
                else
                {
                    throw new WizardCancelledException();
                }
            }
    
            // Always return true; this IWizard implementation throws a WizardCancelledException
            // that is handled by Visual Studio if the user cancels the wizard.
            public bool ShouldAddProjectItem(string filePath)
            {
                return true;
            }
    
            // The following IWizard methods are not implemented in this example.
            public void BeforeOpeningFile(ProjectItem projectItem)
            {
            }
    
            public void ProjectFinishedGenerating(Project project)
            {
            }
    
            public void ProjectItemFinishedGenerating(ProjectItem projectItem)
            {
            }
    
            public void RunFinished()
            {
            }
    
            #endregion
    
            private void PopulateReplacementDictionary(Dictionary<string, string> replacementsDictionary)
            {
                // Fill in the replacement values from the UI selections on the wizard page. These values are automatically inserted
                // into the Elements.xml file for the custom action.
                string locationValue = (bool)wizardPage.standardMenuRadioButton.IsChecked ?
                    CustomActionLocations.StandardMenu : CustomActionLocations.ListEdit;
                replacementsDictionary.Add("$LocationValue$", locationValue);
                replacementsDictionary.Add("$GroupIdValue$", (string)wizardPage.idComboBox.SelectedItem);
                replacementsDictionary.Add("$IdValue$", Guid.NewGuid().ToString());
    
                string titleText = DefaultTextBoxStrings.TitleText;
                if (!String.IsNullOrEmpty(wizardPage.titleTextBox.Text))
                {
                    titleText = wizardPage.titleTextBox.Text;
                }
    
                string descriptionText = DefaultTextBoxStrings.DescriptionText;
                if (!String.IsNullOrEmpty(wizardPage.descriptionTextBox.Text))
                {
                    descriptionText = wizardPage.descriptionTextBox.Text;
                }
    
                string urlText = DefaultTextBoxStrings.UrlText;
                if (!String.IsNullOrEmpty(wizardPage.urlTextBox.Text))
                {
                    urlText = wizardPage.urlTextBox.Text;
                }
    
                replacementsDictionary.Add("$TitleValue$", titleText);
                replacementsDictionary.Add("$DescriptionValue$", descriptionText);
                replacementsDictionary.Add("$UrlValue$", urlText);
            }
        }
    }
    

Ponto de Verificação

Em esse ponto do passo-a-passo, todo o código para o assistente agora está no projeto.Compile o projeto para certificar-se de que compila sem erros.

Para criar seu projeto

  • Em a barra de menu, escolha Compilar, Compilar solução.

Associando o assistente com o modelo de item

Agora que você implementou o assistente, você deve associá-lo com o modelo de item de Ação Personalizada completando três principais etapas:

  1. Assine o assembly do assistente com um nome forte.

  2. Obter o símbolo de chave pública para o assembly do assistente.

  3. Adicione uma referência ao assembly do assistente no arquivo .vstemplate para o modelo de item de Ação Personalizada .

Para assinar o assembly do assistente com um nome forte

  1. Em Gerenciador de Soluções, abra o menu de atalho do nó de projeto de ItemTemplateWizard , e então escolha Propriedades.

  2. Em a guia de Assinando , selecione a caixa de seleção de Assinar o assembly .

  3. Em a lista de Escolha um arquivo de chave de nome forte , escolha <New...>.

  4. Em a caixa de diálogo de Criar Chave de Nome Forte , digite um nome, desmarque a caixa de seleção de Proteger o arquivo de chaves com senha , e então escolha o botão de OK .

  5. Em a barra de menu, escolha Compilar, Compilar solução.

Para obter o símbolo de chave pública para o assembly do assistente

  1. Em uma janela de prompt de comando do Visual Studio, execute o seguinte comando, substituindo PathToWizardAssembly com o caminho completo do assembly criado de ItemTemplateWizard.dll para o projeto de ItemTemplateWizard no seu computador de desenvolvimento.

    sn.exe -T PathToWizardAssembly
    

    O símbolo de chave pública para o assembly de ItemTemplateWizard.dll é escrito na janela do prompt de comando do Visual Studio.

  2. Manter a janela do prompt de comando do Visual Studio aberta.Você precisará o símbolo de chave pública de concluir o procedimento a seguir.

Para adicionar uma referência para o assembly do assistente no arquivo .vstemplate

  1. Em Gerenciador de Soluções, expanda o nó de projeto de ItemTemplate , e abra o arquivo de ItemTemplate.vstemplate.

  2. Por ao final do arquivo, adicione o seguinte elemento de WizardExtension entre </TemplateContent> e as marcas de </VSTemplate> .Substitua o valor de YourToken de atributo de PublicKeyToken com o símbolo de chave pública que você tiver obtido no procedimento anterior.

    <WizardExtension>
      <Assembly>ItemTemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=YourToken</Assembly>
      <FullClassName>ItemTemplateWizard.CustomActionWizard</FullClassName>
    </WizardExtension>
    

    Para obter mais informações sobre o elemento de WizardExtension , consulte Elemento de WizardExtension (modelos Visual Studio).

  3. Salve e feche o arquivo.

Adicionando parâmetros substituível ao Elements.xml arquivo no modelo de item

Adicionar vários parâmetros substituível para o arquivo de Elements.xml no projeto de ItemTemplate.Esses parâmetros são inicializados no método de PopulateReplacementDictionary na classe de CustomActionWizard que você definiu anteriormente.Quando um usuário adiciona um item de projeto personalizado de ação a um projeto, o Visual Studio substitui automaticamente esses parâmetros no arquivo de Elements.xml no novo item de projeto com os valores que especificadas no assistente.

Um parâmetro substituível é um símbolo que inicie e termina com o caractere de cifrão ($).Além da definição de seus próprios parâmetros substituível, você pode usar parâmetros internos que o sistema do projeto do SharePoint define e inicializa.Para obter mais informações, consulte Parâmetros substituíveis.

Para adicionar os arquivos para o Elements.xml parâmetros substituível

  1. Em o projeto de ItemTemplate, substitua o conteúdo do arquivo de Elements.xml com o seguinte XML.

    <?xml version="1.0" encoding="utf-8" ?>
    <Elements Id="$guid8$" xmlns="https://schemas.microsoft.com/sharepoint/">
      <CustomAction Id="$IdValue$"
                    GroupId="$GroupIdValue$"
                    Location="$LocationValue$"
                    Sequence="1000"
                    Title="$TitleValue$"
                    Description="$DescriptionValue$" >
        <UrlAction Url="$UrlValue$"/>
      </CustomAction>
    </Elements>
    

    Novo XML modifica os valores de Id, de GroupId, de Location, de Description, e atributos de Url aos parâmetros substituíveis.

  2. Salve e feche o arquivo.

Adicionando o assistente o pacote de VSIX

Em o arquivo de source.extension.vsixmanifest no projeto de VSIX, adicione uma referência ao projeto do assistente de modo que implante com o pacote de VSIX que contém o item de projeto.

Para adicionar o assistente o pacote de VSIX

  1. Em Gerenciador de Soluções, abra o menu de atalho do arquivo de source.extension.vsixmanifest no projeto de CustomActionProjectItem, e então escolha Abrir para abrir o arquivo no editor manifesto.

  2. Em o editor manifesto, escolha a guia de Ativos , então escolha o botão de Novo .

    a caixa de diálogo de adicionar o novo recurso aparece.

  3. Em a lista de Tipo , escolha Microsoft.VisualStudio.Assembly.

  4. Em a lista de Origem , escolha Um projeto na solução atual.

  5. Em a lista de Projeto , escolha, e escolha ItemTemplateWizardno botão de OK .

  6. Em a barra de menu, escolha Compilar, Compilar solução, e então certifique-se de que a solução compila sem erros.

testando o assistente

Você agora está pronto para testar o assistente.Primeiro, início para depurar a solução de CustomActionProjectItem na instância de avaliação do Visual Studio.Testar o assistente para o item de projeto personalizado de ação em um projeto do SharePoint na instância de avaliação do Visual Studio.Finalmente, compilação e executar o projeto do SharePoint verifique que a ação personalizada funcione como esperado.

Para iniciar a depuração da solução

  1. Reinicie o Visual Studio com credenciais administrativas, e abra a solução de CustomActionProjectItem.

  2. Em o projeto de ItemTemplateWizard, abra o arquivo de código de CustomActionWizard, e adicione um ponto de interrupção na primeira linha de código no método de RunStarted .

  3. Em a barra de menu, escolha Depurar, Exceções.

  4. Em a caixa de diálogo de Exceções , certifique-se de que as caixas de seleção de Lançado e de Sem tratamento do usuário para Exceções do common language runtime são desmarcadas, e escolher-se no botão de OK .

  5. Iniciar a depuração escolhendo a tecla F5, ou, na barra de menus, escolhendo Depurar, Iniciar Depuração.

    O Visual Studio instala a extensão em %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Custom Action Project Item\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 o assistente no Visual Studio

  1. Em a instância de avaliação do Visual Studio, na barra de menu, escolha Arquivo, Novo, Projeto.

  2. Expanda o nó de Visual C# ou de Visual Basic (dependendo do idioma que seu modelo de item suporta), expanda o nó de SharePoint , e então escolha o nó de 2010 .

  3. Em a lista de modelos de projeto, escolha Projeto do SharePoint 2010, nomeie o projeto CustomActionWizardTest, e então escolha o botão de OK .

  4. Em Assistente de personalização do SharePoint, digite o URL do site que você deseja usar para depuração, e então escolha o botão de Concluir .

  5. Em Gerenciador de Soluções, abra o menu de atalho para o nó de projeto Adicionar, escolha, e escolha Novo Item.

  6. Em a caixa de diálogo de adicionar o novo item - CustomItemWizardTest , expanda o nó de SharePoint em seguida, expanda o nó de 2010 .

  7. Em a lista de itens de projeto, escolha o item de Ação Personalizada , e então escolha o botão de Adicionar .

  8. Verifique se o código em outra instância do Visual Studio pára no ponto de interrupção que anteriormente definido no método de RunStarted .

  9. Continuar a depuração o projeto escolhendo a tecla F5 ou, na barra de menus, escolhendo Depurar, Continuar.

    O assistente de personalização do SharePoint aparece.

  10. Em Local, escolha o botão de opção de Edição de lista .

  11. Em a lista de Id do Grupo , escolha Comunicações.

  12. Em a caixa de Título , entre em Centro de desenvolvedores do SharePoint.

  13. Em a caixa de Descrição , entre em Abrir o site central do desenvolvedor do SharePoint.

  14. Em a caixa de URL , entre em https://msdn.microsoft.com/sharepoint/default.aspx, e então escolha o botão de Concluir .

    o estúdio isual adiciona um item que é chamado CustomAction1 ao seu projeto e abre o arquivo de Elements.xml no editor.Verifique se Elements.xml contém os valores que você especificou no assistente.

Para testar a ação personalizada no SharePoint

  1. Em a instância de avaliação do Visual Studio, escolha a tecla F5 ou, na barra de menu, escolha Depurar, Iniciar Depuração.

    A ação personalizada é empacotada e implantado para o site do SharePoint especificada pela propriedade de URL do Site do projeto, e navegador da web abre a página padrão de esse site.

    ObservaçãoObservação

    Se a caixa de diálogo aparece Depuração de Script Desabilitada , escolha o botão de Sim .

  2. Em a área de listas de site web do SharePoint, escolha o link de Tarefas .

    A página de tarefas – todas as tarefas aparece.

  3. Em a guia de Ferramentas de Lista de fita, escolha a guia de Lista e, em seguida, no grupo de Configurações , escolha Configurações da lista.

    A página de Configurações da lista aparece.

  4. Em Comunicações que dirige próximo à parte superior da página, escolha o link de Centro de Desenvolvedores do SharePoint , verifique que o navegador abre o site https://msdn.microsoft.com/sharepoint/default.aspx, e fechar o navegador.

Limpando o computador de desenvolvimento

Depois que você concluir testar o item de projeto, remova o modelo de item de projeto de instância de avaliação do Visual Studio.

Para limpar o computador de desenvolvimento

  1. 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.

  2. Em a lista de extensões, escolha a extensão de Item de projeto personalizado de ação , e então escolha o botão de Desinstalar .

  3. Em a caixa de diálogo que aparece, escolha o botão de Sim para confirmar que você deseja desinstalar a extensão, e então escolha o botão de Reiniciar Agora para concluir a desinstalação.

  4. 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 CustomActionProjectItem estiver aberta.)

Consulte também

Tarefas

Passo a passo: Criando um Item de projeto de ação personalizada com um modelo de Item, parte 1

Como: usar assistentes com modelos de projeto

Referência

Referência do esquema de modelo do Visual Studio

IWizard

Conceitos

Definindo tipos de Item de projeto do SharePoint personalizados

Criando modelos de Item e projeto para itens de projeto do SharePoint

Outros recursos

Usar como locais padrão e personalizados IDs de ação