Поделиться через


Сохранение данных в расширениях системы проектов SharePoint

При расширении системы проектов SharePoint можно сохранить строковые данные, которые должны оставаться неизменными после закрытия проекта SharePoint.Обычно такие данные связаны с определенным элементом проекта или с самим проектом.

Если имеются данные, сохранять которые не требуется, можно добавить их в любой объект объектной модели средств SharePoint, в котором реализован интерфейс IAnnotatedObject.Дополнительные сведения см. в разделе Связь пользовательских данных с расширениями средств SharePoint.

Сохранение данных, связанных с элементом проекта

Если имеются данные, связанные с определенным элементом проекта SharePoint (например, значение свойства, добавляемое в элемент проекта), их можно сохранить в файл с расширением SPDATA для элемента проекта.Для этого используйте свойство ExtensionData объекта ISharePointProjectItem.Данные, добавленные в это свойство, сохраняются в элементе ExtensionData в SPDATA-файле элемента проекта.Дополнительные сведения см. в разделе Элемент ExtensionData.

В следующем примере кода демонстрируется использование свойства ExtensionData для сохранения значения свойства (которое является строкой), определенного в настраиваемом типе элемента проекта SharePoint.Данный пример в контексте полного примера см. в разделе Практическое руководство. Добавление свойства в пользовательский тип элемента проекта 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);
        }
    }
}

Сохранение данных, связанных с проектом

Если имеются данные на уровне проекта (например, значение свойства, добавляемое в проекты SharePoint), их можно сохранить в файл проекта (с расширением CSPROJ или VBPROJ) или файл пользовательских параметров проекта (с расширением CSPROJ.USER или VBPROJ.USER).Выбор файла для сохранения данных зависит от того, как будут использоваться эти данные.

  • Если требуется, чтобы данные были доступны всем разработчикам, открывающим проект SharePoint, сохраните их в файл проекта.Этот файл всегда возвращается в базу данных системы управления версиями, поэтому содержащиеся в нем данные доступны другим разработчикам, извлекающим этот проект.

  • Если требуется, чтобы данные были доступны только текущему разработчику, у которого проект SharePoint открыт в Visual Studio, сохраняйте их в файл пользовательских параметров проекта.Этот файл обычно не возвращается в базу данных системы управления версиями, поэтому содержащиеся в нем данные не доступны другим разработчикам, извлекающим этот проект.

Ff406949.collapse_all(ru-ru,VS.110).gifСохранение данных в файл проекта

Чтобы сохранить данные в файл проекта, преобразуйте объект ISharePointProject в объект IVsBuildPropertyStorage, затем воспользуйтесь методом IVsBuildPropertyStorage.SetPropertyValue.В следующем примере кода показано использование этого метода для сохранения значения свойства проекта в файл проекта.Данный пример в контексте полного примера см. в разделе Практическое руководство. Добавление свойства в проекты 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);
        }
    }
}

Дополнительные сведения о преобразовании объектов ISharePointProject в другие типы объектной модели автоматизации или объектной модели интеграции Visual Studio см. в разделе Преобразование между типами системы проектов SharePoint и другими типами проектов Visual Studio.

Ff406949.collapse_all(ru-ru,VS.110).gifСохранение данных в файл пользовательских параметров проекта

Чтобы сохранить данные в файл пользовательских параметров проекта, используйте свойство ProjectUserFileData объекта ISharePointProject.В следующем примере кода показано использование этого свойства для сохранения значения свойства проекта в файл пользовательских параметров проекта.Данный пример в контексте полного примера см. в разделе Практическое руководство. Добавление свойства в проекты 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;
        }
    }
}                

См. также

Основные понятия

Расширение системы проектов SharePoint

Связь пользовательских данных с расширениями средств SharePoint

Преобразование между типами системы проектов SharePoint и другими типами проектов Visual Studio