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

Depois de definir um tipo personalizado de item de projeto do SharePoint e associá-la a um modelo de item de Visual Studio, também convém fornecer um Assistente para o modelo. Você pode usar o Assistente para coletar informações dos usuários quando eles usarem o seu modelo para adicionar uma nova instância do item de projeto para um projeto. As informações que você colete podem ser usadas para inicializar o item de projeto.

Esta explicação passo a passo, você adicionará um Assistente para o item de projeto de ação personalizada é demonstrado em Demonstra Passo a passo: A criação de um Item de projeto de ação personalizada com um modelo de Item, parte 1. Quando um usuário adiciona um item de projeto de ação personalizada para um projeto do SharePoint, o assistente coleta informações sobre a ação personalizada (como, por exemplo, sua localização e a URL para navegar até quando é clicado) e adiciona essas informações ao arquivo elements no novo item de projeto.

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

  • Criando um Assistente para um tipo de item de projeto SharePoint personalizado que está associado um modelo de item.

  • Definir um assistente personalizado da interface do usuário é semelhante os assistentes internos para o projeto do SharePoint itens em Visual Studio 2010.

  • Usando parâmetros substituíveis para inicializar os arquivos de projeto do SharePoint com os dados coletados no assistente.

  • O Assistente de teste e depuração.

ObservaçãoObservação

Você pode baixar um exemplo que contém os projetos concluídos, código e outros arquivos para esta explicação passo a passo do seguinte local: https://go.microsoft.com/fwlink/?LinkId=191369.

Pré-requisitos

Para realizar este passo a passo, você deve primeiro criar a solução de CustomActionProjectItem completando Demonstra Passo a passo: A criação de um Item de projeto de ação personalizada com um modelo de Item, parte 1.

Você também precisa os seguintes componentes no computador de desenvolvimento para concluir este passo a passo:

Conhecimento dos seguintes conceitos é útil, mas não necessário para concluir o passo a passo:

Criando o projeto do Assistente

Para concluir este passo a passo, você precisa adicionar um novo projeto para a solução de CustomActionProjectItem que você criou na Demonstra Passo a passo: A criação de um Item de projeto de ação personalizada com um modelo de Item, parte 1. Você implementará o IWizard interface e definir o Assistente de interface do usuário neste projeto.

Para criar o projeto do Assistente

  1. Abra a solução de CustomActionProjectItem em Visual Studio.

  2. Em Solution Explorer, o botão direito do mouse no nó da solução, clique em Adde em seguida, clique em Novo projeto.

    ObservaçãoObservação

    Em projetos de Visual Basic, o nó de solução aparece na Solution Explorer somente quando o Always show solution caixa de seleção estiver marcada na Geral, projetos e soluções, caixa de diálogo Options.

  3. No Novo projeto caixa de diálogo caixa, expanda o Visual C# ou Visual Basic nós e em seguida, clique o Windows nó.

  4. Na caixa de combinação na parte superior do Novo projeto caixa de diálogo caixa, certifique-se de que .NET Framework 4 está selecionada.

  5. Selecione o Biblioteca de controle de usuário do WPF o modelo de projeto.

  6. No nome , digite ItemTemplateWizard.

  7. Clique em OK.

    Visual StudioAdiciona o ItemTemplateWizard o projeto à solução.

  8. Exclua o item UserControl1 do projeto.

Configurando o projeto de Assistente

Antes de criar o assistente, você precisa adicionar uma janela do WPF, o arquivo de código e referências de assembly ao projeto.

