Comment : ajouter une propriété à un type d'élément de projet SharePoint personnaliséHow to: Add a Property to a Custom SharePoint Project Item Type

Lorsque vous définissez un type d’élément de projet SharePoint personnalisé, vous pouvez ajouter une propriété à l’élément de projet.When you define a custom SharePoint project item type, you can add a property to the project item. La propriété apparaît dans le propriétés fenêtre lorsque l’élément de projet est sélectionné dans l’Explorateur de solutions.The property appears in the Properties window when the project item is selected in Solution Explorer.

Les étapes suivantes supposent que vous avez déjà défini votre propre type d’élément de projet SharePoint.The following steps assume that you have already defined your own SharePoint project item type. Pour plus d’informations, consultez Comment : définir un Type d’élément de projet SharePoint.For more information, see How to: Define a SharePoint Project Item Type.

Pour ajouter une propriété à une définition d’un type d’élément de projetTo add a property to a definition of a project item type

  1. Définissez une classe avec une propriété publique qui représente la propriété que vous ajoutez au type d’élément de projet personnalisé.Define a class with a public property that represents the property you are adding to the custom project item type. Si vous souhaitez ajouter plusieurs propriétés à un type d’élément de projet personnalisé, vous pouvez définir toutes les propriétés dans la même classe ou dans différentes classes.If you want to add multiple properties to a custom project item type, you can define all the properties in the same class or in different classes.

  2. Dans le InitializeType méthode de votre ISharePointProjectItemTypeProvider implémentation, gérez le ProjectItemPropertiesRequested l’événement de la projectItemTypeDefinition paramètre.In the InitializeType method of your ISharePointProjectItemTypeProvider implementation, handle the ProjectItemPropertiesRequested event of the projectItemTypeDefinition parameter.

  3. Dans le Gestionnaire d’événements pour le ProjectItemPropertiesRequested événement, ajoutez une instance de votre classe de propriétés personnalisées pour le PropertySources collection du paramètre d’arguments de l’événement.In the event handler for the ProjectItemPropertiesRequested event, add an instance of your custom properties class to the PropertySources collection of the event arguments parameter.

ExempleExample

L’exemple de code suivant montre comment ajouter une propriété nommée exemple de propriété personnalisée item type de projet.The following code example demonstrates how to add a property named Example Property to a custom project item type.

Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports Microsoft.VisualStudio.SharePoint

Namespace Contoso.Examples.ProjectItemTypeWithProperty

    <Export(GetType(ISharePointProjectItemTypeProvider))> _
    <SharePointProjectItemType("Contoso.ExampleProjectItemType")> _
    <SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")> _
    Friend Class ExampleProjectItemTypeWithProperty
        Implements ISharePointProjectItemTypeProvider

        Private Sub InitializeType(ByVal projectItemTypeDefinition As ISharePointProjectItemTypeDefinition) _
            Implements ISharePointProjectItemTypeProvider.InitializeType
            projectItemTypeDefinition.Name = "ExampleProjectItemType"
            projectItemTypeDefinition.SupportedDeploymentScopes = _
                SupportedDeploymentScopes.Site Or SupportedDeploymentScopes.Web
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All

            AddHandler projectItemTypeDefinition.ProjectItemPropertiesRequested, AddressOf ProjectItemPropertiesRequested
        End Sub

        Private Sub ProjectItemPropertiesRequested(ByVal Sender As Object,
            ByVal e As SharePointProjectItemPropertiesRequestedEventArgs)
            Dim propertyObject As CustomProperties = Nothing

            ' If the properties object already exists, get it from the project item's annotations.
            If False = e.ProjectItem.Annotations.TryGetValue(propertyObject) Then
                ' Otherwise, create a new properties object and add it to the annotations.
                propertyObject = New CustomProperties(e.ProjectItem)
                e.ProjectItem.Annotations.Add(propertyObject)
            End If
            e.PropertySources.Add(propertyObject)
        End Sub
    End Class

    Friend Class CustomProperties
        Private projectItem As ISharePointProjectItem

        Friend Sub New(ByVal projectItem As ISharePointProjectItem)
            Me.projectItem = projectItem
        End Sub

        Private Const TestPropertyId As String = "Contoso.ExampleProperty"
        Private Const PropertyDefaultValue As String = "This is an example property."

        <DisplayName("Example Property")> _
        <DescriptionAttribute("This is an example property for project items.")> _
        <DefaultValue(PropertyDefaultValue)> _
        Public Property ExampleProperty As String
            Get
                Dim propertyValue As String = Nothing

                ' Get the current property value if it already exists; otherwise, return a default value.
                If False = projectItem.ExtensionData.TryGetValue(TestPropertyId, propertyValue) Then
                    propertyValue = PropertyDefaultValue
                End If
                Return propertyValue
            End Get
            Set(ByVal value As String)
                If value <> PropertyDefaultValue Then
                    ' Store the property value in the ExtensionData property of the project item.
                    ' Data in the ExtensionData property persists when the project is closed.
                    projectItem.ExtensionData(TestPropertyId) = value
                Else
                    ' Do not save the default value.
                    projectItem.ExtensionData.Remove(TestPropertyId)
                End If
            End Set
        End Property
    End Class
