Udostępnij za pośrednictwem


Instruktaż: Tworzenie elementu projektu działania niestandardowe z szablonu elementu, część 2

Po zdefiniowaniu niestandardowy typ element projektu programu SharePoint i skojarzyć ją z szablon towaru w Visual Studio, możesz również dostarczyć Kreatora szablonu.Kreatora można używać do zbierania informacji od użytkowników korzystających z szablonu, aby dodać nowe wystąpienie elementu projektu do projektu.Informacje zbierane, można zainicjować elementu projektu.

W tym instruktażu, należy dodać kreatora do akcji niestandardowej element projektu, które przedstawiono w Instruktaż: Tworzenie elementu projektu działania niestandardowe z szablonu elementu, część 1.Gdy użytkownik dodaje element projektu akcji niestandardowej do projektu programu SharePoint, Kreator zbiera informacje na temat akcji niestandardowej (takie jak jego lokalizacja i adres URL, aby przejść do, gdy użytkownik końcowy wybiera on) i dodaje te informacje do pliku Elements.xml w nowym elemencie projektu.

W tym instruktażu przedstawiono następujące zadania:

  • Tworzenie kreatora dla niestandardowego typu do elementu projektu programu SharePoint, skojarzony z szablon towaru.

  • Definiowanie niestandardowej Kreator interfejsu użytkownika, podobne do wbudowanych kreatorów dla elementów projektu programu SharePoint w programie Visual Studio.

  • Za pomocą parametrów zastępowalnych do zainicjowania programu SharePoint projektu plików z danymi, które należy zebrać w kreatorze.

  • Debugowanie i testowania kreatora.

[!UWAGA]

Pobrać próbkę zawierającą zakończonych projektów, kod i inne pliki w tym instruktażu z następującej lokalizacji: pliki projektu dla instruktaże rozszerzalność narzędzia programu SharePoint.

Wymagania wstępne

Do wykonania tej procedury, należy najpierw utworzyć rozwiązanie CustomActionProjectItem wypełniając Instruktaż: Tworzenie elementu projektu działania niestandardowe z szablonu elementu, część 1.

Ponadto na komputerze deweloperskim do przeprowadzenia tego instruktażu następujące składniki:

Znajomość następujące pojęcia jest przydatne, ale nie jest to wymagane, aby ukończyć Instruktaż:

Tworzenie projektu Kreatora

Do przeprowadzenia tego instruktażu, projekt należy dodać do roztworu CustomActionProjectItem, utworzony w Instruktaż: Tworzenie elementu projektu działania niestandardowe z szablonu elementu, część 1.Będzie wykonywał IWizard interfejs i zdefiniować Kreatora interfejsu użytkownika w tym projekcie.

Aby utworzyć projekt Kreatora

  1. W programie Visual Studio Otwórz rozwiązanie CustomActionProjectItem

  2. W Solution Explorer, otwórz menu skrótów dla węzła rozwiązanie, wybierz Dodaj, a następnie wybierz polecenie Nowy projekt.

    [!UWAGA]

    W projektach programu Visual Basic, węzeł rozwiązanie pojawia się w Solution Explorer tylko wtedy, gdy Zawsze pokazuj rozwiązanie pole wyboru jest zaznaczone w General, Projects and Solutions, Options Dialog Box.

  3. W Nowy projekt okno dialogowe rozwiń Visual C# lub języka Visual Basic węzły, a następnie wybierz polecenie Windows węzła.

  4. W górnej części Nowy projekt okno dialogowe pole, upewnij się, że 4.5.NET Framework jest wybrany na liście wersje.NET Framework.

  5. Wybierz Biblioteka formantów użytkownika WPF projektu szablonu, nazwa projektu ItemTemplateWizard, a następnie wybierz polecenie OK przycisk.

    Visual Studiododaje ItemTemplateWizard projektu do rozwiązania.

  6. Usunięcie elementu UserControl1 z projektu.

Konfigurowanie projektów Kreatora

Aby utworzyć kreatora, należy dodać okno Windows Presentation Foundation (WPF), plik kodu i odwołania do zestawów do projektu.

