Partager via


Enregistrement des données dans les extensions du système de projet SharePoint

Lorsque vous étendez le système de projet SharePoint, vous pouvez enregistrer des données de type chaîne qui persistent après la fermeture d'un projet SharePoint. Les données sont généralement associées à un élément de projet particulier ou au projet lui-même.

Si vous disposez de données qui ne doivent pas nécessairement persister, vous pouvez ajouter les données à n'importe quel objet du modèle d'objet d'outils SharePoint qui implémente l'interface IAnnotatedObject. Pour plus d'informations, consultez Association de données personnalisées à des extensions d'outils SharePoint.

Enregistrement des données associées à un élément de projet

Lorsque vous avez données qui sont associées à un élément de projet SharePoint particulier, par exemple la valeur d'une propriété que vous ajoutez à un élément de projet, vous pouvez enregistrer les données dans le fichier .spdata pour l'élément de projet. Pour ce faire, utilisez la propriété ExtensionData d'un objet ISharePointProjectItem. Les données que vous ajoutez à cette propriété sont enregistrées dans l'élément ExtensionData dans le fichier .spdata de l'élément de projet. Pour plus d'informations, consultez ExtensionData, élément.

L'exemple de code suivant montre comment utiliser la propriété ExtensionData pour enregistrer la valeur d'une propriété de type chaîne définie dans un type d'élément de projet SharePoint personnalisé. Pour voir cet exemple dans un contexte plus large, consultez Comment : ajouter une propriété à un type d'élément de projet SharePoint personnalisé.

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

Enregistrement des données associées à un projet

Lorsque vous avez des données au niveau du projet, comme la valeur d'une propriété que vous ajoutez à des projets SharePoint, vous pouvez enregistrer les données dans le fichier projet (fichier .csproj ou .vbproj) ou le fichier d'options utilisateur du projet (fichier .csproj.user ou .vbproj.user). Le fichier dans lequel vous choisissez d'enregistrer les données dépend du mode d'utilisation des données :

  • Si vous souhaitez mettre les données à la disposition de tous les développeurs qui ouvrent le projet SharePoint, enregistrez les données dans le fichier projet. Comme ce fichier est toujours archivé dans les bases de données du contrôle de code source, ses données sont à la disposition d'autres développeurs qui extraient le projet.

  • Si vous souhaitez que les données soient disponibles uniquement au développeur en cours qui a ouvert le projet SharePoint dans Visual Studio, enregistrez les données dans le fichier d'options utilisateur du projet. Comme ce fichier n'est pas toujours archivé dans les bases de données du contrôle de code source, ses données ne sont pas à la disposition d'autres développeurs qui extraient le projet.

Enregistrement des données dans le fichier projet

Pour enregistrer des données dans le fichier projet, convertissez un objet ISharePointProject en objet IVsBuildPropertyStorage, puis utilisez la méthode IVsBuildPropertyStorage.SetPropertyValue. L'exemple de code suivant illustre le mode d'utilisation de cette méthode pour enregistrer la valeur d'une propriété de projet dans le fichier projet. Pour voir cet exemple dans un contexte plus large, consultez Comment : ajouter une propriété à des projets 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);
        }
    }
}

Pour plus d'informations sur la conversion des objets ISharePointProject en types différents dans le modèle d'objet Automation de Visual Studio ou dans le modèle d'objet Intégration, consultez Conversion entre des types d'un système de projet SharePoint et d'autres types de projets Visual Studio.

Enregistrement des données dans le fichier d'options utilisateur du projet

Pour enregistrer des données dans le fichier d'options utilisateur du projet, utilisez la propriété ProjectUserFileData d'un objet ISharePointProject. L'exemple de code suivant illustre le mode d'utilisation de cette propriété pour enregistrer la valeur d'une propriété de projet dans le fichier d'options utilisateur du projet. Pour voir cet exemple dans un contexte plus large, consultez Comment : ajouter une propriété à des projets 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;
        }
    }
}                

Voir aussi

Concepts

Extension du système de projet SharePoint

Autres ressources

Association de données personnalisées à des extensions d'outils SharePoint

Conversion entre des types d'un système de projet SharePoint et d'autres types de projets Visual Studio