Procedura dettagliata: creazione di un Custom Action Project Item 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 Custom Action Project Item con un modello di elemento, parte 1. Quando un utente aggiunge un elemento di progetto Azione personalizzata a un progetto SharePoint, tramite la procedura guidata vengono raccolte informazioni sull'azione personalizzata (ad esempio il percorso e l'URL a cui passare quando si fa clic) e queste informazioni vengono aggiunte al 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 2010.
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 all'indirizzo seguente: https://go.microsoft.com/fwlink/?LinkId=191369.
Prerequisiti
Per eseguire questa procedura dettagliata, è prima necessario creare la soluzione CustomActionProjectItem completando quanto descritto in Procedura dettagliata: creazione di un Custom Action Project Item 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 Microsoft Windows, SharePoint e Visual Studio. Per ulteriori informazioni, vedere Requisiti per lo sviluppo di soluzioni SharePoint.
Campo Visual Studio 2010 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 nuovo progetto alla soluzione CustomActionProjectItem creata in Procedura dettagliata: creazione di un Custom Action Project Item 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
Aprire la soluzione CustomActionProjectItem in Visual Studio.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo della soluzione, scegliere Aggiungi, quindi 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 Finestra di dialogo Opzioni, Progetti e soluzioni, Generale.
Nella finestra di dialogo Nuovo progetto espandere il nodo Visual C# o Visual Basic, quindi fare clic sul nodo Windows.
Assicurarsi che nella casella combinata nella parte superiore della finestra di dialogo Nuovo progetto sia selezionata l'opzione .NET Framework 4.
Selezionare il modello di progetto Libreria di controlli utente WPF.
Nella casella Nome digitare ItemTemplateWizard.
Fare clic su 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 al progetto una finestra WPF, un file di codice e i riferimenti all'assembly.
Per configurare il progetto di procedura guidata
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto ItemTemplateWizard, quindi scegliere Proprietà.
In Progettazione progetti modificare il framework di destinazione da .NET Framework 4 Client Profile a .NET Framework 4. Nei progetti Visual C# è possibile effettuare questa operazione nella scheda Applicazione, per i progetti Visual Basic nella scheda Compila. Per ulteriori informazioni, vedere Procedura: scelta di una versione o profilo di .NET Framework specifico.
Nota
Per impostazione predefinita, quando si crea un nuovo progetto destinato a .NET Framework 4, il progetto ha il profilo client come destinazione. Questa procedura dettagliata richiede la versione completa di .NET Framework 4.
Nel progetto ItemTemplateWizard aggiungere un nuovo elemento Finestra (WPF) al progetto. Assegnare al nuovo elemento il nome WizardWindow.
Aggiungere due file di codice con i nomi seguenti:
CustomActionWizard
Strings
Scegliere Aggiungi riferimento dal menu Progetto.
Nella scheda .NET premere CTRL e selezionare gli assembly seguenti, quindi fare clic su OK:
EnvDTE
Microsoft.VisualStudio.Shell.10.0
Microsoft.VisualStudio.TemplateWizardInterface
In Esplora soluzioni, nella cartella Riferimenti per il progetto ItemTemplateWizard, scegliere EnvDTE.
Nota
Nei progetti di Visual Basic la cartella Riferimenti viene visualizzata solo quando la casella di controllo Mostra sempre soluzione è selezionata in Finestra di dialogo Opzioni, Progetti e soluzioni, Generale.
Nella finestra Proprietà, modificare la proprietà Incorpora tipi di interoperabilità in 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, queste stringhe vengono scritte nel file Elements.xml nell'elemento di progetto Azione personalizzata quando gli utenti selezionano 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
Nel progetto ItemTemplateWizard aprire il file di codice Strings.
Sostituire il codice di questo file con il 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 progetti SharePoint in Visual Studio 2010.
Per creare l'interfaccia utente della procedura guidata
Nel progetto ItemTemplateWizard fare doppio clic sul file WizardWindow.xaml per aprire la finestra nella finestra di progettazione.
Nella visualizzazione XAML della finestra di progettazione sostituire il codice XAML corrente con quello riportato di seguito. 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
Dopo aver aggiunto questo codice, il progetto presenterà alcuni errori di compilazione. 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.10.0" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" Title="SharePoint Customization Wizard" Height="500" Width="700" ResizeMode="NoResize" Loaded="Window_Loaded" TextOptions.TextFormattingMode="Display"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="75*" /> <RowDefinition Height="364*" /> <RowDefinition Height="1*" /> <RowDefinition Height="60*" /> </Grid.RowDefinitions> <Grid Grid.Row="0" Name="headingGrid" Background="White"> <Label Grid.Row="0" Content="Configure the Custom Action" Name="pageHeaderLabel" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="18,0,0,0" FontWeight="ExtraBold" /> </Grid> <Grid Grid.Row="1" Name="mainGrid"> <Grid.ColumnDefinitions> <ColumnDefinition Width="20*" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="400*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Vertical"> <Label Margin="0,20,0,0" Content="Location:" Name="locationLabel" FontWeight="Bold" /> <RadioButton Content="_List Edit" Margin="5,0,0,0" Name="listEditRadioButton" Checked="listEditRadioButton_Checked" FontWeight="Normal" /> <RadioButton Content="_Standard Menu" Margin="5,5,0,0" Name="standardMenuRadioButton" Checked="standardMenuRadioButton_Checked" FontWeight="Normal" /> </StackPanel> <Label Grid.Row="1" Grid.Column="1" Margin="0,15,0,0" Content="_Group ID:" Name="groupIdLabel" FontWeight="Bold" Target="{Binding ElementName=idComboBox}" /> <ComboBox Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" Width="253" Name="idComboBox" IsEditable="False" IsSynchronizedWithCurrentItem="True" /> <Label Grid.Row="2" Grid.Column="1" Margin="0,15,0,0" Content="_Title:" Name="titleLabel" FontWeight="Bold" Target="{Binding ElementName=titleTextBox}" /> <TextBox Grid.Row="2" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" Name="titleTextBox" Width="410" Text="" /> <Label Grid.Row="3" Grid.Column="1" Margin="0,15,0,0" Content="_Description:" Name="descriptionLabel" FontWeight="Bold" Target="{Binding ElementName=descriptionTextBox}" /> <TextBox Grid.Row="3" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" Name="descriptionTextBox" Width="410" Text="" /> <Label Grid.Row="4" Grid.Column="1" Margin="0,15,0,0" Content="_URL:" Height="28" Name="urlLabel" FontWeight="Bold" Target="{Binding ElementName=urlTextBox}" /> <TextBox Grid.Row="4" Grid.Column="2" HorizontalAlignment="Left" Margin="0,15,0,0" Height="23" Name="urlTextBox" Width="410" Text="" /> </Grid> <Rectangle Grid.Row="2" Name="separatorRectangle" Fill="White" /> <StackPanel Grid.Row="3" Name="navigationPanel" Orientation="Horizontal"> <Button Content="_Finish" Margin="500,0,0,0" Height="25" Name="finishButton" Width="85" Click="finishButton_Click" IsDefault="True" /> <Button Content="Cancel" Margin="10,0,0,0" Height="25" Name="cancelButton" Width="85" IsCancel="True" /> </StackPanel> </Grid> </ui:DialogWindow>
Nota
La finestra creata in questo XAML è derivata dalla classe di base DialogWindow. Quando si aggiunge una finestra di dialogo WPF personalizzata a Visual Studio, si consiglia di derivare la finestra di dialogo da questa classe per far sì che lo stile sia coerente con le altre finestre di dialogo di Visual Studio ed evitare problemi che potrebbero altrimenti verificarsi con le finestre di dialogo modali. Per ulteriori informazioni, vedere How to: Create and Manage Dialog Boxes.
Se si sviluppa un progetto di Visual Basic, rimuovere lo spazio dei nomi ItemTemplateWizard dal nome della classe WizardWindow nell'attributo x:Class dell'elemento Window. Lo spazio dei nomi si trova nella prima riga del codice XAML. Al termine, la prima riga dovrebbe essere simile a quella seguente.
<Window x:Class="WizardWindow"
Aprire il file code-behind per il file WizardWindow.xaml.
Sostituire il codice di questo file con il 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.
Sostituire il codice di questo file con il 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
- Scegliere Compila soluzione dal menu Compila.
Associazione della procedura guidata al modello di elemento
Dopo avere implementato la procedura guidata, è necessario associarla al modello di elemento Azione personalizzata. A tale scopo, è necessario eseguire 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 fare clic con il pulsante destro del mouse sul nodo del progetto ItemTemplateWizard, quindi scegliere Proprietà.
Fare clic sulla scheda Firma.
Selezionare la casella di controllo Firma assembly.
Nell'elenco a discesa Scegli un file chiave con nome sicuro selezionare <Nuovo...>.
Nella finestra di dialogo Crea chiave con nome sicuro immettere un nome e deselezionare la casella di controllo Proteggi file di chiave con una password.
Fare clic su OK.
Scegliere Compila soluzione dal menu Compila.
Per ottenere il token di chiave pubblica per l'assembly della procedura guidata
Aprire una finestra Prompt dei comandi di Visual Studio.
Eseguire il comando seguente. Sostituire path to wizard assembly con il percorso completo all'assembly ItemTemplateWizard.dll compilato per il progetto ItemTemplateWizard nel computer di sviluppo.
sn.exe -T path to wizard assembly
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 durante la procedura seguente.
Per aggiungere un riferimento all'assembly della procedura guidata nel file con estensione vstemplate
In Esplora soluzioni espandere il nodo del progetto ItemTemplate e aprire il file ItemTemplate.vstemplate.
Alla fine del file, aggiungere l'elemento WizardExtension seguente tra i tag </TemplateContent> e </VSTemplate>. Sostituire il valore yourtoken dell'attributo PublicKeyToken con il token di chiave pubblica ottenuto nella procedura precedente.
<WizardExtension> <Assembly>ItemTemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=your token</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, definiti e inizializzati dal sistema del progetto di SharePoint. Per ulteriori informazioni, vedere Parametri sostituibili.
Per aggiungere parametri sostituibili al file Elements.xml
Aprire il file Elements.xml nel progetto ItemTemplate.
Sostituire il contenuto del file 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
Per distribuire la procedura guidata con il pacchetto VSIX che contiene l'elemento di progetto, aggiungere un riferimento al progetto di procedura guidata nel file source.extension.vsixmanifest nel progetto VSIX.
Per aggiungere la procedura guidata al pacchetto VSIX
In Esplora soluzioni fare doppio clic sul file source.extension.vsixmanifest nel progetto CustomActionProjectItem.
Visual Studio consente di aprire il file nell'editor del manifesto.
Nella sezione Contenuto dell'editor fare clic sul pulsante Aggiungi contenuto.
Nella finestra di dialogo Aggiungi contenuto selezionare Creazione guidata modelli nella casella di riepilogo Seleziona un tipo di contenuto.
In Selezionare un'origine fare clic sul pulsante di opzione Progetto e selezionare ItemTemplateWizard nella casella di riepilogo accanto.
Fare clic su OK.
Scegliere Compila soluzione dal menu Compila. Assicurarsi che la soluzione venga compilata correttamente.
Test della procedura guidata
È ora possibile eseguire il test della procedura guidata. Avviare innanzitutto il debug della soluzione CustomActionProjectItem nell'istanza sperimentale di Visual Studio. Testare 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 i privilegi di amministratore e aprire la soluzione CustomActionProjectItem.
Nel progetto ItemTemplateWizard aprire il file di codice CustomActionWizard e aggiungere un punto di interruzione alla riga di codice nel metodo RunStarted.
Scegliere Eccezioni dal menu Debug.
Nella finestra di dialogo Eccezioni verificare che le caselle di controllo Generata e Non gestita dall'utente relative a Eccezioni Common Language Runtime siano deselezionate.
Fare clic su OK.
Premere F5 per avviare il debug.
In Visual Studio i file di estensione vengono installati in %UserProfile%\Dati applicazione\Locale\Microsoft\VisualStudio\10.0Exp\Extensions\Custom Action Project Item\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 scegliere Nuovo dal menu File, quindi fare clic su Progetto.
Espandere Visual C# o Visual Basic (a seconda del linguaggio supportato dal modello di elemento), espandere SharePoint, quindi fare clic su 2010.
Nell'elenco dei modelli di progetto fare clic su Progetto vuoto.
Nella casella Nome digitare CustomActionWizardTest.
Fare clic su OK.
In Personalizzazione guidata SharePoint digitare l'URL del sito che si desidera utilizzare per il debug, quindi scegliere Fine.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto, scegliere Aggiungi, quindi fare clic su Nuovo elemento.
Nel nodo SharePoint della finestra di dialogo Aggiungi nuovo elemento fare clic sul nodo 2010.
Nell'elenco di elementi di progetto fare clic su Azione personalizzata, quindi su Aggiungi.
Verificare che il codice nell'altra istanza di Visual Studio venga interrotto in corrispondenza del punto di interruzione impostato precedentemente nel metodo RunStarted. Premere F5 per continuare il debug del progetto.
Nella procedura guidata selezionare le opzioni seguenti:
In Percorso fare clic su List Edit.
Per ID gruppo, fare clic su Comunicazioni.
Per Titolo digitare Centro per sviluppatori di SharePoint.
In Descrizione digitare Apre il sito Web del Centro per sviluppatori di SharePoint.
Per URL digitare https://msdn.microsoft.com/sharepoint/default.aspx.
Fare clic su Fine.
Visual Studio consente di aggiungere un nuovo elemento denominato CustomAction1 al progetto e di 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 premere F5. L'azione personalizzata viene assemblata e distribuita al sito di SharePoint specificato dalla proprietà URL sito del progetto. Nel browser viene visualizzata la pagina predefinita di questo sito.
Nota
Se viene visualizzata la finestra di dialogo Debug degli script disabilitato, fare clic su Sì per continuare il debug del progetto.
Nell'area Avvio veloce fare clic su Attività.
Sulla barra multifunzione fare clic sulla scheda Elenco.
Nel gruppo Impostazioni fare clic su Impostazioni elenco.
Sotto l'intestazione Comunicazioni nella parte superiore della pagina verificare che venga visualizzato un collegamento con il testo SharePoint Developer Center.
Fare clic sul collegamento SharePoint Developer Center. Verificare che nel browser venga aperto il sito Web https://msdn.microsoft.com/sharepoint/default.aspx.
Chiudere il browser Web.
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
Scegliere Gestione estensioni dal menu Strumenti nell'istanza sperimentale di Visual Studio.
Viene aperta la finestra di dialogo Gestione estensioni.
Nell'elenco di estensioni fare clic su Custom Action Project Item, quindi su Disinstalla.
Nella finestra di dialogo visualizzata fare clic su Sì per confermare che si desidera disinstallare l'estensione.
Fare clic su Riavvia per completare la disinstallazione.
Chiudere entrambe le istanze di Visual Studio, ovvero quella sperimentale e l'istanza in cui è aperta la soluzione CustomActionProjectItem.
Vedere anche
Attività
Procedura: utilizzare procedure guidate con modelli di progetto
Riferimenti
Riferimenti allo schema dei modelli di Visual Studio
Altre risorse
Definizione di tipi di elementi di progetto SharePoint
Creazione di modelli di elemento e di modelli di progetto per gli elementi di progetto SharePoint