Sdílet prostřednictvím


Podrobné pokyny: Vytvoření položky projektu vlastní akce položku šablony, část 2

Po definování vlastní typ projektu položky služby SharePoint a přidružit šablonu položky v aplikaci Visual Studio, můžete také zadat šablony průvodce. Pomocí Průvodce shromažďovat informace od uživatelů při používání šablony do projektu přidat novou instanci položky projektu. Informace, které shromažďujete, mohou sloužit k inicializaci položky projektu.

V tomto návodu přidáte průvodce do vlastní položky projektu akce, která je znázorněna v Podrobné pokyny: Vytvoření položky projektu vlastní akce položku šablony, část 1. Při přidání vlastní akce projektu položky projektu, SharePoint, Průvodce shromažďuje informace o vlastní akci (například její umístění a vyhledejte po klepnutí na adresu URL) a přidá tyto informace do souboru Elements.xml v nové položce projektu.

Tento návod demonstruje následující úkoly:

  • Vytvoření průvodce pro vlastní typ položky projektu SharePoint, spojené s šablonu položky.

  • Definování vlastní Průvodce UI podobná vestavěných průvodců pro projekt SharePoint položek v Visual Studio 2010.

  • Inicializace SharePoint souborů projektu pomocí Průvodce shromážděná data pomocí nahraditelné parametry.

  • Ladění a testování průvodce.

Poznámka

Stáhnout vzorek, který obsahuje dokončených projektů, kód a jiné soubory tohoto postupu z následujícího umístění: https://go.microsoft.com/fwlink/?LinkId=191369.

Požadavky

Chcete-li provést tento návod, musíte nejprve vytvořit řešení CustomActionProjectItem vyplněním Podrobné pokyny: Vytvoření položky projektu vlastní akce položku šablony, část 1.

Ve vývojovém počítači potřebujete také následující součásti pro dokončení tohoto návodu:

Znalost následujících konceptů je užitečná, ale není požadována k dokončení návodu:

Vytváření projektového Průvodce

Chcete-li dokončit tento návod, potřebujete přidat nový projekt do CustomActionProjectItem řešení, které jste vytvořili v Podrobné pokyny: Vytvoření položky projektu vlastní akce položku šablony, část 1. Implementujete rozhraní IWizard a definujete uživatelské rozhraní průvodce v tomto projektu.

Chcete-li vytvořit projekt průvodce

  1. Otevřete CustomActionProjectItem řešení v Visual Studio.

  2. V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel řešení, klikněte na Přidat a pak na Nový projekt.

    Poznámka

    V projektech v jazyce Visual Basic se uzel řešení zobrazí v Průzkumníku řešení pouze pokud je označeno zaškrtávací políčko Vždy zobrazit řešení Obecné, projekty a řešení, dialogové okno Možnosti.

  3. V dialogovém okně Nový projekt rozbalte uzel Visual C# nebo Visual Basic a potom klikněte na uzel Windows.

  4. V poli se seznamem v horní části dialogového okna Nový Projekt zkontrolujte, zda je vybráno .NET Framework 4.

  5. Zvolte šablonu projektu Uživatelská řídicí knihovna WPF.

  6. Do pole Název zadejte ItemTemplateWizard.

  7. Klepněte na tlačítko OK.

    Visual Studio přidá ItemTemplateWizard projekt do řešení.

  8. Odstraňte položku UserControl1 z projektu.

Konfigurace projektu průvodce

Před vytvořením průvodce musíte přidat okno WPF, kódový soubor a odkazy na sestavení do projektu.

Chcete-li nakonfigurovat projekt průvodce

  1. V Aplikaci Solution Explorer, klepněte pravým tlačítkem myši ItemTemplateWizard projektu uzlu a potom klepněte na Vlastnosti.

  2. V Projektu Návrhář, změnit cílový rámec z.NET Framework 4 profilu klienta.NET Framework 4. V projektu Visual C#, můžete provést na aplikace karta; pro projekty jazyka Visual Basic lze provést na kompilace kartu. Další informace naleznete v tématu Postupy: Zaměření na specifickou verzi rozhraní .NET Framework nebo profil.

    Poznámka

    Ve výchozím nastavení se při vytvoření nového projektu tohoto cíle.NET Framework 4 cíle projektu profilu klienta. Tento postup vyžaduje úplné.NET Framework 4.

  3. V projektu ItemTemplateWizard přidejte novou položku Okno (WPF) do projektu. Názvěte novou položku WizardWindow.

  4. Přidejte dva kódové soubory s následujícími názvy:

    • CustomActionWizard

    • Řetězce

  5. V nabídce Projekt klepněte na příkaz Přidat odkaz.

  6. Na záložce .NET stiskněte klávesu CTRL klikněte na tlačítko následujících sestavení a potom klikněte na tlačítko OK:

    • EnvDTE

    • Microsoft.VisualStudio.Shell.10.0

    • Microsoft.VisualStudio.TemplateWizardInterface

  7. V Aplikaci Solution Explorer, odkazy klepněte na složku projektu ItemTemplateWizard EnvDTE.

    Poznámka

    V projekty jazyka Visual Basic odkazy složka se zobrazí, pouze pokud vždy zobrazit řešení políčko v Obecné, projekty a řešení, dialogové okno Možnosti.

  8. V Vlastnosti okna změnit Vložit Interop typy vlastnost False.