Para configurar o projeto de Assistente

  1. Em Solution Explorer, com o botão direito do ItemTemplateWizard nó de projeto e, em seguida, clique em Propriedades.

  2. No Project Designer, alterar a estrutura de destino a partir do.NET Framework 4 o perfil do cliente para o.NET Framework 4. Em projetos do Visual C#, você pode fazer isso no aplicativo guia; para projetos de Visual Basic, você pode fazer isso no compilar guia. Para obter mais informações, consulte Como: Destino de um específico.NET Framework versão ou perfil.

    ObservaçãoObservação

    Por padrão, quando você cria um novo projeto voltado para o.NET Framework 4, o projeto destina-se o perfil do cliente. Este passo a passo requer a versão completa.NET Framework 4.

  3. No projeto ItemTemplateWizard, adicione um novo Janela (WPF) item ao projeto. Nomeie o novo item WizardWindow.

  4. Adicione dois arquivos de código com os seguintes nomes:

    • CustomActionWizard

    • Sequências

  5. No menu Project, escolha Add Reference.

  6. Sobre o .NET guia, pressione CTRL e clique os assemblies a seguir e clique em OK:

    • EnvDTE

    • Microsoft.VisualStudio.Shell.10.0

    • Microsoft.VisualStudio.TemplateWizardInterface

  7. Em Solution Explorer, na referências a pasta para o projeto ItemTemplateWizard, clique em EnvDTE.

    ObservaçãoObservação

    Em projetos de Visual Basic, o referências pasta aparece somente quando o Always show solution caixa de seleção estiver marcada na Geral, projetos e soluções, caixa de diálogo Options.

  8. No Propriedades janela, alterar o Incorporar tipos de interoperabilidade propriedade para False.

Definindo o local padrão e seqüências de caracteres de identificação para ações personalizadas

Cada ação personalizada tem um local e a ID especificada na GroupID e Location atributos a CustomAction elemento no arquivo elements. Nesta etapa, você define algumas das seqüências de caracteres válidas para esses atributos no projeto ItemTemplateWizard. Quando você concluir este passo a passo, essas cadeias de caracteres são gravadas no arquivo elements no item de projeto de ação personalizada quando os usuários selecionam um local e o ID do assistente.

Para simplificar, este exemplo suporta apenas um subconjunto dos locais padrão disponível e IDs. Para obter uma lista completa, consulte IDs e locais de ação personalizado padrão.

Para definir o local padrão e seqüências de caracteres de identificação

  1. No projeto ItemTemplateWizard, abra o arquivo de código de seqüências de caracteres.

  2. Substitua o código neste arquivo 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 a interface do Assistente

Adicionar o XAML para definir a interface do usuário do assistente e adicionar algum código para vincular alguns dos controles no Assistente para as seqüências de caracteres de identificação. O assistente que você criar é semelhante o assistente interno para projetos do SharePoint no Visual Studio 2010.

Para criar a interface do Assistente

  1. No projeto ItemTemplateWizard, clique duas vezes no arquivo WizardWindow.xaml para abrir a janela no designer.

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

    ObservaçãoObservação

    Após adicionar esse XAML para ele, o projeto terá alguns erros de compilação. Esses erros desaparecem 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.10.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 nesse XAML é derivada de DialogWindow classe de base. Quando você adiciona uma caixa de diálogo do WPF personalizada para Visual Studio, é recomendável derivar de sua caixa de diálogo a partir dessa classe tenham um estilo consistente com as outras caixas de diálogo de Visual Studio e para evitar problemas de caixa de diálogo modal que possam ocorrer. Para obter mais informações, consulte How to: Create and Manage Dialog Boxes.

  3. Se você estiver desenvolvendo um projeto de Visual Basic, remova o ItemTemplateWizard namespace da WizardWindow nome de classe a x:Class atributo da Window elemento. Essa é a primeira linha do XAML. Quando tiver terminado, a primeira linha deve ter aparência a seguir.

    <Window x:Class="WizardWindow"
    
  4. Abra o arquivo code-behind para o arquivo WizardWindow.xaml.

  5. Substitua o código neste arquivo 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();
            }
        }
    }
    

O Assistente de implementação

Definir a funcionalidade do assistente, Implementando o IWizard interface.

Para implementar o assistente.

  1. No projeto ItemTemplateWizard, abra o arquivo de código de CustomActionWizard.

  2. Substitua o código neste 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

Neste momento o passo a passo, todo o código para o assistente está agora no projeto. Construa o projeto para certificar-se de que ele foi compilado sem erros.

Para construir seu projeto.

  • Sobre o Build menu, selecione Build Solution.

Associando o Assistente de modelo de Item

Agora que você implementou o assistente, você deve associar o assistente com o Ação personalizada modelo de item. Existem três etapas principais que devem ser concluídas para fazer isso:

  1. Assine o Assistente de assembly com um nome forte.

  2. Obtenha a chave pública token para o assembly do assistente.

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

