Sdílet prostřednictvím


Návod: Vytvoření vlastní položky projektu akce pomocí šablony položky, část 2

Po definování vlastního typu položky projektu služby SharePoint a přidružit šablonu položky v aplikaci Visual Studio, můžete také poskytnout průvodce pro šablonu.Průvodce můžete shromažďovat informace od uživatelů při používání šablony do projektu přidat nové instance 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 Návod: Vytvoření vlastní položky projektu akce pomocí šablony položky, část 1.Při přidání položky projektu vlastní akci do projektu SharePoint průvodce shromažďuje informace o vlastní akci (například její umístění a adresu URL pro koncový uživatel zvolí jej) a přidá tyto informace do souboru Elements.xml v nové položky projektu.

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

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

  • Definování vlastního průvodce uživatelské rozhraní, které nahrazuje vestavěné průvodce pro položky projektu SharePoint v aplikaci Visual Studio.

  • Použití nahraditelných parametrů inicializace soubory projektu SharePoint s daty, která shromažďujete v průvodci.

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

[!POZNÁMKA]

Stáhnout vzorek, který obsahuje dokončené projekty, kód a další soubory v tomto návodu z následujícího umístění: souborů projektu pro návody rozšíření nástroje SharePoint.

Požadavky

Chcete-li provést tento návod, musíte nejprve vytvořit řešení CustomActionProjectItem vyplněním Návod: Vytvoření vlastní položky projektu akce pomocí šablony položky, čá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, musíte přidat projekt do CustomActionProjectItem řešení, které jste vytvořili v Návod: Vytvoření vlastní položky projektu akce pomocí šablony položky, čá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 aplikaci Visual Studio

  2. V Průzkumníku, otevřete místní nabídku pro uzel řešení, zvolte Přidata pak zvolte 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 Nový projekt dialogové okno pole, rozbalte položku Visual C# nebo jazyka Visual Basic uzly a pak zvolte Windows uzlu.

  4. V horní části Nový projekt dialogové okno pole, ujistěte se, že .NET Framework 4.5 je vybrán v seznamu verze rozhraní.NET Framework.

  5. Zvolte Uživatelská řídicí knihovna WPF šablonu projektu, název projektu ItemTemplateWizarda pak zvolte OK tlačítko.

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

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

Konfigurace projektu průvodce

Před vytvořením průvodce, musíte přidat okno Windows Presentation Foundation (WPF), soubor kódu a odkazy projekt sestavení.

Chcete-li nakonfigurovat projekt průvodce

  1. V Průzkumníku, otevřete místní nabídku z ItemTemplateWizard uzel projektu a pak zvolte Vlastnosti.

  2. V Návrháře projektu, zkontrolujte, zda je nastavena cílové rozhraní .NET Framework 4.5.

    Pro projekty jazyka Visual C#, můžete tuto hodnotu nastavit na aplikace kartu.Pro projekty jazyka Visual Basic lze tuto hodnotu nastavit na kompilace kartu.Další informace naleznete v tématu Postupy: Cílení na verzi rozhraní .NET Framework.

  3. V ItemTemplateWizard projektu, přidejte Okno (WPF) položky projektu a potom zadejte název položky WizardWindow.

  4. Přidáte dva soubory kódu, které jsou pojmenovány CustomActionWizard a řetězce.

  5. Otevření místní nabídky ItemTemplateWizard projektu a pak zvolte Přidat odkaz.

  6. V Reference Manager - ItemTemplateWizard dialogovém okně vyberte v seznamu sestavení uzel, zvolte rozšíření uzlu.

  7. Zaškrtněte políčka u následujících sestavení a pak zvolte OK tlačítka:

    • EnvDTE

    • Microsoft.VisualStudio.Shell.11.0

    • Microsoft.VisualStudio.TemplateWizardInterface

  8. V Průzkumníkuv odkazy zvolit složku pro ItemTemplateWizard projekt EnvDTE odkaz.

    [!POZNÁMKA]

    V projektech Visual Basic odkazy složky se zobrazí pouze tehdy, když vždy zobrazit řešení políčko v Obecné – Projekty a řešení – dialogové okno Možnosti.

  9. V Vlastnosti okna, změňte hodnotu Embed Interop Types 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é zadat 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. Otevřít.

  2. V ItemTemplateWizard projektu, kód v souboru kódu řetězce nahraďte následující kód.

    ' 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 podobá vestavěné průvodce pro projekty SharePoint v aplikaci Visual Studio.

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

  1. V ItemTemplateWizard projektu, otevřete místní nabídku pro WizardWindow.xaml souboru a pak zvolte otevřete okno v návrháři.

  2. V zobrazení jazyka XAML nahraďte aktuální XAML následujícím XAML.Definuje XAML uživatelského rozhraní, která obsahuje nadpis, ovládací prvky pro určení chování vlastní akce a navigačních tlačítek v dolní části okna.

    [!POZNÁMKA]

    Po přidání tohoto kódu, bude mít projekt několik chyb kompilace.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.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>
    

    [!POZNÁMKA]

    Okna, který je vytvořen v tomto jazyce XAML je odvozen z DialogWindow základní třídy.Při přidání vlastní dialogové okno WPF aplikace Visual Studio, doporučujeme odvodit dialogovému oknu z této třídy mají jednotný styl s další dialogová okna v aplikaci Visual Studio a vyhnout se může jinak problémy s modálních dialogových oken.Další informace naleznete v tématu Jak: vytvoření a správa dialogová okna.

  3. Pokud vyvíjíte projekt Visual Basic, odeberte ItemTemplateWizard oboru názvů WizardWindow název třídy v x:Class atribut Window element.Tento prvek je v prvním řádku XAML.Po dokončení první řádek by měl vypadat následující kód:

    <Window x:Class="WizardWindow"
    
  4. V souboru kódu pro soubor WizardWindow.xaml aktuální kód nahraďte následující kód.

    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

  • V ItemTemplateWizard projekt otevřít CustomActionWizard kód souboru a potom nahradit aktuální kód v 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 návodu je kód průvodce v projektu.Sestavte projekt, abyste se ujistili, že se zkompiluje bez chyb.