Definování výchozího umístění a řetězců ID pro vlastní akce

Každá vlastní akce obsahuje umístění a ID, které jsou zadány v atributech GroupID a Location prvku CustomAction v souboru Elements.xml. V tomto kroku definujete některé platné řetězce těchto atributů v projektu ItemTemplateWizard. Po dokončení tohoto návodu jsou tyto řetězce zapsány do souboru Elements.xml v položce projektu vlastní akce, když uživatelé zvolí umístění a ID v průvodci.

Pro zjednodušení tento příklad podporuje pouze podmnožinu dostupných výchozích umístění a ID. Úplný seznam naleznete na výchozí umístění vlastní akce a ID.

Chcete-li definovat výchozí umístění a řetězce ID

  1. V projektu ItemTemplateWizard otevřete soubor řetězců kódu.

  2. Nahraďte kód ve tomto souboru následujícím kódem,

    ' 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";
        }
    }
    

Vytvoření uživatelského rozhraní průvodce

Přidejte XAML pro definování uživatelského rozhraní průvodce a přidání některého kódu pro svázání některých ovládacích prvků v průvodci s řetězci ID. Průvodce, který vytvoříte připomíná vestavěný Průvodce pro SharePoint projektů v Visual Studio 2010.

Chcete-li vytvořit uživatelské rozhraní průvodce

  1. V projektu ItemTemplateWizard poklepejte na soubor WizardWindow.xaml v Návrháři otevřete okno.

  2. V zobrazení XAML návrháře nahraďte aktuální XAML následujícím XAML. XAML definuje rozhraní, které obsahuje nadpis, řídí určující chování vlastní akce a navigačních tlačítek v dolní části okna.

    Poznámka

    Projekt bude mít některé chyby kompilace po přidat tento XAML. Těmto chybám předejdete přidáním kódu v dalších krocích.

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

    Poznámka

    Okno vytvořený v tomto XAML je odvozen z DialogWindow základní třída Pokud přidáte vlastní dialogové okno WPF Visual Studio, doporučujeme odvozena od třídy mají konzistentní stylu s dialogových oknech Visual Studio a vyhnout se může jinak vyskytnout problémy modální dialogové okno dialogové okno. Další informace naleznete v tématu How to: Create and Manage Dialog Boxes.

  3. Pokud vyvíjíte projekt Visual Basic, odeberte obor názvů ItemTemplateWizard z názvu třídy WizardWindow v atributu x:Class prvku Window. Toto je na prvním řádku XAML. Po dokončení by měl první řádek vypadat takto.

    <Window x:Class="WizardWindow"
    
  4. Otevřete soubor kódu pro soubor WizardWindow.xaml.

  5. Nahraďte kód v tomto souboru následujícím kódem.

    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();
            }
        }
    }
    

Implementace průvodce

Definujte funkci průvodce implementací rozhraní IWizard.

Chcete-li implementovat průvodce

  1. V projektu ItemTemplateWizard otevřete soubor kódu CustomActionWizard.

  2. Nahraďte kód ve tomto souboru následujícím kódem.

    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);
            }
        }
    }
    

Checkpoint

V tomto okamžiku v návodu, kód Průvodce je nyní v projektu. Sestavte projekt, abyste se ujistili, že se zkompiluje bez chyb.

Chcete-li sestavit projekt

  • V nabídce Sestavit zvolte Sestavit řešení.

Přidružování průvodce šablonu položky

Nyní, když máte implementovaného průvodce, musíte přidružit průvodce s šablonou položky Vlastní akce. Existují tři hlavní kroky, které musíte udělat, chcete-li to provést:

  1. Podepište sestavení průvodce silným názvem.

  2. Získejte token veřejného klíče pro sestavení průvodce.

  3. Přidejte odkaz na sestavení průvodce v souboru .vstemplate položky šablony Vlastní akce.

