Compartir a través de


Guardar datos asociados en extensiones del sistema de proyectos de SharePoint

Al extender el sistema de proyectos de SharePoint, puede guardar los datos de cadena que persisten después de cerrar un proyecto de SharePoint.Los datos están normalmente asociados a un elemento de proyecto determinado o con el propio proyecto.

Si tiene datos que no es necesario conservar, puede agregarlos a cualquier objeto del modelo de objetos de herramientas de SharePoint que implemente la interfaz IAnnotatedObject.Para obtener más información, vea Asociar datos personalizados con extensiones de herramientas de SharePoint.

Guardar los datos asociados a un elemento de proyecto

Cuando tiene datos asociados a un elemento de proyecto de SharePoint determinado, como el valor de una propiedad que se agrega a un elemento de proyecto, puede guardarlos en el archivo .spdata del elemento de proyecto.Para hacerlo, use la propiedad ExtensionData de un objeto ISharePointProjectItem.Los datos que agrega a esta propiedad se guardan en el elemento ExtensionData en el archivo .spdata del elemento de proyecto.Para obtener más información, vea ExtensionData (Elemento).

En el siguiente ejemplo de código se muestra cómo usar la propiedad ExtensionData para guardar el valor de una propiedad de cadena que se define en un tipo de elemento de proyecto de SharePoint personalizado.Para consultar este ejemplo en el contexto de un ejemplo mayor, vea Cómo: Agregar una propiedad a un tipo de elemento de proyecto personalizado de SharePoint.

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

Guardar los datos asociados a un proyecto

Cuando tenga datos de nivel de proyecto, como el valor de una propiedad que se agrega a los proyectos de SharePoint, puede guardarlos en el archivo de proyecto (archivo .csproj o .vbproj) o en el archivo de opciones de usuario del proyecto (el archivo .csproj.user o .vbproj.user).El archivo que elija para guardar los datos depende de cómo desea que se usen:

  • Si desea que los datos estén disponibles para todos los desarrolladores que abran el proyecto de SharePoint, guárdelos en el archivo de proyecto.Este archivo se protege siempre para las bases de datos de control de código fuente, por lo que los datos de este archivo están disponibles para otros desarrolladores que desprotejan el proyecto.

  • Si desea que los datos estén disponibles únicamente para el programador actual que tiene abierto el proyecto de SharePoint en Visual Studio, guárdelos en el archivo de opciones de usuario del proyecto.Este archivo no se suele proteger para las bases de datos de control de código fuente, por lo que los datos de este archivo no están disponibles para otros desarrolladores que desprotejan el proyecto.

Ff406949.collapse_all(es-es,VS.110).gifGuardar datos en el archivo de proyecto

Para guardar los datos en el archivo de proyecto, convierta un objeto ISharePointProject en un objeto IVsBuildPropertyStorage y, a continuación, use el método IVsBuildPropertyStorage.SetPropertyValue.En el ejemplo de código siguiente se muestra cómo usar este método para guardar el valor de una propiedad de proyecto en el archivo de proyecto.Para consultar este ejemplo en el contexto de un ejemplo mayor, vea Cómo: Agregar una propiedad a proyectos de SharePoint.

Private sharePointProject As ISharePointProject
Private projectStorage As IVsBuildPropertyStorage
Private Const ProjectFilePropertyId As String = "ContosoCustomProjectFileProperty"
Private Const ProjectFilePropertyDefaultValue As String = "Default"

Public Sub New(ByVal myProject As ISharePointProject)
    sharePointProject = myProject
    projectStorage = sharePointProject.ProjectService.Convert(Of ISharePointProject, IVsBuildPropertyStorage)(sharePointProject)
End Sub

<DisplayName("Custom Project File Property")> _
<DescriptionAttribute("This property is saved to the .csproj/.vbproj file.")> _
<DefaultValue(ProjectFilePropertyDefaultValue)> _
Public Property CustomProjectFileProperty As String
    Get
        Dim propertyValue As String = String.Empty
        Dim hr As Integer = projectStorage.GetPropertyValue(ProjectFilePropertyId, String.Empty, _
            CUInt(_PersistStorageType.PST_PROJECT_FILE), propertyValue)

        ' Try to get the current value from the project file; if it does not yet exist, return a default value.
        If Not ErrorHandler.Succeeded(hr) Or String.IsNullOrEmpty(propertyValue) Then
            propertyValue = ProjectFilePropertyDefaultValue
        End If
        Return propertyValue
    End Get
    Set(ByVal value As String)
        ' Do not save the default value.
        If value <> ProjectFilePropertyDefaultValue Then
            projectStorage.SetPropertyValue(ProjectFilePropertyId, String.Empty, _
                CUInt(_PersistStorageType.PST_PROJECT_FILE), value)
        End If
    End Set
