Como: Adicionar uma propriedade para um tipo de Item de projeto do SharePoint personalizado

Quando você define um tipo de item de projeto personalizado do SharePoint, você pode adicionar uma propriedade para o item de projeto. A propriedade aparece na Propriedades janela quando o item de projeto é selecionado na Solution Explorer.

As seguintes etapas assumem que você já tenha definido o seu próprio tipo de item de projeto do SharePoint. Para obter mais informações, consulte Como: Definir um tipo de Item de projeto do SharePoint.

Para adicionar uma propriedade a uma definição de um tipo de item de projeto

  1. Defina uma classe com uma propriedade pública que representa a propriedade que você está adicionando ao tipo de item de projeto personalizado. Se você quiser adicionar várias propriedades para um tipo de item de projeto personalizado, você pode definir todas as propriedades na mesma classe ou classes diferentes.

  2. No InitializeType método de seu ISharePointProjectItemTypeProvider implementação, a alça a ProjectItemPropertiesRequested evento da projectItemTypeDefinition parâmetro.

  3. No manipulador de eventos para o ProjectItemPropertiesRequested evento, adicione uma instância de sua classe de propriedades personalizadas para o PropertySources a coleção do parâmetro de argumentos de evento.

Exemplo

O exemplo de código a seguir demonstra como adicionar uma propriedade denominada A propriedade de exemplo para um personalizado item tipo de projeto.

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

Noções básicas sobre o código.

Para garantir que a mesma instância da CustomProperties classe é usada toda vez que o ProjectItemPropertiesRequested evento ocorrer, o exemplo de código salvará o objeto de propriedades para o Annotations a propriedade de tempo de item, o primeiro projeto esse evento ocorre. O código recupera esse objeto sempre que esse evento ocorrer novamente. Para obter mais informações sobre como usar o Annotations propriedade para salvar dados com itens de projeto, consulte A associação de dados personalizados com extensões de ferramentas do SharePoint.

Para manter as alterações ao valor da propriedade, o set acessador para ExampleProperty salva o novo valor para o ExtensionData propriedade da ISharePointProjectItem objeto a propriedade está associada. Para obter mais informações sobre como usar o ExtensionData propriedade para persistir dados com itens de projeto, consulte Salvar dados em extensões do sistema de projeto do SharePoint.

Especificando o comportamento de propriedades personalizadas

Você pode definir como uma propriedade personalizada é exibida e o comportamento de Propriedades janela aplicando atributos da System.ComponentModel espaço para nome para a definição da propriedade. Os seguintes atributos são úteis para muitos cenários:

  • DisplayNameAttribute: Especifica o nome da propriedade que consta do Propriedades janela.

  • DescriptionAttribute: Especifica a seqüência de caracteres de descrição que aparece na parte inferior da Propriedades janela quando a propriedade for selecionada.

  • DefaultValueAttribute: Especifica o valor padrão da propriedade.

  • TypeConverterAttribute: Especifica uma conversão personalizada entre a seqüência de caracteres que é exibida na Propriedades janela e um valor de propriedade de cadeia de caracteres não.

  • EditorAttribute: Especifica um editor personalizado para usar para modificar a propriedade.

Compilando o código

Esses exemplos de código requerem um projeto de biblioteca de classe com referências aos assemblies seguintes:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

O Item de projeto de implantação

Para permitir que outros desenvolvedores a usar o item de projeto, crie um modelo de projeto ou de um modelo de item de projeto. Para obter mais informações, consulte Criando modelos de Item e projeto para os itens de projeto do SharePoint.

Para implantar o item de projeto, criar um Visual Studio pacote de extensão (VSIX) para o assembly, o modelo e quaisquer outros arquivos que você deseja distribuir com o item de projeto. Para obter mais informações, consulte Implantar extensões para as ferramentas do SharePoint em Visual Studio.

Consulte também

Tarefas

Como: Definir um tipo de Item de projeto do SharePoint

Outros recursos

Como: Adicionar um Item de Menu de atalho para um tipo de Item de projeto do SharePoint personalizado

Definindo tipos de Item de projeto do SharePoint personalizados