Para assinar o Assistente de assembly com um nome forte

  1. Em Solution Explorer, com o botão direito do ItemTemplateWizard no nó do projeto e clique em Propriedades.

  2. Clique na guia Signing.

  3. Marque a caixa de seleção Sign the assembly.

  4. Na lista suspensa Choose a strong name key file, selecione &lt;New...&gt;.

  5. No Create Strong Name Key caixa de diálogo caixa, digite um nome e limpar o Protect my key file com uma senha caixa de seleção.

  6. Clique em OK.

  7. Sobre o Build menu, selecione Build Solution.

Para obter a chave pública token para o assembly do Assistente

  1. Abra uma janela de Prompt de comando Visual Studio.

  2. Execute o seguinte comando. Substitua o caminho para o Assistente de assembly com o caminho completo para o assembly de ItemTemplateWizard.dll criado para o projeto de ItemTemplateWizard no computador de desenvolvimento.

    sn.exe -T path to wizard assembly
    

    O token de chave público para o assembly de ItemTemplateWizard.dll é gravado para a janela do Prompt de comando Visual Studio.

  3. Mantenha aberta a janela do Prompt de comando Visual Studio. Será necessário o token de chave público durante o próximo procedimento.

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

  1. Em Solution Explorer, expanda o ItemTemplate nó de projeto e abrir o arquivo ItemTemplate.vstemplate.

  2. Próximo ao final do arquivo, adicione o seguinte WizardExtension elemento entre o </TemplateContent> e </VSTemplate> marcas. Substituir o seu token valor o PublicKeyToken atributo com o token de chave público que você obteve no procedimento anterior.

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

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

  3. Salve e feche o arquivo.

Adicionando parâmetros substituíveis ao arquivo elements no modelo de Item

Adicione vários parâmetros substituíveis ao arquivo elements no projeto ItemTemplate. Esses parâmetros são inicializados na PopulateReplacementDictionary método na CustomActionWizard classe definido anteriormente. Quando um usuário adiciona um item de projeto de ação personalizada para um projeto, o Visual Studio substitui automaticamente esses parâmetros no arquivo elements no novo item de projeto com os valores que elas são especificadas no assistente.

Um parâmetro de substituição é um token que começa e termina com o caractere de cifrão ($). Além de definir seus próprios parâmetros substituíveis, você pode usar parâmetros internos que são definidos e inicializados pelo sistema do projeto do SharePoint. Para obter mais informações, consulte Parâmetros substituíveis.

Para adicionar parâmetros substituíveis para arquivo elements.

  1. Abra o arquivo elements XML no projeto ItemTemplate.

  2. Substitua o conteúdo desse arquivo 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 altera os valores de Id, GroupId, Location, Description, e Url atributos a parâmetros substituíveis.

  3. Salve e feche o arquivo.

Adicionando o Assistente para o pacote VSIX

Para implantar o assistente com o pacote VSIX que contém o item de projeto, adicione uma referência ao projeto do Assistente para o arquivo source.extension.vsixmanifest no projeto VSIX.

Para adicionar o Assistente do pacote VSIX

  1. Em Solution Explorer, clique duas vezes o source.extension.vsixmanifest arquivo no projeto CustomActionProjectItem.

    Visual Studio abre o arquivo no editor de manifesto.

  2. No conteúdo seção do editor, clique na Adicionar conteúdo botão.

  3. No Adicionar conteúdo na caixa de Selecione um tipo de conteúdo caixa de listagem, selecione Assistente de modelo.

  4. Em Selecionar uma fonte de, clique o projeto botão de opção e, em seguida, selecione ItemTemplateWizard em que a caixa de listagem.

  5. Clique em OK.

  6. Sobre o Build menu, clique em Build Solution. Certifique-se de que a solução é compilado sem erros.

O Assistente de teste.