End Namespace
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.SharePoint;

namespace Contoso.Examples.ProjectItemTypeWithProperty
{
    [Export(typeof(ISharePointProjectItemTypeProvider))]
    [SharePointProjectItemType("Contoso.ExampleProjectItemType")]
    [SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")]
    internal class ExampleProjectItemTypeWithProperty : ISharePointProjectItemTypeProvider
    {
        public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition)
        {
            projectItemTypeDefinition.Name = "ExampleProjectItemType";
            projectItemTypeDefinition.SupportedDeploymentScopes =
                SupportedDeploymentScopes.Site | SupportedDeploymentScopes.Web;
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All;

            projectItemTypeDefinition.ProjectItemPropertiesRequested += 
                projectItemTypeDefinition_ProjectItemPropertiesRequested;
        }

        void projectItemTypeDefinition_ProjectItemPropertiesRequested(object sender, 
            SharePointProjectItemPropertiesRequestedEventArgs e)
        {
            CustomProperties property;

            // If the properties object already exists, get it from the project item's annotations.
            if (!e.ProjectItem.Annotations.TryGetValue(out property))
            {
                // Otherwise, create a new properties object and add it to the annotations.
                property = new CustomProperties(e.ProjectItem);
                e.ProjectItem.Annotations.Add(property);
            }

            e.PropertySources.Add(property);
        }
    }

    internal class CustomProperties
    {
        private ISharePointProjectItem projectItem;

        internal CustomProperties(ISharePointProjectItem projectItem)
        {
            this.projectItem = projectItem;
        }

        private const string PropertyId = "Contoso.ExampleProperty";
        private const string PropertyDefaultValue = "This is an example property.";

        [DisplayName("Example Property")]
        [DescriptionAttribute("This is an example property for project items.")]
        [DefaultValue(PropertyDefaultValue)]
        public string ExampleProperty
        {
            get
            {
                string propertyValue;

                // Get the current property value if it already exists; otherwise, return a default value.
                if (!projectItem.ExtensionData.TryGetValue(PropertyId, out propertyValue))
                {
                    propertyValue = PropertyDefaultValue;
                }
                return propertyValue;
            }
            set
            {
                if (value != PropertyDefaultValue)
                {
                    // Store the property value in the ExtensionData property of the project item. 
                    // Data in the ExtensionData property persists when the project is closed.
                    projectItem.ExtensionData[PropertyId] = value;
                }
                else
                {
                    // Do not save the default value.
                    projectItem.ExtensionData.Remove(PropertyId);
                }
            }
        }
    }
}

Fonctionnement du CodeUnderstanding the Code

Pour vous assurer que la même instance de la CustomProperties classe est utilisée chaque fois que le ProjectItemPropertiesRequested événement se produit, l’exemple de code enregistre l’objet de propriétés dans le Annotations propriété de l’heure de l’élément du premier projet cet événement se produit.To ensure that the same instance of the CustomProperties class is used each time the ProjectItemPropertiesRequested event occurs, the code example saves the properties object to the Annotations property of the project item the first time this event occurs. Le code récupère cet objet chaque fois que cet événement se produit à nouveau.The code retrieves this object whenever this event occurs again. Pour plus d’informations sur l’utilisation de la Annotations propriété pour enregistrer les données avec les éléments de projet, consultez associer des données personnalisées à des Extensions d’outils SharePoint.For more information about using the Annotations property to save data with project items, see Associating Custom Data with SharePoint Tools Extensions.

