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:
Podporované edice systému Microsoft Windows SharePoint a Visual Studio. Další informace naleznete v tématu Requirements for Developing SharePoint Solutions.
The Visual Studio 2010 SDK. Tento návod používá šablonu Projekt VSIX v sadě SDK pro vytvoření balíčku VSIX k nasazení položky projektu. Další informace naleznete v tématu Rozšíření nástroje SharePoint v aplikaci Visual Studio.
Znalost následujících konceptů je užitečná, ale není požadována k dokončení návodu:
Průvodci pro šablony projektu a položky v aplikaci Visual Studio. Další informace získáte v rozhraních Postupy: Použití Průvodců se šablonami projektů a IWizard.
Vlastní akce ve službě SharePoint. Další informace naleznete v Vlastní akci.
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
Otevřete CustomActionProjectItem řešení v Visual Studio.
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.
V dialogovém okně Nový projekt rozbalte uzel Visual C# nebo Visual Basic a potom klikněte na uzel Windows.
V poli se seznamem v horní části dialogového okna Nový Projekt zkontrolujte, zda je vybráno .NET Framework 4.
Zvolte šablonu projektu Uživatelská řídicí knihovna WPF.
Do pole Název zadejte ItemTemplateWizard.
Klepněte na tlačítko OK.
Visual Studio přidá ItemTemplateWizard projekt do řešení.
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
V Aplikaci Solution Explorer, klepněte pravým tlačítkem myši ItemTemplateWizard projektu uzlu a potom klepněte na Vlastnosti.
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.
V projektu ItemTemplateWizard přidejte novou položku Okno (WPF) do projektu. Názvěte novou položku WizardWindow.
Přidejte dva kódové soubory s následujícími názvy:
CustomActionWizard
Řetězce
V nabídce Projekt klepněte na příkaz Přidat odkaz.
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
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.
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
V projektu ItemTemplateWizard otevřete soubor řetězců kódu.
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
V projektu ItemTemplateWizard poklepejte na soubor WizardWindow.xaml v Návrháři otevřete okno.
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.
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"
Otevřete soubor kódu pro soubor WizardWindow.xaml.
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
V projektu ItemTemplateWizard otevřete soubor kódu CustomActionWizard.
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:
Podepište sestavení průvodce silným názvem.
Získejte token veřejného klíče pro sestavení průvodce.
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
V Průzkumníku řešení, klikněte pravým tlačítkem na uzel projektu ItemTemplateWizard a klikněte na Vlastnosti.
Klikněte na tlačítko záložky Podepisování.
Označte zaškrtávací políčko Podepsání sestavení.
V rozevíracím menu Zvolit soubor obsahující klíč se silným názvem zvolte Nový.
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.
Klikněte na tlačítko OK.
V nabídce Sestavit zvolte Sestavit řešení.
Chcete-li získat token veřejného klíče pro sestavení průvodce
Otevřete okno Příkazového řádku programu Visual Studio.
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.
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
V Průzkumníku řešení rozbalte uzel projektu ItemTemplate a otevřete soubor ItemTemplate.vstemplate.
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).
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
Otevřete soubor Elements.xml v projektu ItemTemplate.
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ů.
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
V Průzkumníku řešení poklikejte na soubor source.extension.vsixmanifest v projektu CustomActionProjectItem.
Visual Studio otevře soubor v editoru manifestu.
V oddílu Obsah editoru klikněte na tlačítko Přidání obsahu.
V dialogovém okně Přidat obsah v seznamu Volba typu obsahu zvolte Průvodce šablonou.
Pod Vybrat zdroj, klepněte projektu rádiové tlačítko a vyberte ItemTemplateWizard v seznamu vedle něj.
Klepněte na tlačítko OK.
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í
Restartujte aplikaci Visual Studio s oprávněními správce a otevřete řešení CustomActionProjectItem.
V projektu ItemTemplateWizard otevřete soubor kódu CustomActionWizard a přidejte zarážku do prvního řádku kódu v metodě RunStarted.
V nabídce Ladění klikněte na příkaz Výjimky.
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.
Klepněte na tlačítko OK.
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
V experimentální instanci Visual Studio v nabídce Soubor vyberte Nový a potom klikněte na Projekt.
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.
V seznamu šablon projektu klikněte na položku Prázdný projekt.
Do pole Název zadejte CustomActionWizardTest.
Klepněte na tlačítko OK.
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.
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.
V dialogovém okně Přidat novou položku klikněte na uzel 2010 v rámci uzlu SharePoint.
V seznamu položek projektu klikněte na položku Vlastní akce a potom klikněte na tlačítko Přidat.
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.
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.
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
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.
Na panelu Snadné spuštění klikněte na Úkoly.
Na pásu záložek klikněte na záložku Seznam.
Ve skupině Nastavení klikněte na možnost Nastavení seznamu.
V záhlaví Komunikace v horní části stránky ověřte, zda se zobrazí odkaz s textem SharePoint Developer Center.
Klikněte na odkaz SharePoint Developer Center. Ověřte, že prohlížeč otevře stránku https://msdn.microsoft.com/sharepoint/default.aspx.
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č
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í.
V seznamu rozšíření klikněte na Vlastní položka projektu akce a potom klikněte na Odinstalovat.
V dialogovém okně, které se objeví, klikněte na tlačítko Ano pro potvrzení, že chcete odinstalovat rozšíření.
Klikněte na Restartovat nyní pro dokonční odinstalace.
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…
Další zdroje
Definování vlastní typy položek projektu SharePoint
Vytváření položek projektu SharePoint položku šablony a šablony aplikace Project