Aby skonfigurować projekt Kreatora

  1. W Solution Explorer, otwórz menu skrótów z ItemTemplateWizard projektu węzła, a następnie wybierz Właściwości.

  2. W Project Designer, upewnić się, że ustawiono ramy docelowej.NET Framework 4.5.

    Visual C# projektów, wartość tę można ustawić na aplikacji kartę.Projekty języka Visual Basic, wartość tę można ustawić na kompilacji kartę.Aby uzyskać więcej informacji, zobacz Jak: wersja docelowa.NET Framework.

  3. W ItemTemplateWizard projektu, dodać Window ((WPF)) element do projektu, a następnie nazwą elementu WizardWindow.

  4. Dodać dwa pliki kodu, które są nazwane CustomActionWizard i ciągi znaków.

  5. Otwórz menu skrótów dla ItemTemplateWizard projektu, a następnie wybierz Dodaj odwołanie.

  6. W Reference Manager - ItemTemplateWizard dialogowe, pod zespoły węzła, wybierz rozszerzenia węzła.

  7. Zaznacz pola wyboru obok następujących zestawów, a następnie wybierz OK przycisku:

    • EnvDTE

    • Microsoft.VisualStudio.Shell.11.0

    • Microsoft.VisualStudio.TemplateWizardInterface

  8. W Solution Explorer, w odwołania wybierz folder dla projektu ItemTemplateWizard EnvDTE odniesienia.

    [!UWAGA]

    W projektach programu Visual Basic odwołania folder pojawi się tylko wtedy, gdy Zawsze pokazuj rozwiązanie pole wyboru jest zaznaczone w General, Projects and Solutions, Options Dialog Box.

  9. W Właściwości okna, zmień wartość Osadzić typy współdziałania z modelem właściwość, aby False.

Definiowanie domyślnej lokalizacji i ciągi identyfikatorów dla akcji niestandardowych

Każdej akcji niestandardowej ma miejsce i ID, która jest określona w GroupID i Location atrybuty CustomAction elementu w pliku Elements.xml.W tym kroku definiujesz niektórych prawidłowych ciągów tych atrybutów w projekcie ItemTemplateWizard.Po zakończeniu tego instruktażu, te ciągi są zapisywane do pliku Elements.xml w akcji niestandardowej element projektu, gdy użytkownicy określają położenie i ID w kreatorze.

Dla uproszczenia w przykładzie obsługuje tylko podzbiór dostępnych domyślne lokalizacje i identyfikatory.Aby uzyskać pełną listę, zobacz domyślne lokalizacje akcji niestandardowych i identyfikatory.

Aby zdefiniować domyślną lokalizacją i ciągi identyfikatorów

  1. Otwórz.

  2. W ItemTemplateWizard projektu, Zastąp kod w pliku kodu ciągi z następującego kodu.

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

Tworzenie interfejsu użytkownika Kreatora

Dodać XAML, aby zdefiniować interfejs użytkownika kreatora i dodać jakiś kod powiązać niektóre formanty w Kreatorze ciągi identyfikatorów.Kreator, który tworzysz przypomina wbudowany Kreator dla projektów programu SharePoint w programie Visual Studio.

Aby utworzyć kreatora interfejsu użytkownika

  1. W ItemTemplateWizard projekt, otwórz menu skrótów dla WizardWindow.xaml pliku, a następnie wybierz Otwórz Aby otworzyć okno projektanta.

  2. W widoku XAML XAML bieżącego należy zastąpić następujący kod XAML.XAML definiuje interfejs użytkownika, który zawiera nagłówek, kontroluje określające zachowanie akcji niestandardowej i przycisków nawigacji w dolnej części okna.

    [!UWAGA]

    Projekt będzie miał błędy kompilacji, po dodaniu tego kodu.Te błędy zniknie po dodaniu kodu w dalszych krokach.

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

    [!UWAGA]

    Okno w którym jest tworzony w tym języku XAML wywodzi się z DialogWindow klasa podstawowa.Dodając niestandardowe okno dialogowe WPF Visual Studio, zaleca się, aby czerpać swoje okno dialogowe z tej klasy, aby mieć styl zgodne z innych oknach dialogowych w programie Visual Studio i uniknąć problemów, które mogłyby się pojawić z modalnych okien dialogowych.Aby uzyskać więcej informacji, zobacz Jak: tworzenie i zarządzanie nimi w oknach dialogowych.

  3. Jeoli projekt programu Visual Basic, należy usunąć ItemTemplateWizard nazw z WizardWindow Nazwa klasy w x:Class atrybut Window element.Ten element jest w pierwszym wierszu XAML.Gdy skończysz, pierwszy wiersz powinien przypominać następujący kod:

    <Window x:Class="WizardWindow"
    
  4. W pliku kodu dla pliku WizardWindow.xaml należy zastąpić bieżący kod następujący kod.

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