Chcete-li podepsat sestavení průvodce silným názvem

  1. V Průzkumníku řešení, klikněte pravým tlačítkem na uzel projektu ItemTemplateWizard a klikněte na Vlastnosti.

  2. Klikněte na tlačítko záložky Podepisování.

  3. Označte zaškrtávací políčko Podepsání sestavení.

  4. V rozevíracím menu Zvolit soubor obsahující klíč se silným názvem zvolte Nový.

  5. V Vytvořit klíč silného názvu dialogovém okně pole, zadejte název a vymazat chránit klíč souboru s heslem políčko.

  6. Klikněte na tlačítko OK.

  7. V nabídce Sestavit zvolte Sestavit řešení.

Chcete-li získat token veřejného klíče pro sestavení průvodce

  1. Otevřete okno Příkazového řádku programu Visual Studio.

  2. Spusťte následující příkaz. Nahradit cestu k sestavení Průvodce s úplnou cestu k integrovanému ItemTemplateWizard.dll sestavení projektu ItemTemplateWizard ve vývojovém počítači.

    sn.exe -T path to wizard assembly
    

    Token veřejného klíče pro sestavení ItemTemplateWizard.dll je zapsán do okna příkazového řádku Visual Studio.

  3. Ponechejte otevřené okno příkazového řádku Visual Studio. Token veřejného klíče je nutný při další proceduře.

Chcete-li přidat odkaz na sestavení průvodce v souboru .vstemplate

  1. V Průzkumníku řešení rozbalte uzel projektu ItemTemplate a otevřete soubor ItemTemplate.vstemplate.

  2. Poblíž konec souboru přidejte následující WizardExtension prvek mezi </TemplateContent> a </VSTemplate> značky. Nahradit tokenu hodnotu PublicKeyToken atributem token veřejného klíče v předchozím postupu.

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

    Další informace o WizardExtension prvek, viz element WizardExtension (Visual Studio šablony).

  3. Soubor uložte a zavřete.

Přidání nahraditelných parametrů do souboru Elements.xml v šabloně položky

Přidejte několik nahraditelných parametrů do souboru Elements.xml v projektu ItemTemplate. Tyto parametry jsou inicializovány v metodě PopulateReplacementDictionary v třídě CustomActionWizard, kterou jste definovali dříve. Když uživatel přidá vlastní položku projektu akce do projektu, Visual Studio automaticky nahradí tyto parametry v souboru Elements.xml v nové položce projektu s hodnotami, které jsou určeny v průvodci.

Nahraditelný parametr je token, který začíná a končí znakem dolaru ($). K definování vlastních nahraditelných parametrů můžete použít předdefinované parametry, které jsou definovány a inicializovány systémem projektů služby SharePoint. Další informace naleznete v tématu Replaceable Parameters.

Chcete-li přidat nahraditelné parametry do souboru Elements.xml

  1. Otevřete soubor Elements.xml v projektu ItemTemplate.

  2. Nahraďte obsah tohoto souboru následujícím kódem 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>
    

    Nové XML změní hodnoty Id, GroupId, Location, Description a Url atributů nahraditelných parametrů.

  3. Soubor uložte a zavřete.

Přidání průvodce balíčku VSIX

Pro nasazení průvodce s balíčkem VSIX obsahujícím položku projektu přidejte odkaz na projekt průvodce do souboru source.extension.vsixmanifest v projektu VSIX.

Chcete-li přidat průvodce do balíčku VSIX

  1. V Průzkumníku řešení poklikejte na soubor source.extension.vsixmanifest v projektu CustomActionProjectItem.

    Visual Studio otevře soubor v editoru manifestu.

  2. V oddílu Obsah editoru klikněte na tlačítko Přidání obsahu.

  3. V dialogovém okně Přidat obsah v seznamu Volba typu obsahu zvolte Průvodce šablonou.

  4. Pod Vybrat zdroj, klepněte projektu rádiové tlačítko a vyberte ItemTemplateWizard v seznamu vedle něj.

  5. Klepněte na tlačítko OK.

  6. V nabídce Build (Sestavit) klepněte na příkaz Build Solution (Sestavit řešení). Přesvědčte se, zda je řešení zkompilován bez chyb.

Průvodce testováním

Nyní jste připraveni k testování průvodce. Nejprve spusťte ladění řešení CustomActionProjectItem v experimentální instanci aplikace Visual Studio. Potom testujte průvodce pro vlastní položku projektu akce v projektu SharePoint v experimentální instanci sady Visual Studio. Nakonec sestavte a spusťte projekt SharePoint, chcete-li ověřit, že vlastní akce funguje podle očekávání.

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

  1. Restartujte aplikaci Visual Studio s oprávněními správce a otevřete řešení CustomActionProjectItem.

  2. V projektu ItemTemplateWizard otevřete soubor kódu CustomActionWizard a přidejte zarážku do prvního řádku kódu v metodě RunStarted.

  3. V nabídce Ladění klikněte na příkaz Výjimky.

  4. V dialogovém okně Výjimky se ujistěte, že zaškrtávací políčka Vyvolaná a Uživatelem neošetřená pro Výjimky modulu CLR jsou vymazána.

  5. Klepněte na tlačítko OK.

  6. Stiskněte F5 pro spuštění ladění.

    Visual Studio nainstaluje rozšíření do %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Custom Action Project Item\1.0 a spustí experimentální instanci Visual Studio. Položku projektu budete testovat v této instanci aplikace Visual Studio.