Chcete-li sestavit projekt

  • Na panelu nabídek zvolte sestavení, Sestavit řešení.

Přidružení průvodce s šablonou položky

Nyní, když máte implementovaného průvodce, musíte přidružit jej k Vlastní akce šablonu položky podle tří hlavních kroků:

  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, otevřete místní nabídku z ItemTemplateWizard uzel projektu a pak zvolte Vlastnosti.

  2. Na podepisování kartě vyberte podepsání sestavení políčko.

  3. V Zvolit soubor obsahující klíč se silným názvem seznam, zvolte < nový... >.

  4. V Vytvořit klíč silného názvu dialogové okno zadejte název, zrušte zaškrtnutí políčka chránit klíč souboru s heslem políčko a pak zvolte OK tlačítko.

  5. Na panelu nabídek zvolte sestavení, Sestavit řešení.

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

  1. V okně Příkazový řádek Visual Studio, spusťte následující příkaz nahradí PathToWizardAssembly s úplnou cestou k built ItemTemplateWizard.dll pro ItemTemplateWizard projekt na vývojovém počítači.

    sn.exe -T PathToWizardAssembly
    

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

  2. Ponechejte otevřené okno příkazového řádku Visual Studio.Token veřejného klíče další postup budete potřebovat.

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

  1. V Průzkumníku, rozbalte ItemTemplate uzel projektu a poté otevřete soubor ItemTemplate.vstemplate.

  2. Poblíž konec souboru přidejte následující WizardExtension mezi </TemplateContent> a </VSTemplate> značky.Nahradit YourToken hodnotu PublicKeyToken atribut s tokenem veřejného klíče, který jste získali v předchozí proceduře.

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

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

  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 ($).Definování vlastních nahraditelných parametrů, můžete použít předdefinované parametry, které definuje systém projektu služby SharePoint a inicializuje.Další informace naleznete v tématu Nahraditelné parametry.

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

  1. Nahraďte obsah souboru Elements.xml v projektu ItemTemplate následujícím 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ů.

  2. Soubor uložte a zavřete.

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