End Property
private ISharePointProject sharePointProject;
private IVsBuildPropertyStorage projectStorage;
private const string ProjectFilePropertyId = "ContosoCustomProjectFileProperty";
private const string ProjectFilePropertyDefaultValue = "Default";

public CustomProjectProperties(ISharePointProject myProject)
{
    sharePointProject = myProject;
    projectStorage = sharePointProject.ProjectService.Convert<ISharePointProject, IVsBuildPropertyStorage>(sharePointProject);
}

[DisplayName("Custom Project File Property")]
[DescriptionAttribute("This property is saved to the .csproj/.vbproj file.")]
[DefaultValue(ProjectFilePropertyDefaultValue)]
public string CustomProjectFileProperty
{
    get
    {
        string propertyValue;
        int hr = projectStorage.GetPropertyValue(ProjectFilePropertyId, string.Empty, 
            (uint)_PersistStorageType.PST_PROJECT_FILE, out propertyValue);

        // Try to get the current value from the project file; if it does not yet exist, return a default value.
        if (!ErrorHandler.Succeeded(hr) || String.IsNullOrEmpty(propertyValue))
        {
            propertyValue = ProjectFilePropertyDefaultValue;
        }

        return propertyValue;
    }

    set
    {
        // Do not save the default value.
        if (value != ProjectFilePropertyDefaultValue)
        {
            projectStorage.SetPropertyValue(ProjectFilePropertyId, string.Empty, 
                (uint)_PersistStorageType.PST_PROJECT_FILE, value);
        }
    }
}

Para obtener más información sobre cómo convertir los objetos ISharePointProject en otros tipos del modelo de objetos de automatización de Visual Studio o del modelo de objetos de integración, vea Convertir los tipos de sistema de proyectos de SharePoint en otros tipos de proyecto de Visual Studio.

Ff406949.collapse_all(es-es,VS.110).gifGuardar datos en el archivo de opciones de usuario del proyecto

Para guardar los datos en el archivo de opciones de usuario del proyecto, use la propiedad ProjectUserFileData de un objeto ISharePointProject.En el ejemplo de código siguiente se muestra cómo usar esta propiedad para guardar el valor de una propiedad de proyecto en el archivo de opciones de usuario del proyecto.Para consultar este ejemplo en el contexto de un ejemplo mayor, vea Cómo: Agregar una propiedad a proyectos de SharePoint.

Private Const UserFilePropertyId As String = "ContosoCustomUserFileProperty"
Private Const UserFilePropertyDefaultValue As String = "Default"

<DisplayName("Custom Project User File Property")> _
<DescriptionAttribute("This property is saved to the .user file.")> _
<DefaultValue(UserFilePropertyDefaultValue)> _
Public Property CustomUserFileProperty As String
    Get
        Dim propertyValue As String = String.Empty
        ' Try to get the current value from the .user file; if it does not yet exist, return a default value.
        If Not sharePointProject.ProjectUserFileData.TryGetValue(UserFilePropertyId, propertyValue) Then
            propertyValue = UserFilePropertyDefaultValue
        End If
        Return propertyValue
    End Get
    Set(ByVal value As String)
        ' Do not save the default value.
        If value <> UserFilePropertyDefaultValue Then
            sharePointProject.ProjectUserFileData(UserFilePropertyId) = value
        End If
    End Set
End Property
private const string UserFilePropertyId = "ContosoCustomUserFileProperty";
private const string UserFilePropertyDefaultValue = "Default";

[DisplayName("Custom Project User File Property")]
[DescriptionAttribute("This property is saved to the .user file.")]
[DefaultValue(UserFilePropertyDefaultValue)]
public string CustomUserFileProperty
{
    get
    {
        string propertyValue = string.Empty;

        // Try to get the current value from the .user file; if it does not yet exist, return a default value.
        if (!sharePointProject.ProjectUserFileData.TryGetValue(UserFilePropertyId, out propertyValue))
        {
            propertyValue = UserFilePropertyDefaultValue; 
        }

        return propertyValue; 
    }

    set
    {
        // Do not save the default value.
        if (value != UserFilePropertyDefaultValue)
        {
            sharePointProject.ProjectUserFileData[UserFilePropertyId] = value;
        }
    }
}                

Vea también

Conceptos

Extender el sistema de proyectos de SharePoint

Asociar datos personalizados con extensiones de herramientas de SharePoint

Convertir los tipos de sistema de proyectos de SharePoint en otros tipos de proyecto de Visual Studio