Sdílet prostřednictvím


Postupy: Přidání vlastnosti do vlastního typu položky projektu SharePoint

Při definování vlastního typu položky projektu služby SharePoint můžete přidat vlastnost do položku projektu.Vlastnost se zobrazí v okně Vlastnosti při výběru položky projektu v Průzkumníku řešení.

Následující postup předpokládá, že máte již definován vlastní typ položky projektu služby SharePoint.Další informace naleznete v tématu Postupy: Definování typu položky projektu SharePoint.

Chcete-li přidat vlastnost do definice vlastního typu položky projektu SharePoint

  1. Definujte třídu s veřejnou vlastností, která představuje vlastnost, kterou přidáváte do vlastního typu položky projektu.Pokud chcete přidat více vlastností vlastního typu položky projektu, můžete definovat všechny vlastnosti ve stejné třídě nebo v různých třídách.

  2. V metodě InitializeType vaší implementace ISharePointProjectItemTypeProvider zpracujte událost ProjectItemPropertiesRequested parametru projectItemTypeDefinition.

  3. V obslužné rutině pro událost ProjectItemPropertiesRequested přidejte instanci třídy vašich vlastních vlastností do kolekce PropertySources parametru argumentů události.

Příklad

Následující příklad kódu ukazuje, jak lze přidat vlastnost s názvem Příklad vlastnosti do vlastního typu položky projektu.

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

Principy kódu

K zajištění toho, aby byla stejná instance třídy CustomProperties použita pokaždé, když dojde k události ProjectItemPropertiesRequested, ukázkový kód uloží objekt vlastností do vlastnosti Annotations položky projektu, když poprvé dojde k této události.Kód načte tento objekt kdykoli znovu dojde k této události.Další informace o použití vlastnosti Annotations pro uložení dat s položkami projektu naleznete v tématu Přidružení vlastních dat k rozšíření nástrojů služby SharePoint.

Pro zachování změn hodnoty vlastnosti přistupujícího objektu set pro ExampleProperty uloží nové hodnoty do vlastnosti ExtensionData objektu ISharePointProjectItem, který je s vlastností přidružen.Další informace o použití vlastnosti ExtensionData pro uložení dat s položkami projektu naleznete v tématu Uložení dat do rozšíření systému projektu služby SharePoint.

Určení chování vlastních vlastností

Můžete definovat, jak se zobrazí vlastní vlastnosti a chovají v okně Vlastnosti použitím atributů z oboru názvů System.ComponentModel pro definování vlastnosti.Následující atributy jsou užitečné v mnoha scénářích:

  • DisplayNameAttribute: Určuje název vlastnosti, která se zobrazuje v okně Vlastnosti.

  • DescriptionAttribute: Určuje řetězec popisu, který se zobrazí v dolní části okna Vlastnosti v případě, že je vlastnost vybrána.

  • DefaultValueAttribute: Určuje výchozí hodnotu této vlastnosti.

  • TypeConverterAttribute: Určuje vlastní převod mezi řetězcem, který se zobrazí v okně Vlastnosti a ne-řetězcové hodnotě vlastnosti.

  • EditorAttribute: Určuje vlastní editor použitý pro změny vlastnosti.

Probíhá kompilace kódu

Tyto příklady kódu vyžadují projekt knihovny tříd s odkazy na následující sestavení:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Nasazení položky projektu

Chcete-li povolit ostatním vývojářům použít vaše položky projektu, vytvořte šablonu projektu nebo šablonu položky projektu.Další informace naleznete v tématu Vytváření šablon položek a projektů pro položky projektu služby SharePoint.

Chcete-li nasadit položku projektu, vytvořte balíček Visual Studio rozšíření (VSIX) pro sestavení, šablonu a všechny další soubory, které chcete distribuovat s položkou projektu.Další informace naleznete v tématu Nasazování rozšíření pro nástroje služby SharePoint v aplikaci Visual Studio.

Viz také

Koncepty

Postupy: Definování typu položky projektu SharePoint

Postupy: Přidání položky místní nabídky do vlastního typu položky projektu služby SharePoint

Definování vlastních typů položek projektu služby SharePoint