将自定义数据与 SharePoint 工具扩展相关联

可以向 SharePoint 工具扩展中的某些对象添加自定义数据。 如果您的数据位于扩展的一部分中,而稍后您想从扩展中的其他代码访问该数据,则建立关联对于这种情况非常有用。 您可以将数据与扩展中的某个对象相关联,然后从相同的对象检索数据,而不是实现一种用于存储和访问数据的自定义方式。

向对象中添加自定义数据对于您希望保留与 Visual Studio 中特定项相关的数据这种情况也非常有用。 由于 SharePoint 工具扩展在 Visual Studio 中只加载一次,因此您的扩展随时可能会用于多个不同的项(如项目、项目项或 Server Explorer 节点)。 如果您的自定义数据只与特定项相关,则可以将该数据添加到表示该项的对象中。

在向 SharePoint 工具扩展中的对象添加自定义数据时,该数据不会保留。 该数据仅在该对象的生存期内可用。 在垃圾回收功能将该对象回收之后,数据将丢失。

在 SharePoint 项目系统的扩展中,还可以保存在卸载扩展后继续存在的字符串数据。 有关更多信息,请参见在 SharePoint 项目系统的扩展中保存数据

可包含自定义数据的对象

可以将自定义数据添加到 SharePoint 工具对象模型中实现 IAnnotatedObject 接口的任何对象。 此接口只定义一个属性(即 Annotations),该属性是自定义数据对象的集合。 以下类型实现 IAnnotatedObject

添加和检索自定义数据

若要将自定义数据添加到 SharePoint 工具扩展中的某个对象,请获取要将数据添加到的对象的 Annotations 属性,然后使用 IAnnotationDictionary.Add() 方法将数据添加到该对象中。

若要从 SharePoint 工具扩展中的某个对象检索自定义数据,请获取该对象的 Annotations 属性,然后使用下列方法之一:

  • IAnnotationDictionary.TryGetValue(). 如果该数据对象存在,则此方法返回 true;如果该数据对象不存在,则返回 false。 可以使用此方法检索值类型或引用类型的实例。

  • IAnnotationDictionary.GetValue(). 如果该数据对象存在,则此方法返回该数据对象;如果该数据对象不存在,则返回 null。 可以使用此方法仅检索引用类型的实例。

下面的代码示例确定某个特定数据对象是否已与一个项目项相关联。 如果该数据对象尚未与该项目项相关联,则代码会将该对象添加到该项目项的 Annotations 属性中。 若要在一个更大的示例上下文中查看此示例,请参见如何:向自定义 SharePoint 项目项类型中添加属性

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

请参见

任务

演练:使用项模板创建自定义操作项目项(第 1 部分)

演练:扩展服务器资源管理器以显示 Web 部件

其他资源

SharePoint 工具扩展的编程概念和功能

如何:向 SharePoint 项目中添加属性

如何:向自定义 SharePoint 项目项类型中添加属性