Agora você está pronto para testar o assistente. Primeiro, inicie a solução de CustomActionProjectItem na instância experimental do Visual Studio de depuração. Em seguida, teste o Assistente para o item de projeto de ação personalizada em um projeto do SharePoint na instância experimental do Visual Studio. Finalmente, construir e executar o projeto do SharePoint para verificar se a ação personalizada funciona como esperado.

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

  1. Reinicie o Visual Studio com privilégios de administrador e abra a solução de CustomActionProjectItem.

  2. No projeto ItemTemplateWizard, abra o arquivo de código de CustomActionWizard e adicionar um ponto de interrupção para a primeira linha do código de RunStarted método.

  3. No menu Debug, clique em Exceptions.

  4. No exceções caixa de diálogo, certifique-se de que o Thrown e User-unhandled caixas de seleção para Common Language runtime Exceptions estão desmarcadas.

  5. Clique em OK.

  6. Pressione F5 para iniciar a depuração.

    Visual Studio instala a extensão %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Custom Item\1.0 de projeto de ação e inicia uma instância experimental do Visual Studio. Você testará o item de projeto nesta instância do Visual Studio.

Para testar o assistente em Visual Studio

  1. Na instância experimental do Visual Studio, sobre o arquivo , aponte para novae, em seguida, clique em projeto.

  2. Expanda Visual C# ou Visual Basic (dependendo do idioma que oferece suporte a seu modelo de item), expanda SharePointe em seguida, clique em 2010.

  3. Na lista de modelos de projeto, clique em Projeto vazio.

  4. No nome , digite CustomActionWizardTest.

  5. Clique em OK.

  6. No O Assistente para personalização do SharePoint, digite a URL do site que você deseja usar para depuração e clique em Concluir.

  7. Em Solution Explorer, o botão direito do mouse no nó do projeto, aponte para Adde em seguida, clique em Novo Item.

  8. No Add New Item caixa de diálogo, clique no 2010 nó sob o SharePoint nó.

  9. Na lista de itens de projeto, clique em Ação personalizada e, em seguida, clique em Add.

  10. Verificar que o código na instância de Visual Studio pára no ponto de interrupção que você definiu anteriormente na RunStarted método. Pressione F5 para continuar a depurar o projeto.

  11. No assistente, faça as seguintes seleções:

    • Em local, clique em Lista Editar.

    • Para Identificação do grupo, clique em comunicações.

    • Para título, tipo sharepoint Developer Center.

    • Para Descrição, tipo abre o site do SharePoint Developer Center.

    • Para URL, tipo https://msdn.microsoft.com/sharepoint/default.aspx.

  12. Clique em Finish.

    Visual Studio adiciona um novo item chamado CustomAction1 ao seu projeto, e ele abre o arquivo elements XML no editor. Verifique se que elements contém os valores que você especificou no assistente.

Para testar a ação personalizada no SharePoint

  1. Na instância experimental do Visual Studio, pressione F5. A ação personalizada é empacotada e implantada no site do SharePoint especificado pelo URL do Site a propriedade do projeto. O navegador da Web abre para a página padrão deste site.

    ObservaçãoObservação

    Se o Desativado de depuração de Script caixa de diálogo é exibida, clique em Sim para continuar a depurar o projeto.

  2. Na área Inicialização rápida, clique em tarefas.

  3. Na faixa de opções, clique no lista guia.

  4. No configurações de grupo, clique em As configurações da lista.

  5. Sob o comunicações de título na parte superior da página, verifique se um link com o texto sharepoint Developer Center aparece.

  6. Clique o sharepoint Developer Center link. Verifique se que o navegador abre o https://msdn.microsoft.com/sharepoint/default.aspx do site da Web.

  7. Feche o navegador da Web.

Limpando o computador de desenvolvimento

Após concluir o teste de item de projeto, remova o modelo de item de projeto da instância experimental do Visual Studio.

Para limpar o computador de desenvolvimento

  1. Na instância experimental do Visual Studio, sobre o Ferramentas menu, clique em Extension Manager.

    O Extension Manager abre a caixa de diálogo.

  2. Na lista de extensões, clique em Item de projeto de ação personalizadae em seguida, clique em desinstalar.

  3. Na caixa de diálogo que aparece, clique em Sim para confirmar que você deseja desinstalar a extensão.

  4. Clique em Reiniciar agora para concluir a desinstalação.

  5. Feche as duas instâncias de Visual Studio (a instância experimental e a instância do Visual Studio que abriu a solução de CustomActionProjectItem).

Consulte também

Tarefas

Demonstra Passo a passo: A criação de 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 de esquema de modelo do Studio Visual

IWizard

Outros recursos

Definindo tipos de Item de projeto do SharePoint personalizados

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

Locais de ação personalizada e IDs padrão