V souboru source.extension.vsixmanifest v projektu VSIX přidejte odkaz na projekt průvodce tak, aby je nasazena s VSIX balíček, který obsahuje položku projektu.

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

  1. V Průzkumníku, otevřete místní nabídku z source.extension.vsixmanifest souboru v projektu CustomActionProjectItem a pak zvolte otevřete k otevření souboru v editoru manifestu.

  2. Zvolte v editoru manifestu majetku kartu a potom klepněte Nový tlačítko.

    Přidat nový majetek zobrazí se dialogové okno.

  3. V typu seznam, zvolte Microsoft.VisualStudio.Assembly.

  4. V zdroje seznam, zvolte projektu v aktuálním řešení.

  5. V projektu seznam, zvolte ItemTemplateWizarda pak zvolte OK tlačítko.

  6. Na panelu nabídek zvolte sestavení, Sestavit řešenía ujistěte se, že řešení zkompiluje 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 Visual Studio.Otestujte Průvodce vlastní položky projektu akce v projektu SharePoint v experimentální instanci 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 pověřeními pro správu 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 RunStarted metoda.

  3. Na panelu nabídek zvolte ladění, výjimky.

  4. V výjimky dialogové okno pole, ujistěte se, že vyvolaných a uživatelem neošetřená políčka pro Výjimky modulu CLR jsou vymazány a pak zvolte OK tlačítko.

  5. Spuštění ladění pomocí klávesy F5 nebo panel nabídek, výběr ladění, Spuštění ladění.

    Visual Studio nainstaluje rozšíření do %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Custom akce projektu Item\1. 0 a spustí experimentální instanci aplikace 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 řádku nabídek zvolte soubor, Nový, projektu.

  2. Rozbalte Visual C# nebo jazyka Visual Basic rozbalte uzel (v závislosti na jazyk, který podporuje šablony položky), SharePoint uzel a pak zvolte 2010 uzlu.

  3. V seznamu šablon projektu zvolte Projektu služby SharePoint 2010, název projektu CustomActionWizardTesta pak zvolte OK tlačítko.

  4. V SharePoint Průvodce vlastním nastavením, zadejte adresu URL webu, který chcete použít pro ladění a pak zvolte Dokončit tlačítko.

  5. V Průzkumníku, otevřete místní nabídku pro uzel projektu, zvolte Přidata pak zvolte Nová položka.

  6. V Přidat novou položku - CustomItemWizardTest dialogové okno pole, rozbalte položku SharePoint uzlu a potom rozbalte 2010 uzlu.

  7. V seznamu položek projektu, zvolte Vlastní akce položky a pak zvolte Přidat tlačítko.

  8. Ověřte, že se kód ve druhé instanci aplikace Visual Studio zastaví na zarážce, kterou jste nastavili výše v metodě RunStarted.

  9. Pokračování v ladění projektu výběrem klávesu F5 nebo nabídek, výběr ladění, pokračovat.

    Zobrazí se Průvodce nastavením služby SharePoint.

  10. Podle místo, zvolte Upravit seznam přepínač.

  11. V ID skupiny seznam, zvolte komunikace.

  12. V název zadejte SharePoint Developer Center.

  13. V Popis zadejte otevře web SharePoint Developer Center.

  14. V URL zadejte https://msdn.microsoft.com/sharepoint/default.aspxa pak zvolte Dokončit tlačítko.

    Visual Studio přidá položku s názvem CustomAction1 do projektu a otevře soubor Elements.xml v 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 Visual Studio, zvolte klávesu F5 nebo řádku nabídek zvolte ladění, Spuštění ladění.

    Vlastní akce je zabaleny a nasazeny na web služby SharePoint určený Adresa URL webu vlastnosti projektu a webový prohlížeč otevře výchozí stránku tohoto webu.

    [!POZNÁMKA]

    Pokud Ladění skriptů zakázáno dialogovém okně zvolte Ano tlačítko.

  2. V oblasti seznamů na webu služby SharePoint, zvolte úlohy odkaz.

    Úkoly – všechny se zobrazí stránka.

  3. Na Nástroje seznamu kartu na pásu karet, zvolte seznam kartě a poté v Nastavení skupinu, zvolte Nastavení seznamu.

    Nastavení seznamu se zobrazí stránka.

  4. Pod komunikace záhlaví v horní části stránky, zvolte SharePoint Developer Center propojit, ověřte, že prohlížeč otevře web https://msdn.microsoft.com/sharepoint/default.aspx a pak zavřete prohlížeč.

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

Po dokončení testování položky projektu odeberte šablonu položky projektu v experimentální instanci Visual Studio.

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

  1. V experimentální instanci Visual Studio v řádku nabídek zvolte Nástroje, aktualizace a rozšíření.

    Aktualizace a rozšíření dialogové okno.

  2. Zvolte v seznamu rozšíření Vlastní položku projektu akce rozšíření a pak zvolte Odinstalace tlačítko.

  3. V dialogovém okně, které se objeví, zvolte Ano potvrďte, že chcete odinstalovat rozšíření a pak zvolte tlačítko Restartovat nyní tlačítko dokončete odinstalaci.

  4. Zavřete obě instance programu Visual Studio (experimentální instanci a instanci aplikace Visual Studio, ve kterém je otevřené řešení CustomActionProjectItem).

Viz také

Úkoly

Návod: Vytvoření vlastní položky projektu akce pomocí šablony položky, část 1

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

Referenční dokumentace

Odkaz na schéma šablon sady Visual Studio

IWizard

Koncepty

Definování vlastních typů položek projektu služby SharePoint

Vytváření šablon položek a projektů pro položky projektu služby SharePoint

Další zdroje

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