Freigeben über


Gewusst wie: Hinzufügen einer Eigenschaft zu einer SharePoint-Projektelementerweiterung

Sie können eine Projektelementerweiterung verwenden, wenn Sie einem bereits in Visual Studio installierten SharePoint-Projektelement eine Eigenschaft hinzufügen möchten. Diese Eigenschaft wird im Eigenschaftenfenster angezeigt, wenn Sie das Projektelement im Projektmappen-Explorer auswählen.

Im Folgenden wird angenommen, dass bereits eine Projektelementerweiterung erstellt wurde. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer SharePoint-Projektelementerweiterung.

So fügen Sie einer Projektelementerweiterung eine Eigenschaft hinzu

  1. Definieren Sie eine Klasse mit einer öffentlichen Eigenschaft, die die dem Projektelementtyp hinzuzufügende Eigenschaft darstellt. Wenn Sie einem Projektelementtyp mehrere Eigenschaften hinzufügen möchten, können Sie alle Eigenschaften in der gleichen Klasse oder in unterschiedlichen Klassen definieren.

  2. Behandeln Sie in der Initialize-Methode der ISharePointProjectItemTypeExtension-Implementierung das ProjectItemPropertiesRequested-Ereignis des projectItemType-Parameters.

  3. Fügen Sie im Ereignishandler für das ProjectItemPropertiesRequested-Ereignis der PropertySources-Auflistung des Ereignisargumentparameters eine Instanz der Eigenschaftenklasse hinzu.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie Sie einem Projektelement vom Typ "Ereignisempfänger" eine Eigenschaft mit dem Namen Example Property hinzufügen.

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

Namespace Contoso.Examples.ProjectItemExtensionWithProperty

    <Export(GetType(ISharePointProjectItemTypeExtension))> _
    <SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.EventHandler")> _
    Friend Class ExampleProjectItemExtensionWithProperty
        Implements ISharePointProjectItemTypeExtension

        Private Sub Initialize(ByVal projectItemType As ISharePointProjectItemType) _
            Implements ISharePointProjectItemTypeExtension.Initialize
            AddHandler projectItemType.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.ProjectItemExtensionWithProperty
{
    [Export(typeof(ISharePointProjectItemTypeExtension))]
    [SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.EventHandler")]
    internal class ExampleProjectItemExtensionWithProperty : ISharePointProjectItemTypeExtension
    {
        public void Initialize(ISharePointProjectItemType projectItemType)
        {
            projectItemType.ProjectItemPropertiesRequested += 
                projectItemType_ProjectItemPropertiesRequested;
        }

        void projectItemType_ProjectItemPropertiesRequested(object sender, 
            SharePointProjectItemPropertiesRequestedEventArgs e)
        {
            CustomProperties propertyObject;

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

            e.PropertySources.Add(propertyObject);
        }
    }

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

Grundlegendes zum Code

Damit stets die gleiche Instanz der CustomProperties-Klasse beim ProjectItemPropertiesRequested-Ereignis verwendet wird, wird im folgenden Codebeispiel das Eigenschaftenobjekt in der Annotations-Eigenschaft des Projektelements gespeichert, sobald das Ereignis zum ersten Mal auftritt. Vom Code wird dann jedes Mal, wenn das Ereignis auftritt, dieses Objekt abgerufen. Weitere Informationen zur Verwendung der Annotations-Eigenschaft zum Zuordnen von Daten zu Projektelementen finden Sie unter Zuordnen von benutzerdefinierten Daten zu SharePoint-Tools-Erweiterungen.

Um die Änderungen des Eigenschaftswerts permanent zu speichern, speichert der set-Accessor für ExampleProperty den neuen Wert in der ExtensionData-Eigenschaft des ISharePointProjectItem-Objekts, dem die Eigenschaft zugewiesen ist. Weitere Informationen zur Verwendung der ExtensionData-Eigenschaft zum Speichern von Daten mit Projektelementen finden Sie unter Speichern von Daten in Erweiterungen des SharePoint-Projektsystems.

Angeben des Verhaltens benutzerdefinierter Eigenschaften

Sie können definieren, wie eine benutzerdefinierte Eigenschaft angezeigt wird und sich im Eigenschaftenfenster verhält, indem Sie Attribute aus dem System.ComponentModel-Namespace auf die Eigenschaftendefinition anwenden. Die folgenden Attribute sind in vielen Szenarien hilfreich:

  • DisplayNameAttribute: Gibt den Namen der Eigenschaft an, die im Eigenschaftenfenster angezeigt wird.

  • DescriptionAttribute: Gibt die Beschreibungszeichenfolge an, die bei Auswahl der Eigenschaft unten im Eigenschaftenfenster angezeigt wird.

  • DefaultValueAttribute: Gibt den Standardwert für die Eigenschaft an.

  • TypeConverterAttribute: Gibt eine benutzerdefinierte Konvertierung zwischen der Zeichenfolge, die im Eigenschaftenfenster angezeigt wird, und einem Eigenschaftswert an, der keine Zeichenfolge ist.

  • EditorAttribute: Gibt einen benutzerdefinierten Editor zum Ändern der Eigenschaft an.

Kompilieren des Codes

Für diese Beispiele ist ein Klassenbibliotheksprojekt mit Verweisen auf die folgenden Assemblys erforderlich:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Bereitstellen der Erweiterung

Erstellen Sie ein Visual Studio-Erweiterungspaket (VSIX) für die Assembly und alle weiteren Dateien, die Sie mit der Erweiterung verteilen möchten, um die Erweiterung bereitzustellen. Weitere Informationen finden Sie unter Bereitstellen von Erweiterungen für die SharePoint-Tools in Visual Studio.

Siehe auch

Aufgaben

Gewusst wie: Erstellen einer SharePoint-Projektelementerweiterung

Exemplarische Vorgehensweise: Erweitern eines SharePoint-Elementtyps

Weitere Ressourcen

Gewusst wie: Hinzufügen eines Kontextmenüelements zu einer SharePoint-Projektelementerweiterung

Erweitern von SharePoint-Projektelementen