Procedura dettagliata: creazione di un elemento di progetto Azione personalizzata con un modello di elemento, parte 2
Dopo avere definito un tipo di elemento di progetto SharePoint personalizzato e averlo associato a un modello di elemento in Visual Studio, è anche possibile fornire una procedura guidata per il modello.È possibile utilizzare la procedura guidata per raccogliere informazioni dagli utenti quando utilizzano il modello per aggiungere una nuova istanza dell'elemento di progetto a un progetto.Le informazioni raccolte possono essere utilizzate per inizializzare l'elemento di progetto.
In questa procedura dettagliata verrà aggiunta una procedura guidata all'elemento di progetto Azione personalizzata illustrato in Procedura dettagliata: creazione di un elemento di progetto Azione personalizzata con un modello di elemento, parte 1.Quando un utente aggiunge un elemento di progetto azione personalizzata a un progetto SharePoint, la procedura guidata vengono raccolte informazioni sull'azione personalizzata (ad esempio la posizione e l'url da passare quando un utente finale si sceglie) e queste informazioni nel file Elements.xml nel nuovo elemento di progetto.
In questa procedura dettagliata vengono illustrate le attività seguenti:
Creazione di una procedura guidata per un tipo di elemento di progetto SharePoint personalizzato associato a un modello di elemento.
Definizione di un'interfaccia utente della procedura guidata personalizzata simile a quella delle procedure guidate predefinite per gli elementi di progetto SharePoint in Visual Studio.
Utilizzo di parametri sostituibili per inizializzare i file di progetto SharePoint con i dati raccolti nella procedura guidata.
Debug e test della procedura guidata.
[!NOTA]
È possibile scaricare un esempio che contiene i progetti completati, il codice e altri file di questa procedura dettagliata dal seguente percorso: File di progetto per le procedure dettagliate di estensibilità degli strumenti di SharePoint.
Prerequisiti
Per eseguire questa procedura dettagliata, è prima necessario creare la soluzione CustomActionProjectItem completando quanto descritto in Procedura dettagliata: creazione di un elemento di progetto Azione personalizzata con un modello di elemento, parte 1.
Per completare la procedura dettagliata, nel computer di sviluppo devono inoltre essere disponibili i componenti seguenti:
Edizioni supportate di Windows, SharePoint e Visual Studio.Per ulteriori informazioni, vedere Requisiti per lo sviluppo di soluzioni SharePoint.
Visual Studio SDK.In questa procedura dettagliata viene utilizzato il modello VSIX Project di SDK per creare un pacchetto VSIX e distribuire l'elemento di progetto.Per ulteriori informazioni, vedere Estensione degli strumenti di SharePoint in Visual Studio.
Per completare la procedura dettagliata è consigliabile conoscere i concetti riportati di seguito:
Procedure guidate per modelli di progetto e di elemento in Visual Studio.Per ulteriori informazioni, vedere Procedura: utilizzare procedure guidate con modelli di progetto e l'interfaccia IWizard.
Azioni personalizzate in SharePoint.Per ulteriori informazioni, vedere l'articolo relativo all'azione personalizzata (la pagina potrebbe essere in inglese).
Creazione del progetto di procedura guidata
Per completare questa procedura dettagliata, è necessario aggiungere un progetto alla soluzione CustomActionProjectItem creata in Procedura dettagliata: creazione di un elemento di progetto Azione personalizzata con un modello di elemento, parte 1.È quindi necessario implementare l'interfaccia IWizard e definire l'interfaccia utente della procedura guidata in questo progetto.
Per creare il progetto di procedura guidata
In Visual Studio, aprire la soluzione CustomActionProjectItem
In Esplora soluzioni, aprire il menu di scelta rapida del nodo della soluzione, scegliere Aggiungiquindi scegliere Nuovo progetto.
[!NOTA]
Nei progetti di Visual Basic, il nodo della soluzione viene visualizzato in Esplora soluzioni solo quando la casella di controllo Mostra sempre soluzione viene selezionata in General, Projects and Solutions, Options Dialog Box.
Nella finestra di dialogo Nuovo progetto, espandere i nodi Visual Basic o Visual C# quindi selezionare il nodo Finestre.
Nella parte superiore della finestra di dialogo Nuovo progetto, assicurarsi che .NET Framework 4.5 sia selezionato nell'elenco delle versioni di.NET Framework.
Scegliere il modello di progetto Libreria di controlli utente WPF, denominare il progetto ItemTemplateWizardquindi scegliere il pulsante OK.
Tramite Visual Studio il progetto ItemTemplateWizard verrà aggiunto alla soluzione.
Eliminare l'elemento UserControl1 dal progetto.
Configurazione del progetto di procedura guidata
Prima di creare la procedura guidata, è necessario aggiungere una finestra di Windows Presentation Foundation (WPF), un file di codice e riferimenti al progetto.
Per configurare il progetto di procedura guidata
In Esplora soluzioni, aprire il menu di scelta rapida nel nodo del progetto ItemTemplateWizard quindi scegliere Proprietà.
In Progettazione progetti, assicurarsi che il framework di destinazione sia impostato su .NET Framework 4,5.
Per i progetti visual C#, è possibile impostare questo valore sulla scheda Application.Per i progetti di Visual Basic., è possibile impostare questo valore sulla scheda Compilazione.Per ulteriori informazioni, vedere Procedura: destinare una versione di .NET Framework.
Nel progetto ItemTemplateWizard, aggiungere un elemento Finestra (WPF) al progetto e denominarlo l'elemento WizardWindow.
Aggiungere due file di codice denominato CustomActionWizard e stringhe.
Aprire il menu di scelta rapida del progetto ItemTemplateWizard quindi scegliere Aggiungi riferimento.
Nella finestra di dialogo Gestione riferimenti - ItemTemplateWizard, nel nodo Assembly, selezionare il nodo Estensioni.
Selezionare le caselle di controllo accanto ai seguenti assembly e quindi scegliere il pulsante OK :
EnvDTE
Microsoft.VisualStudio.Shell.11.0
Microsoft.VisualStudio.TemplateWizardInterface
In Esplora soluzioni, nella cartella Riferimenti per il progetto ItemTemplateWizard, selezionare il riferimento EnvDTE.
[!NOTA]
Nei progetti di Visual Basic la cartella Riferimenti viene visualizzata solo quando la casella di controllo Mostra sempre soluzione è selezionata in General, Projects and Solutions, Options Dialog Box.
Nella finestra Proprietà, modificare il valore della proprietà Incorpora tipi di interoperabilità a False.
Definizione del percorso e delle stringhe ID predefiniti per le azioni personalizzate
Per ogni azione personalizzata sono disponibili un percorso e un ID specificati negli attributi GroupID e Location dell'elemento CustomAction nel file Elements.xml.In questo passaggio vengono definite alcune delle stringhe valide per questi attributi nel progetto ItemTemplateWizard.Dopo avere completato questa procedura dettagliata, le stringhe vengono scritte nel file Elements.xml nell'elemento di progetto azione personalizzata quando gli utenti specificano un percorso e un ID nella procedura guidata.
Per semplicità, in questo esempio è supportato solo un subset degli ID e dei percorsi predefiniti disponibili.Per un elenco completo, vedere ID e percorsi predefiniti delle azioni personalizzate (la pagina potrebbe essere in inglese).
Per definire il percorso e le stringhe ID predefiniti
aperto.
Nel progetto ItemTemplateWizard, sostituire il codice nel file di codice delle stringhe con il codice seguente.
' 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"; } }
Creazione dell'interfaccia utente della procedura guidata
Aggiungere codice XAML per definire l'Interfaccia utente della procedura guidata e aggiungere codice per associare alcuni controlli nella procedura guidata alle stringhe ID.La procedura guidata creata è simile a quella predefinita per i progetti SharePoint in Visual Studio.
Per creare l'interfaccia utente della procedura guidata
Nel progetto ItemTemplateWizard, aprire il menu di scelta rapida per il file WizardWindow.xaml quindi scegliere Apri per aprire la finestra nella finestra di progettazione.
In visualizzazione XAML, sostituire l'oggetto corrente XAML con il codice XAML seguente.Il codice XAML definisce un'interfaccia utente che include un'intestazione, controlli per specificare il comportamento dell'azione predefinita e i pulsanti di navigazione nella parte inferiore della finestra.
[!NOTA]
Il progetto presenterà alcuni errori di compilazione dopo aver aggiunto questo codice.che scompariranno quando si aggiunge codice nei passaggi successivi.
<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>
[!NOTA]
La finestra creata in questo codice XAML viene derivata dalla classe base DialogWindow.Quando si aggiunge una finestra di dialogo WPF personalizzata a Visual Studio, è consigliabile deriva la finestra di dialogo da questa classe per far sì che lo stile coerente con altre finestre di dialogo in Visual Studio e per evitare problemi che possono verificarsi nelle finestre di dialogo modale.Per ulteriori informazioni, vedere Procedura: creare e gestire le finestre di dialogo.
Se si sviluppa un progetto di Visual Basic., rimuovere lo spazio dei nomi ItemTemplateWizard il nome della classe WizardWindow nell'attributo x:Class di elemento Window.Questo elemento è la prima riga del codice XAML.Al termine, la prima riga dovrebbe essere simile al seguente:
<Window x:Class="WizardWindow"
Nel file code-behind per il file WizardWindow.xaml, sostituire il codice corrente con il codice seguente.
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(); } } }
Implementazione della procedura guidata
Definire le funzionalità della procedura guidata implementando l'interfaccia IWizard.
Per implementare la procedura guidata
Nel progetto ItemTemplateWizard, aprire il file di codice CustomActionWizard quindi sostituire il codice corrente nel file con il codice seguente:
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); } } }
Verifica
In questa fase della procedura dettagliata, tutto il codice per la procedura guidata si trova nel progetto.Compilare il progetto assicurandosi che tale operazione venga eseguita correttamente.
Per compilare il progetto
- Sulla barra dei menu, scegliere Compilazione, Compila soluzione.
Associazione della procedura guidata al modello di elemento
Dopo avere implementato la procedura guidata, è necessario associarla al modello di elemento Azione personalizzata completando tre passaggi principali:
Firmare l'assembly della procedura guidata con un nome sicuro.
Ottenere il token di chiave pubblica per l'assembly della procedura guidata.
Aggiungere un riferimento all'assembly della procedura guidata nel file con estensione vstemplate per il modello di elemento Azione personalizzata.
Per firmare l'assembly della procedura guidata con un nome sicuro
In Esplora soluzioni, aprire il menu di scelta rapida nel nodo del progetto ItemTemplateWizard quindi scegliere Proprietà.
Nella scheda Firma selezionare la casella di controllo Firma assembly.
Nell'elenco Scegli un file chiave con nome sicuro, scegliere <New...>.
Nella finestra di dialogo Crea chiave con nome sicuro, nome, deselezionare la casella di controllo Proteggi file di chiave con una password quindi scegliere il pulsante OK.
Sulla barra dei menu, scegliere Compilazione, Compila soluzione.
Per ottenere il token di chiave pubblica per l'assembly della procedura guidata
In una finestra del prompt dei comandi di Visual Studio, eseguire il comando seguente, sostituendo PathToWizardAssembly con il percorso completo dell'assembly ItemTemplateWizard.dll compilato per il progetto ItemTemplateWizard nel computer di sviluppo.
sn.exe -T PathToWizardAssembly
Il token di chiave pubblica per l'assembly ItemTemplateWizard.dll è scritto nella finestra del prompt dei comandi di Visual Studio.
Tenere aperta la finestra del prompt dei comandi di Visual Studio.Il token di chiave pubblica sarà necessario per completare la procedura successiva.
Per aggiungere un riferimento all'assembly della procedura guidata nel file con estensione vstemplate
In Esplora soluzioni, espandere il nodo del progetto ItemTemplate quindi aprire il file ItemTemplate.vstemplate.
Alla fine del file, aggiungere l'elemento WizardExtension seguente tra i tag </TemplateContent> e </VSTemplate>.Sostituire il valore YourToken l'attributo PublicKeyToken con il token di chiave pubblica ottenuto nella procedura precedente.
<WizardExtension> <Assembly>ItemTemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=YourToken</Assembly> <FullClassName>ItemTemplateWizard.CustomActionWizard</FullClassName> </WizardExtension>
Per ulteriori informazioni sull'elemento WizardExtension, vedere Elemento WizardExtension (modelli di Visual Studio).
Salvare e chiudere il file.
Aggiunta di parametri sostituibili al file Elements.xml nel modello di elemento
Aggiungere diversi parametri sostituibili al file Elements.xml nel progetto ItemTemplate.Questi parametri vengono inizializzati nel metodo PopulateReplacementDictionary della classe CustomActionWizard definita in precedenza.Quando un utente aggiunge un elemento di progetto Azione personalizzata a un progetto, questi parametri nel file Elements.xml nel nuovo elemento di progetto vengono sostituiti automaticamente da Visual Studio con i valori specificati nella procedura guidata.
Un parametro sostituibile è un token che inizia e termina con il segno di dollaro ($).Oltre a definire i propri parametri sostituibili, è possibile utilizzare parametri predefiniti che il sistema di progetto SharePoint definisce e inizializzato.Per ulteriori informazioni, vedere Parametri sostituibili.
Per aggiungere parametri sostituibili al file Elements.xml
Nel progetto ItemTemplate, sostituire il contenuto del file Elements.xml con il codice XML seguente.
<?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>
Tramite il nuovo codice XML i valori degli attributi Id, GroupId, Location, Description e Url vengono modificati in parametri sostituibili.
Salvare e chiudere il file.
Aggiunta della procedura guidata al pacchetto VSIX
Nel file source.extension.vsixmanifest nel progetto VSIX, aggiungere un riferimento al progetto di procedura guidata in modo che venga distribuito con il pacchetto VSIX che contiene l'elemento di progetto.
Per aggiungere la procedura guidata al pacchetto VSIX
In Esplora soluzioni, aprire il menu di scelta rapida nel file source.extension.vsixmanifest il progetto CustomActionProjectItem quindi scegliere Apri per aprirlo nell'editor del manifesto.
Nell'editor del manifesto, scegliere la scheda Asset, quindi scegliere il pulsante Nuova.
La finestra di dialogo Aggiungi nuovo asset visualizzato.
Nell'elenco Tipo, scegliere Microsoft.VisualStudio.Assembly.
Nell'elenco Alimentazione, scegliere Progetto nella soluzione corrente.
Nell'elenco Project, scegliere ItemTemplateWizardquindi scegliere il pulsante OK.
Sulla barra dei menu, scegliere Compilazione, Compila soluzionequindi assicurarsi che la soluzione venga compilato senza errori.
Test della procedura guidata
È ora possibile eseguire il test della procedura guidata.Innanzitutto, avviare il debug della soluzione CustomActionProjectItem nell'istanza sperimentale di Visual Studio.Esaminare quindi la procedura guidata per l'elemento di progetto azione personalizzata in un progetto SharePoint nell'istanza sperimentale di Visual Studio.Infine, compilare ed eseguire il progetto SharePoint per verificare che l'azione personalizzata funzioni come previsto.
Per avviare il debug della soluzione
Riavviare Visual Studio con credenziali amministrative e aprire la soluzione CustomActionProjectItem.
Nel progetto ItemTemplateWizard, aprire il file di codice CustomActionWizard e aggiungere un punto di interruzione alla prima riga di codice nel metodo RunStarted.
Sulla barra dei menu, scegliere Debug, Eccezioni.
Nella finestra di dialogo Eccezioni, verificare che le caselle di controllo Non gestita dall'utente e Generata per Eccezioni comuni di runtime per le lingue siano deselezionate e quindi scegliere il pulsante OK.
Avviare il debug scegliendo il tasto F5, o, sulla barra dei menu, scegliente Debug, Avvia debug.
In Visual Studio i file di estensione vengono installati in %UserProfile% \ AppData \ local \ Microsoft \ VisualStudio \ 11.0Exp \ extensions \ Contoso \ elemento di progetto \ 1,0 e viene avviata un'istanza sperimentale di Visual Studio.L'elemento del progetto verrà testato in questa istanza di Visual Studio.
Per testare la procedura guidata in Visual Studio
Nell'istanza sperimentale di Visual Studio, sulla barra dei menu, scegliere Il file, Nuova, Project.
Espandere il nodo Visual Basic o Visual C# (a seconda del linguaggio che il modello di elemento supporta), espandere il nodo SharePoint quindi selezionare il nodo 2010.
Nell'elenco di modelli di progetto, scegliere Progetto SharePoint 2010, denominare il progetto CustomActionWizardTestquindi scegliere il pulsante OK.
In Personalizzazione guidata SharePoint, immettere l'url del sito che si desidera utilizzare per il debug e quindi scegliere il pulsante Fine.
In Esplora soluzioni, aprire il menu di scelta rapida del nodo del progetto, scegliere Aggiungiquindi scegliere Nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento - CustomItemWizardTest, espandere il nodo SharePoint quindi espandere il nodo 2010.
Nell'elenco di elementi di progetto, selezionare l'elemento Azione personalizzata quindi scegliere il pulsante Aggiungi.
Verificare che il codice nell'altra istanza di Visual Studio venga interrotto in corrispondenza del punto di interruzione impostato precedentemente nel metodo RunStarted.
Continuare a eseguire il debug del progetto scegliendo il tasto F5 o, sulla barra dei menu, scegliente Debug, Continua.
Viene visualizzata la Personalizzazione guidata SharePoint.
In Percorso, scegliere il pulsante di opzione Modifica elenco.
Nell'elenco ID gruppo, scegliere Comunicazioni.
Nella casella Titolo, immettere Centro per sviluppatori SharePoint.
Nella casella Descrizione, immettere Aprire il sito Web del Centro per sviluppatori di SharePoint.
Nella casella URL, immettere https://msdn.microsoft.com/sharepoint/default.aspxquindi scegliere il pulsante Fine.
lo isual studio viene aggiunto un elemento denominato CustomAction1 al progetto e aprire il file Elements.xml nell'editor.Verificare che il file Elements.xml contenga i valori specificati nella procedura guidata.
Per testare l'azione personalizzata in SharePoint
Nell'istanza sperimentale di Visual Studio, scegliere il tasto F5 o, sulla barra dei menu, scegliere Debug, Avvia debug.
L'azione personalizzata viene assemblata e distribuita al sito di SharePoint specificato dalla proprietà URL sito del progetto e il browser viene visualizzata la pagina predefinita di questo sito.
[!NOTA]
Se la finestra di dialogo Debug degli script disabilitato viene visualizzato, scegliere il pulsante Sì.
Nell'area degli elenchi del sito di SharePoint, scegliere il collegamento Attività.
La pagina Attività - Tutte le attività viene visualizzata.
Nella scheda Strumenti elenco della barra multifunzione, scegliere la scheda Elenco quindi, nel gruppo Impostazioni, scegliere Impostazioni elenco.
La pagina Impostazioni elenco viene visualizzata.
In Comunicazioni e dirette nella parte superiore della pagina, scegliere il collegamento Centro per sviluppatori SharePoint, verificare che il browser aprire il sito Web https://msdn.microsoft.com/sharepoint/default.aspx e quindi chiudere il browser.
Pulizia del computer di sviluppo
Dopo aver completato il test dell'elemento di progetto, rimuovere il modello di elemento di progetto dall'istanza sperimentale di Visual Studio.
Per pulire il computer di sviluppo
Nell'istanza sperimentale di Visual Studio, sulla barra dei menu, scegliere Strumenti, Estensioni e aggiornamenti.
La finestra di dialogo Estensioni e aggiornamenti viene aperto.
Nell'elenco di estensioni selezionare, l'estensione Elemento di progetto azione personalizzata quindi scegliere il pulsante Disinstalla.
Nella finestra di dialogo, scegliere il pulsante Sì per confermare che si desidera disinstallare l'estensione e quindi scegliere il pulsante Riavvia ora per completare la disinstallazione.
Chiudere entrambe le istanze di Visual Studio (l'istanza sperimentale e l'istanza di Visual Studio in cui la soluzione CustomActionProjectItem è aperta).
Vedere anche
Attività
Procedura: utilizzare procedure guidate con modelli di progetto
Riferimenti
Riferimenti allo schema dei modelli di Visual Studio
Concetti
Definizione di tipi di elementi di progetto SharePoint
Creazione di modelli di elemento e di modelli di progetto per gli elementi di progetto SharePoint
Altre risorse
Impostare come valore predefinito percorsi di un'azione personalizzata e gli ID