Kreator wdrażania

Definiowanie funkcji kreatora implementując IWizard interfejsu.

Aby zaimplementować Kreatora

  • W ItemTemplateWizard projektu, a następnie kliknij polecenie Otwórz CustomActionWizard kod pliku, a następnie zastąpić bieżący kod w tym pliku następujący kod:

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

Punkt kontrolny

W tym momencie w instruktażu, cały kod dla kreatora jest teraz w projekcie.Utwórz projekt, aby upewnić się, że skompilowany bez błędów.

Tworzenie projektu

  • Na pasku menu wybierz budować, Budowania rozwiązania.

Kojarzenie kreatora z szablon towaru

Wdrożeniu kreatora, musisz skojarzyć go z Akcji niestandardowej szablon towaru, wykonując trzy główne etapy:

  1. Zaloguj się przy użyciu silnej nazwy zestawu kreatora.

  2. Pobierz token klucza publicznego dla Kreatora zestawu.

  3. Dodaj odwołanie do zestawu kreatora w pliku .vstemplate dla Akcji niestandardowej szablon towaru.

Aby zarejestrować się przy użyciu silnej nazwy zestawu Kreatora

  1. W Solution Explorer, otwórz menu skrótów z ItemTemplateWizard projektu węzła, a następnie wybierz Właściwości.

  2. Na podpisywania kartę, a następnie kliknij polecenie Wybierz podpisuje zestaw z pole wyboru.

  3. W Wybierz plik klucza silnej nazwy listy, wybierz opcję < nowy... >.

  4. W Tworzenie silne nazwy klucza okno dialogowe Wprowadź nazwę, wyczyść Chroń mój plik klucza przy użyciu hasła pole wyboru, a następnie wybierz OK przycisk.

  5. Na pasku menu wybierz budować, Budowania rozwiązania.

Aby uzyskać token klucza publicznego dla zestawu Kreatora

  1. W oknie wiersza polecenia usługi Visual Studio, uruchom następujące polecenie, zastępując PathToWizardAssembly z pełną ścieżką do wbudowanego zestawu ItemTemplateWizard.dll dla projektu ItemTemplateWizard na komputerze dewelopera.

    sn.exe -T PathToWizardAssembly
    

    Token klucza publicznego zestawu ItemTemplateWizard.dll są zapisywane do okna wiersza polecenia usługi programu Visual Studio.

  2. Nie zamykaj okna wiersza polecenia usługi programu Visual Studio.Musisz wykonać następną procedurę tokenu klucza publicznego.

Aby dodać odwołanie do zestawu kreatora w pliku .vstemplate

  1. W Solution Explorer, rozwiń węzeł ItemTemplate projektu węzła, a następnie otwórz plik ItemTemplate.vstemplate.

  2. Pod koniec pliku, należy dodać następujący WizardExtension elementu między </TemplateContent> i </VSTemplate> tagi.Zamień YourToken wartość PublicKeyToken atrybut z tokenu klucza publicznego uzyskany w poprzedniej procedurze.

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

    Aby uzyskać więcej informacji o WizardExtension element, zobacz Element WizardExtension (Visual Studio szablonów).

  3. Zapisz i zamknij plik.

Dodawanie parametrów zastępowalnych w pliku Elements.xml w szablonie elementu

Dodać kilka parametrów zastępowalnych w pliku Elements.xml w projekcie ItemTemplate.Parametry te są inicjowane w PopulateReplacementDictionary metoda w CustomActionWizard klasy, który został zdefiniowany wcześniej.Gdy użytkownik dodaje element projektu akcji niestandardowej do projektu, Visual Studio automatycznie zastępuje tych parametrów w pliku Elements.xml w elemencie projektu nowej wartości, które są określone w kreatorze.