Chcete-li otestovat průvodce v aplikaci Visual Studio

  1. V experimentální instanci Visual Studio v nabídce Soubor vyberte Nový a potom klikněte na Projekt.

  2. Rozbalte Visual C# nebo Visual Basic (v závislosti na jazyku vaší šablony položky), rozbalte SharePoint a potom klikněte na tlačítko 2010.

  3. V seznamu šablon projektu klikněte na položku Prázdný projekt.

  4. Do pole Název zadejte CustomActionWizardTest.

  5. Klepněte na tlačítko OK.

  6. V Průvodce nastavením služby SharePoint zadejte adresu URL webu, který chcete použít k ladění a klikněte na tlačítko Dokonce.

  7. V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel projektu, přejděte na Přidat, a pak klikněte na Nová položka.

  8. V dialogovém okně Přidat novou položku klikněte na uzel 2010 v rámci uzlu SharePoint.

  9. V seznamu položek projektu klikněte na položku Vlastní akce a potom klikněte na tlačítko Přidat.

  10. Ověřte, že se kód ve druhé instanci aplikace Visual Studio zastaví na zarážce, kterou jste nastavili výše v metodě RunStarted. Stisknutím F5 pokračujte v ladění projektu.

  11. V průvodci proveďte tyto volby:

    • Pod místo, klepněte na tlačítko Upravit seznam.

    • Pro ID skupiny, klepněte na tlačítko komunikace.

    • Pro hlavy, typ sharepoint Developer Center.

    • Pro Popis, typ otevře web SharePoint Developer Center.

    • Pro URL, typ https://msdn.microsoft.com/sharepoint/default.aspx.

  12. Klepněte na tlačítko Dokončit.

    Visual Studio přidá novou položku s názvem CustomAction1 do projektu a otevře soubor Elements.xml v editoru. Ověřte, zda Elements.xml obsahuje hodnoty, které jste zadali v průvodci.

Chcete-li testovat vlastní akce v SharePoint

  1. V experimentální instanci aplikace Visual Studio stiskněte F5. Vlastní akce je zabalena a nasazena na web služby SharePoint určený vlastností Adresa URL projektu. Webový prohlížeč otevře výchozí stránku tohoto webu.

    Poznámka

    Pokud se zobrazí dialogové okno Ladění skriptů zakázáno, klikněte na tlačítko Ano pro pokračování v ladění projektu.

  2. Na panelu Snadné spuštění klikněte na Úkoly.

  3. Na pásu záložek klikněte na záložku Seznam.

  4. Ve skupině Nastavení klikněte na možnost Nastavení seznamu.

  5. V záhlaví Komunikace v horní části stránky ověřte, zda se zobrazí odkaz s textem SharePoint Developer Center.

  6. Klikněte na odkaz SharePoint Developer Center. Ověřte, že prohlížeč otevře stránku https://msdn.microsoft.com/sharepoint/default.aspx.

  7. Zavřete webový prohlížeč.

Čištění vývojového počítače

Po dokončení testování projektu položky odeberte položku Šablona projektu z experimentálních instance aplikace Visual Studio.

Chcete-li vyčistit vývojový počítač

  1. V experimentální instanci Visual Studio v nabídce Nástroje klikněte na tlačítko Správce rozšíření.

    Otevře se okno Správce rozšíření.

  2. V seznamu rozšíření klikněte na Vlastní položka projektu akce a potom klikněte na Odinstalovat.

  3. V dialogovém okně, které se objeví, klikněte na tlačítko Ano pro potvrzení, že chcete odinstalovat rozšíření.

  4. Klikněte na Restartovat nyní pro dokonční odinstalace.

  5. Zavřete obě instance programu Visual Studio (experimentální instanci aplikace Visual Studio a instanci obsahující otevřené řešení CustomActionProjectItem).

Viz také

Úkoly

Podrobné pokyny: Vytvoření položky projektu vlastní akce položku šablony, část 1

Postupy: Použití Průvodců se šablonami projektů

Odkaz

Visual Studio šablona schéma Odkaz…

IWizard

Další zdroje

Definování vlastní typy položek projektu SharePoint

Vytváření položek projektu SharePoint položku šablony a šablony aplikace Project

Výchozí umístění vlastní akce a ID