Pour conserver les modifications apportées à la valeur de propriété, le définir accesseur pour ExampleProperty enregistre la nouvelle valeur à la ExtensionData propriété de la ISharePointProjectItem objet associé à la propriété.To persist changes to the property value, the set accessor for ExampleProperty saves the new value to the ExtensionData property of the ISharePointProjectItem object that the property is associated with. Pour plus d’informations sur l’utilisation de la ExtensionData propriété pour rendre persistantes les données avec les éléments de projet, consultez l’enregistrement des données dans les Extensions du système de projet SharePoint.For more information about using the ExtensionData property to persist data with project items, see Saving Data in Extensions of the SharePoint Project System.

Spécifier le comportement des propriétés personnaliséesSpecifying the Behavior of Custom Properties

Vous pouvez définir la façon dont une propriété personnalisée apparaît et se comporte de la propriétés fenêtre en appliquant des attributs à partir de la System.ComponentModel la définition de propriété de l’espace de noms.You can define how a custom property appears and behaves in the Properties window by applying attributes from the System.ComponentModel namespace to the property definition. Les attributs suivants sont utiles dans de nombreux scénarios :The following attributes are useful in many scenarios:

  • DisplayNameAttribute: Spécifie le nom de la propriété qui s’affiche dans le propriétés fenêtre.DisplayNameAttribute: Specifies the name of the property that appears in the Properties window.

  • DescriptionAttribute: Spécifie la chaîne de description qui apparaît au bas de la propriétés fenêtre lorsque la propriété est sélectionnée.DescriptionAttribute: Specifies the description string that appears in the bottom of the Properties window when the property is selected.

  • DefaultValueAttribute: Spécifie la valeur par défaut de la propriété.DefaultValueAttribute: Specifies the default value of the property.

  • TypeConverterAttribute: Spécifie une conversion personnalisée entre la chaîne qui est affichée dans le propriétés fenêtre et une valeur de propriété de type non chaîne.TypeConverterAttribute: Specifies a custom conversion between the string that is displayed in the Properties window and a non-string property value.

  • EditorAttribute: Spécifie un éditeur personnalisé à utiliser pour modifier la propriété.EditorAttribute: Specifies a custom editor to use to modify the property.

Compilation du codeCompiling the Code

Ces exemples de code requièrent un projet de bibliothèque de classes avec des références aux assemblys suivants :These code examples require a class library project with references to the following assemblies:

  • Microsoft.VisualStudio.SharePointMicrosoft.VisualStudio.SharePoint

  • System.ComponentModel.CompositionSystem.ComponentModel.Composition

Déploiement de l’élément de projetDeploying the Project Item

Pour activer les autres développeurs d’utiliser votre élément de projet, créer un modèle de projet ou un modèle d’élément de projet.To enable other developers to use your project item, create a project template or a project item template. Pour plus d’informations, consultez création de modèles d’élément et les modèles de projet pour les éléments de projet SharePoint.For more information, see Creating Item Templates and Project Templates for SharePoint Project Items.

Pour déployer l’élément de projet, créez un Visual StudioVisual Studio package d’extension (VSIX) pour l’assembly, le modèle et tous les autres fichiers que vous voulez distribuer avec l’élément de projet.To deploy the project item, create a Visual StudioVisual Studio extension (VSIX) package for the assembly, the template, and any other files that you want to distribute with the project item. Pour plus d’informations, consultez déploiement d’Extensions pour les outils SharePoint dans Visual Studio.For more information, see Deploying Extensions for the SharePoint Tools in Visual Studio.

Voir aussiSee Also

Comment : définir un Type d’élément de projet SharePoint How to: Define a SharePoint Project Item Type
Comment : ajouter un élément de Menu contextuel à un Type d’élément de projet SharePoint personnalisé How to: Add a Shortcut Menu Item to a Custom SharePoint Project Item Type
Définition de types d’éléments de projet SharePoint personnalisésDefining Custom SharePoint Project Item Types