Parametr wymienny jest token, który rozpoczyna i kończy się znakiem dolara ($).Oprócz definiowania własnych parametrów wymiennych, można użyć wbudowanego parametry, które system programu SharePoint projektu definiuje i inicjuje.Aby uzyskać więcej informacji, zobacz Parametry wymienne.

Aby dodać parametrów zastępowalnych w pliku Elements.xml

  1. W projekcie ItemTemplate zawartość pliku Elements.xml należy zastąpić następujący kod 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>
    

    Nowy plik XML zmienia wartości Id, GroupId, Location, Description, i Url atrybuty do parametrów.

  2. Zapisz i zamknij plik.

Dodanie kreatora pakiet VSIX

W pliku source.extension.vsixmanifest w VSIX projektu należy dodać odwołanie do projektu kreatora tak, że system został wdrożony z pakiet VSIX, który zawiera element projektu.

Aby dodać kreatora do pakiet VSIX

  1. W Solution Explorer, otwórz menu skrótów z source.extension.vsixmanifest plik w programie project CustomActionProjectItem, a następnie wybierz Otwórz do otwarcia pliku w edytorze manifestu.

  2. W edytorze manifestu, wybierz opcję aktywów , a następnie wybierz polecenie Nowa przycisk.

    Dodać nowego środka pojawi się okno dialogowe.

  3. W typu listy, wybierz opcję Microsoft.VisualStudio.Assembly.

  4. W źródło listy, wybierz opcję projektu w bieżącym rozwiązaniem.

  5. W Projekt listy, wybierz opcję ItemTemplateWizard, a następnie wybierz polecenie OK przycisk.

  6. Na pasku menu wybierz budować, Budowania rozwiązania, a następnie upewnij się, że rozwiązanie kompiluje się bez błędów.

Kreator testowania

Teraz można przystąpić do badania kreatora.Po pierwsze rozpocząć debugowanie rozwiązanie CustomActionProjectItem w doświadczalnych wystąpienie programu Visual Studio.Następnie przetestuj Kreator dla akcji niestandardowej element projektu w projekcie programu SharePoint w doświadczalnych wystąpienie programu Visual Studio.Wreszcie budowy i uruchomienia projektu programu SharePoint, aby sprawdzić, czy akcja niestandardowa działa zgodnie z oczekiwaniami.

Aby rozpocząć debugowanie rozwiązanie

  1. Uruchom ponownie program Visual Studio z poświadczeniami administracyjnymi, a następnie otwórz rozwiązanie CustomActionProjectItem.

  2. Projektu, ItemTemplateWizard, należy otworzyć plik CustomActionWizard kod, a następnie Dodaj punkt przerwania w pierwszej linii kodu w RunStarted metoda.

  3. Na pasku menu wybierz Debug, Wyjątki.

  4. W Wyjątki okno dialogowe pole, upewnij się, że Thrown i - unhandled pola wyboru dla Wyjątków CLR są czyszczone, a następnie wybierz OK przycisk.

  5. Rozpocząć debugowanie wybierając klawisz F5 lub na pasku menu, wybierając Debug, Start Debugging.

    Visual Studio instaluje rozszerzenie do %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Custom działania projektu Item\1.0 i uruchamia wystąpienie doświadczalnych Visual Studio.Element projektu będzie test w tym wystąpieniu programu Visual Studio.

