İzlenecek yol: Bölüm 2 bir öğe şablonu ile bir özel eylem proje öğesi oluşturma
Sonra özel bir SharePoint proje öğesi tanımlamak ve bir öğe şablonu Visual Studio ile ilişkilendirmek için Şablon Sihirbazı sağlamak isteyebilirsiniz.Şablonunuzun bir projeye yeni bir proje öğesi örneği eklemek için kullandıklarında kullanıcılardan bilgi toplamak için sihirbazı kullanabilirsiniz.Topladığınız bilgileri proje öğesi başlatmak için kullanılır.
Bu izlenecek yolda, bir sihirbaz içinde gösterilen özel eylem proje öğesine ekleyeceksiniz İzlenecek yol: Bölüm 1 bir öğe şablonu ile bir özel eylem proje öğesi oluşturma.Bir kullanıcı SharePoint proje için bir özel eylem proje madde eklediğinde, sihirbaz özel eylem (örneğin, konumuna ve son kullanıcı seçtiğinde gitmek üzere url) hakkında bilgi toplar ve bu bilgileri Elements.xml dosyasına yeni bir proje öğesi olarak ekler.
Bu izlenecek yolda aşağıdaki görevler gösterilir:
Madde şablonu ile ilişkili özel SharePoint proje öğesi türü için bir sihirbaz oluşturma.
Özel bir sihirbaz benzer yerleşik sihirbazlar için SharePoint proje öğelerini Visual Studio kullanıcı Arabirimi tanımlama.
Sihirbazda topladığınız veri ile SharePoint proje dosyalarını başlatmak için değiştirilebilir parametreleri kullanma.
Hata ayıklama ve sınama Sihirbazı.
[!NOT]
Tamamlanmış projeler, kod ve diğer dosyaları aşağıdaki konumdan Bu anlatım içeren bir örnek indirebilirsiniz: SharePoint Araçları genişletilebilirlik izlenecek yollar için proje dosyaları.
Önkoşullar
Bu izlenecek yolda gerçekleştirmek için önce CustomActionProjectItem çözüm izleyerek oluşturmalısınız İzlenecek yol: Bölüm 1 bir öğe şablonu ile bir özel eylem proje öğesi oluşturma.
Ayrıca, geliştirme bilgisayarında Bu izlenecek yolu tamamlamak için aşağıdaki bileşenler gerekir:
Windows, SharePoint ve Visual Studio sürümleri desteklenir.Daha fazla bilgi için bkz. SharePoint çözümleri geliştirmek için gereksinimler.
Visual Studio sdk.Bu yönergelerde VSIX projesi SDK proje öğesi dağıtmak için VSIX paketi oluşturmak için şablon.Daha fazla bilgi için bkz. Visual Studio SharePoint araçları genişletme.
Yararlı, ancak gerekli değildir, izlenecek yolu tamamlamak için aşağıdaki kavramları hakkında bilgi:
Visual Studio proje ve öğe şablonları için sihirbazlar sağlar.Daha fazla bilgi için bkz: Nasıl yapılır: Proje Şablonları ile sihirbazları kullanma ve IWizard arabirim.
Özel Eylemler SharePoint içinde.Daha fazla bilgi için bkz: Özel eylem.
Sihirbaz projesi oluşturma
Bu izlenecek yolu tamamlamak için bir proje oluşturduğunuz CustomActionProjectItem çözüm eklemeniz gerekir İzlenecek yol: Bölüm 1 bir öğe şablonu ile bir özel eylem proje öğesi oluşturma.Uygulayacaksınız IWizard arayüzü ve kullanıcı Arabirimi Sihirbazı bu projede tanımlayabilirsiniz.
Sihirbaz projesi oluşturmak için
Visual Studio CustomActionProjectItem çözümü açın.
İçinde Çözüm Gezgini, çözüm düğümüne kısayol menüsünü açın, seçim Ekleve sonra seçin Yeni bir proje.
[!NOT]
Visual Basic projesinde, çözüm düğümüne görünür Çözüm Gezgini sadece her zaman çözümü Göster onay kutusu seçildiğinde, General, Projects and Solutions, Options Dialog Box.
İçinde Yeni Proje iletişim kutusunda, genişletme Visual C# veya Visual Basic düğümleri ve seçin Windows düğüm.
Üstündeki Yeni Proje iletişim kutusunda, aşağıdakilerden emin .net Framework 4.5 .net Framework sürümü listesinde seçilir.
Seçin wpf kullanıcı denetimi kitaplığı şablon projesi, proje adı ItemTemplateWizardve sonra Tamam düğmesi.
Visual Studioekler ItemTemplateWizard projesi çözüme.
UserControl1 öğe projeden silebilirsiniz.
Yapılandırma Sihirbazı'nı Project
Sihirbaz oluşturmadan önce Windows Presentation Foundation (wpf) penceresi, kod dosyası ve derleme başvuruları projeye eklemelisiniz.
Proje Sihirbazı'nı yapılandırmak için
İçinde Çözüm Gezgini, kısayol menüsünden açmak ItemTemplateWizard proje düğümünü ve sonra özelliklerini.
İçinde Proje Tasarımcısı, hedef çatısı .NET Framework 4.5 sürümüne ayarlandığından emin olun.
Visual C# projeleri için bu değeri üzerinde ayarlayabilirsiniz Uygulama sekme.Visual Basic projeleri için bu değeri ayarlayabilirsiniz derleme sekme.Daha fazla bilgi için bkz. Nasıl yapılır: bir sürümünü hedeflemek.net Framework.
İçinde ItemTemplateWizard projesi, ekleme bir Pencere (wpf) proje için madde ve Madde adı WizardWindow.
CustomActionWizard ve dizeleri adlı iki kod dosyalarını ekleyin.
Kısayol menüsünü açma ItemTemplateWizard proje ve sonra Add Reference.
İçinde Reference Manager - ItemTemplateWizard iletişim kutusunda, altında derlemeleri düğümü seçin uzantıları düğüm.
Aşağıdaki derlemelere yanındaki onay kutularını seçin ve sonra seçin Tamam düğmesi:
EnvDTE
Microsoft.VisualStudio.Shell.11.0
Microsoft.VisualStudio.TemplateWizardInterface
İçinde Çözüm Gezgini, başvuruları ItemTemplateWizard proje için bir klasör seçin EnvDTE başvuru.
[!NOT]
Visual Basic projelerinde başvuruları klasörü görünür sadece her zaman çözümü Göster onay kutusu seçildiğinde, General, Projects and Solutions, Options Dialog Box.
İçinde özelliklerini penceresinde değerini değiştirmek Birlikte çalışma türlerini katıştır özelliğini yanlış.
Özel eylemler için varsayılan konum ve kimlik dizeleri tanımlama
Her özel eylem bir konum ve belirtilen kimliği olan GroupID ve Location özniteliklerini CustomAction Elements.xml dosyasındaki öğesi.Bu adımda, bazı ItemTemplateWizard projesinde bu özniteliklerin geçerli dizeler tanımlayın.Bu izlenecek yolu tamamladığınızda, kullanıcıların bir konum ve kimliği Sihirbazı'nda belirttiğiniz zaman bu dizeler özel eylem proje öğesi Elements.xml dosyasına yazılır.
Kolaylık için bu örnek yalnızca bir alt kümesini kullanılabilir varsayılan konumları ve kimlikleri destekler.Tam listesi için bkz: Varsayılan özel eylem konumları ve kimliklerini.
Varsayılan konum ve kimliği dizesi tanımlamak için
açın.
İçinde ItemTemplateWizard projesi, dizeleri kod dosyasındaki kodu aşağıdaki kod ile değiştirin.
' 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"; } }
Sihirbaz kullanıcı Arabirimi oluşturma
Sihirbazın kullanıcı Arabirimi tanımlamak için xaml ekleyin ve bazı denetimler kimliği dizesi sihirbazda bağlamak için bazı kodlar ekleyin.Visual Studio SharePoint projeler için yerleşik sihirbaz, oluşturduğunuz Sihirbaz benzer.
Sihirbaz kullanıcı Arabirimi oluşturmak için
İçinde ItemTemplateWizard projesi, kısayol menüsünü açmak WizardWindow.xaml dosya ve sonra açık tasarımcıda açmak için.
xaml görünümünde geçerli xaml aşağıdaki xaml ile değiştirin.xaml başlık içerir, özel eylem ve pencerenin altındaki gezinti düğmelerini davranışını belirtmek için denetler, bir kullanıcı Arabirimi tanımlar.
[!NOT]
Bu kodu ekledikten sonra projeniz bazı derleme hataları olacaktır.Sonraki adımda kod eklediğinizde, bu hatalar kaybolacak.
<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>
[!NOT]
Bu xaml içinde oluşturulan pencere türetilir DialogWindow temel sınıfı.Visual Studio için wpf Özel iletişim kutusu eklediğinizde, sizin iletişim kutusu sahip diğer iletişim kutularına Visual Studio ile tutarlı bir stil ve aksi takdirde kalıcı iletişim kutuları ile ortaya çıkabilecek sorunları önlemek için bu sınıftan türetmek öneririz.Daha fazla bilgi için bkz. Nasıl yapılır: oluştur ve Yönet iletişim kutusu.
Bir Visual Basic projesi oluşturuyorsanız, kaldırma ItemTemplateWizard ad alanından WizardWindow sınıf adı x:Class özniteliği Window öğesi.Bu xaml ilk satırda öğedir.İşiniz bittiğinde, aşağıdaki kodu ilk satırı benzemelidir:
<Window x:Class="WizardWindow"
WizardWindow.xaml dosyası için arka plan kod dosyasında geçerli kodu aşağıdaki kodla değiştirin.
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(); } } }
Uygulama Sihirbazı
Uygulayarak Sihirbazı işlevselliğini tanımlamak IWizard arabirim.
Sihirbaz uygulamak için
İçinde ItemTemplateWizard proje açık CustomActionWizard kod dosyasını ve ardından bu dosyayı geçerli kodu aşağıdaki kodla değiştirin:
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
Bu noktada yönergede tüm Sihirbaz şimdi projede kodudur.Hatasız derlendiğinden emin olmak için projeyi derleyin.
Projenizi yapılandırmak için
- Menü çubuğunda Seç Yapı, Build Solution.
Sihirbaz madde şablonu ile ilişkilendirme
Sihirbaz uyguladıysanız, ile ilişkilendirmeniz gerekir Özel eylem üç ana adımları tamamlayarak madde şablonu:
Sihirbaz derleme kesin adı ile oturum açın.
Ortak anahtar belirteci Sihirbazı derleme için alın.
Sihirbaz derlemesine bir başvuru için .vstemplate dosyasına eklemek Özel eylem Item template.
Sihirbaz derleme kesin adı ile oturum açmak için
İçinde Çözüm Gezgini, kısayol menüsünden açmak ItemTemplateWizard proje düğümünü ve sonra özelliklerini.
Üzerinde İmza sekmesini seçin işareti derleme onay kutusu.
İçinde kesin ad anahtar dosyası Seç listesinde, seçim < yeni... >.
İçinde Kesin ad anahtar oluşturmak iletişim kutusunda, temiz bir ad girin Benim anahtar dosyasını parolayla koru onay kutusunu işaretleyin ve sonra seçin Tamam düğmesi.
Menü çubuğunda Seç Yapı, Build Solution.
Sihirbaz derleme için ortak anahtar belirteci almak için
Visual Studio komut istemi penceresinde aşağıdaki komutu çalıştırın değiştirme, komut PathToWizardAssembly ItemTemplateWizard proje geliştirme bilgisayarınızda yerleşik ItemTemplateWizard.dll derleme tam yolu ile.
sn.exe -T PathToWizardAssembly
ItemTemplateWizard.dll derleme için ortak anahtar belirteci Visual Studio komut istemi penceresine yazılır.
Visual Studio komut istemi penceresini açık tutun.Sonraki yordamı tamamlamak için ortak anahtar belirteci gerekir.
.vstemplate dosyasına Sihirbazı derlemesine bir başvuru eklemek için
İçinde Çözüm Gezgini, genişletme ItemTemplate proje düğümünü ve ItemTemplate.vstemplate dosyasını açın.
Aşağıdaki dosyanın sonuna eklemek WizardExtension öğesi arasında </TemplateContent> ve </VSTemplate> etiketler.Yerine YourToken değeri PublicKeyToken özniteliği ile elde ettiğiniz önceki yordamda ortak anahtar belirteci.
<WizardExtension> <Assembly>ItemTemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=YourToken</Assembly> <FullClassName>ItemTemplateWizard.CustomActionWizard</FullClassName> </WizardExtension>
Hakkında daha fazla bilgi için WizardExtension öğesine bakın WizardExtension öğesi (Visual Studio şablonları).
Dosyayı kaydedip kapatın.
Madde şablonu Elements.xml dosyasında değiştirilebilir parametreler ekleme
Birkaç değiştirilebilir parametreler ItemTemplate projesinde Elements.xml dosyasına ekleyin.Bu parametreler başlatılır PopulateReplacementDictionary yönteminde CustomActionWizard daha önce tanımlanan sınıf.Bir kullanıcı bir proje için bir özel eylem proje öğesi eklediğinde, Visual Studio yeni proje öğesi Elements.xml dosyasında bu parametreler, sihirbazda belirttiğiniz değerlerle değiştirir.
Değiştirilebilir parametre başlar ve dolar işareti ($) karakteriyle sona eren bir belirteç olur.Kendi değiştirilebilir parametreleri tanımlamanın yanı sıra SharePoint proje sistemi tanımlar ve başlatır yerleşik parametreleri kullanabilirsiniz.Daha fazla bilgi için bkz. Değiştirilebilir parametreler.
Değiştirilebilir parametreler Elements.xml dosyasına eklemek için
ItemTemplate projesinde Elements.xml dosyasının içeriğini aşağıdaki xml ile değiştirin.
<?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>
Yeni xml değerlerini değiştirir Id, GroupId, Location, Description, ve Url öznitelikleri için değiştirilebilir parametreler.
Dosyayı kaydedip kapatın.
Sihirbaz VSIX paketi ekleme
Böylece proje öğesi içeren VSIX paketi ile birlikte dağıtılan VSIX projesi source.extension.vsixmanifest dosyasında sihirbaz projesine başvuru ekleyin.
Sihirbaz VSIX paketi eklemek için
İçinde Çözüm Gezgini, kısayol menüsünden açın source.extension.vsixmanifest CustomActionProjectItem projede dosya ve sonra açık dosya bildirim düzenleyicisinde açmak için.
Bildirim düzenleyicisinde seçin varlıklarını sekmesini, ardından seçin Yeni düğmesi.
Yeni kıymet eklemek iletişim kutusu görüntülenir.
İçinde türü listesinde, seçim Microsoft.VisualStudio.Assembly.
İçinde kaynak listesinde, seçim Geçerli çözümde bir proje.
İçinde Proje listesinde, seçim ItemTemplateWizardve sonra seçin Tamam düğmesi.
Menü çubuğunda Seç Yapı, Build Solutionve çözüm hatasız derlendiğinden emin olun.
Sınama Sihirbazı
Şimdi Sihirbaz test etmek hazırsınız demektir.İlk olarak, Visual Studio'nun deneysel örneği CustomActionProjectItem çözümünde hata ayıklama Başlat.Daha sonra Sihirbazı özel eylem proje öğesi için Visual Studio'nun deneysel örneği SharePoint projesinde sınayın.Son olarak, yapı ve özel eylem beklendiği gibi çalıştığını doğrulamak için SharePoint projeyi çalıştırın.
Çözüm hata ayıklama başlatmak için
Yönetici kimlik bilgileriyle Visual Studio'yu yeniden başlatın ve CustomActionProjectItem çözüm açın.
ItemTemplateWizard proje CustomActionWizard kod dosyasını açın ve sonra kodu ilk satırı için bir kesme noktası ekleyebilir RunStarted yöntem.
Menü çubuğunda Seç Debug, özel.
İçinde özel durumlar iletişim kutusunda, aşağıdakilerden emin sayıcı ve kullanıcı işlenmemiş onay kutularını Common Language Runtime Exceptions temizlenir ve sonra Tamam düğmesi.
Seçme, F5 tuşunu seçerek veya, menü çubuğunda hata ayıklama Başlat Debug, Start Debugging komutunu.
Visual Studio uzantısı %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Custom eylem proje Item\1.0 yükler ve Visual Studio'nun deneysel örneği başlar.Visual Studio'nun bu örneği proje öğesi test.
Sihirbaz Visual Studio'da test etmek için
Visual Studio'nun deneysel örneği menü çubuğunda seçin Dosya, Yeni, Proje.
Genişletme Visual C# veya Visual Basic düğümünü (madde şablonunuzu destekleyen diline bağlı olarak), SharePoint düğümü ve sonra seçin 2010 düğümü.
Proje şablonları listesinde seçim SharePoint 2010 proje, proje adı CustomActionWizardTestve sonra seçin Tamam düğmesi.
İçinde SharePoint Özelleştirme Sihirbazı, hata ayıklama için kullanmak istediğiniz sitenin URL'sini girin ve sonra'ı Son düğmesi.
İçinde Çözüm Gezgini, proje düğümü için kısayol menüsünü açın, seçim Ekleve sonra Yeni öğe.
İçinde Add New Item - CustomItemWizardTest iletişim kutusunda, genişletme SharePoint düğümü ve genişletin 2010 düğümü.
Proje öğeleri listesinde seçim Özel eylem öğesini ve sonra Ekle düğmesi.
Visual Studio'nun diğer örnek kod, daha önce ayarladığınız kesme noktası durduðunu doðrulamak RunStarted yöntem.
F5 tuşuna basarak seçerek veya menü çubuğu, seçme, projenin hatalarýný devam Debug, devam.
SharePoint Özelleştirme Sihirbazı görünür.
Altında yere, seçim Listesini düzenle seçenek düğmesi.
İçinde Grup kimliği listesinde, seçim iletişim.
İçinde başlık kutusuna girin SharePoint Geliştirici Merkezi.
İçinde Açıklama kutusuna girin SharePoint Geliştirici Merkezi Web sitesi açılır.
İçinde url kutusuna girin https://msdn.microsoft.com/sharepoint/default.aspxve sonra Son düğmesi.
Visual Studio adlı bir öğe ekler CustomAction1 proje ve Elements.xml dosyasını düzenleyicide açar.Elements.XML sihirbazda belirttiğiniz değerleri içerdiğini doğrulayın.
Özel eylemi SharePoint'te sınamak için
Visual Studio'nun deneysel örneği, F5 tuşuna basarak seçin veya menü çubuğunda Seç Debug, Start Debugging komutunu.
Özel eylem paketlenmiş ve belirtilen SharePoint sitesine dağıtılan Site URL'si proje ve web tarayıcısı bu sitenin varsayılan sayfa açar.
[!NOT]
Komut dosyası hata ayıklamasını devre Seç iletişim kutusu görüntülenirse, Evet düğmesi.
SharePoint sitesi listeleri alanında seçin görevleri bağlantı.
Görevleri – tüm sayfası görüntülenir.
Üzerinde Liste araçları sekmesini Şerit'i seçin listesi sekmesinde, daha sonra ayarları grup, seçim Liste ayarları.
Liste ayarları sayfası görüntülenir.
Altında iletişim sayfanın en üstüne yakın başlığını seçin SharePoint Geliştirici Merkezi bağlantı, tarayıcı Web sitesi https://msdn.microsoft.com/sharepoint/default.aspx doğrulamak ve ardından Tarayıcıyı kapatın.
Geliştirme bilgisayarı temizleme
Proje öğesi sınamayı tamamladıktan sonra Visual Studio'nun deneysel örneği proje öğe şablonu kaldırın.
Geliştirme bilgisayarı temizlemek için
Visual Studio'nun deneysel örneği menü çubuğunda seçin araçları, uzantıları ve güncelleştirmeleri.
Uzantıları ve güncelleştirmeleri iletişim kutusunu açar.
Uzantılar listesinde seçin Özel eylem proje öğesi uzantısı, ardından seçin kaldırma düğmesi.
Görüntülenen iletişim kutusunda seçtiğiniz Evet uzantıyı kaldırın ve sonra seçmek istediğinizi onaylamak için düğmeyi Şimdi yeniden kaldırma işlemi tamamlamak için düğme.
Visual Studio (deneysel örneği ve CustomActionProjectItem çözüm açık olduğu Visual Studio Örneği) her iki örneğini kapatın.
Ayrıca bkz.
Görevler
İzlenecek yol: Bölüm 1 bir öğe şablonu ile bir özel eylem proje öğesi oluşturma
Nasıl yapılır: Proje Şablonları ile sihirbazları kullanma
Başvuru
Visual Studio şablon şema başvurusu
Kavramlar
Özel SharePoint proje öğe türlerini tanýmlamak
Madde şablonları ve proje şablonları SharePoint proje maddeler oluşturma