Aby przetestować kreatora w programie Visual Studio

  1. Eksperymentalne wystąpienie programu Visual Studio, na pasku menu wybierz pliku, Nowa, Projekt.

  2. Rozwiń Visual C# lub języka Visual Basic rozwiń węzeł (w zależności od języka obsługującego Twój szablon towaru), SharePoint węzła, a następnie wybierz polecenie 2010 węzła.

  3. Na liście szablonów projektu, wybierz Programu SharePoint 2010 projektu, nazwa projektu CustomActionWizardTest, a następnie wybierz polecenie OK przycisk.

  4. W Kreatora dostosowania programu SharePoint, wprowadź adres URL witryny, którą chcesz używać do debugowania, a następnie wybierz wykończenie przycisk.

  5. W Solution Explorer, otwórz menu skrótów dla węzła projektu, wybierz Dodaj, a następnie wybierz polecenie Nowego elementu.

  6. W Dodaj nowy element - CustomItemWizardTest okno dialogowe rozwiń SharePoint węzła, a następnie rozwiń węzeł 2010 węzła.

  7. Na liście elementów projektu, wybierz opcję Akcji niestandardowej element, a następnie wybierz Dodaj przycisk.

  8. Sprawdź, że kod w inne wystąpienie programu Visual Studio zatrzymuje się na punkt przerwania, które wcześniej w zestaw RunStarted metoda.

  9. Kontynuuj debugowanie projektu, wybierając klawisz F5 lub, na pasku, wybierając menu Debug, Kontynuuj.

    Zostanie wyświetlony Kreator dostosowania programu SharePoint.

  10. Pod miejsce, wybierz Edytować listę przycisku opcji.

  11. W Identyfikatora grupy listy, wybierz opcję komunikacji.

  12. W Tytuł wprowadź Centrum deweloperów programu SharePoint.

  13. W Opis wprowadź Otwiera witryny sieci Web programu SharePoint Developer Center.

  14. W URL wprowadź https://msdn.microsoft.com/sharepoint/default.aspx, a następnie wybierz polecenie wykończenie przycisk.

    Visual Studio dodaje element o nazwie CustomAction1 do projektu i otwiera plik Elements.xml, w edytorze.Upewnij się, że Elements.xml zawiera wartości, które określono w kreatorze.

Aby przetestować akcji niestandardowej w programie SharePoint

  1. W eksperymentalnych wystąpienie programu Visual Studio, wybierz klawisz F5 lub, na pasku menu wybierz Debug, Start Debugging.

    Akcja niestandardowa jest pakowana i wdrożonych w witrynie programu SharePoint, określony przez Adres URL witryny właściwości projektu i przeglądarki sieci web otwiera się do domyślnej strony tej witryny.

    [!UWAGA]

    Jeśli Niepełnosprawnych debugowanie skryptu pojawi się okno dialogowe, wybierz opcję Tak przycisk.

  2. Wybierz w obszarze listy witryny programu SharePoint, zadania link.

    Zadań-wszystkie zadania zostanie wyświetlona strona.

  3. Na Narzędzia listy kartę Wstążki, wybierz listy kartę, a następnie, w Ustawienia grupy, wybierz Ustawienia listy.

    Ustawienia listy zostanie wyświetlona strona.

  4. Pod komunikacji pozycji w górnej części strony, wybierz polecenie Centrum deweloperów programu SharePoint link, sprawdź, że przeglądarka otwiera https://msdn.microsoft.com/sharepoint/default.aspx witryny sieci Web, a następnie zamknij przeglądarkę.

Oczyszczanie na komputerze deweloperskim

Po zakończeniu badania element projektu, należy usunąć szablon elementu projektu z eksperymentalnych wystąpienie programu Visual Studio.

Aby oczyścić komputer rozwoju

  1. Eksperymentalne wystąpienie programu Visual Studio, na pasku menu wybierz Narzędzia, rozszerzenia i aktualizacje.

    Rozszerzenia i aktualizacje zostanie otwarte okno dialogowe.

  2. Na liście Rozszerzenia wybierz Element projektu Akcja niestandardowa rozszerzenie, a następnie wybierz polecenie odinstalować przycisk.

  3. W wyświetlonym oknie dialogowym wybierz Tak przycisk, aby potwierdzić, że chcesz odinstalować rozszerzenie, a następnie wybierz Uruchom ponownie teraz przycisk, aby zakończyć dezinstalację.

  4. Zamknij oba wystąpienia programu Visual Studio (wystąpienie eksperymentalnych i wystąpienie programu Visual Studio, w którym roztwór CustomActionProjectItem jest otwarty).

Zobacz też

Zadania

Instruktaż: Tworzenie elementu projektu działania niestandardowe z szablonu elementu, część 1

Jak: Szablony projektów za pomocą kreatorów

Informacje

Visual Studio szablonu schematu odwołania

IWizard

Koncepcje

Definiowanie typów elementów projektu programu SharePoint niestandardowe

Tworzenie elementu szablonów i szablony projektu dla elementów projektu programu SharePoint

Inne zasoby

Domyślne lokalizacje akcji niestandardowych i identyfikatory